1D テクスチャに手動で値を入力し、そのテクスチャを計算シェーダーに渡そうとしています (これらはコードで設定したい 2 つのピクセルであり、画像を表しているわけではありません)。
現在、Metal のサンプルが少ないため、ロードされたデータを生のバイト データに変換することでテクスチャをロードする2D テクスチャUIImage
を扱っているサンプルをすべて見つけることができましたが、ダミーを作成するのUIImage
はハックのように感じました。
これは私が始めた「素朴な」方法です -
...
var manualTextureData: [Float] = [ 1.0, 0.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0 ];
let region: MTLRegion = MTLRegionMake1D(0, textureDescriptor.width);
myTexture.replaceRegion(region, mipmapLevel: 0, withBytes: &manualTextureData, bytesPerRow: 0);
しかし、Metal はシェーダーでこれらの値を認識しません (最初の値を除いて、空のテクスチャを取得します)。
おそらく Float 配列をバイト配列 (たとえば ) に変換する必要があることにすぐに気付きましたが、どちらにも変換するUInt8
方法が見つかりませんでした。[Float]
[UInt8]
私が考えている別の可能なオプションは、CVPixelBuffer
オブジェクトを使用することですが、それも問題の回避策のように感じました.
では、それに取り組む正しい方法は何ですか?
前もって感謝します。
- 私はObjective-C
CVPixelBuffer
に精通していないため、 /の使用UIImage
が単純である必要があるものに対して誇張されているかどうかはわかりません。