2017-01-17 5 views
1

MPSImageの基礎となるメモリの操作に問題があります。私は、getBytesreplaceのMPSImageのtextureメンバ変数を使用して、基になるデータを読み書きしています。問題は、メモリがイメージとしてどのように解釈されるか(つまり、行、列、およびチャネルがどのようにレイアウトされているか)のドキュメントを見つけることができないことです。問題を複雑にするのは、フィーチャチャンネルの数にかかわらず、データはRGBAテクスチャスライスのスタックとして保存され、一部のチャンネルは未使用のまま残される可能性があるということです。たとえば、3つのフィーチャチャンネルでは、RGBAテクスチャスライスが1つあり、1つのチャンネルのスペースは使用されません。アップルメタルMPSImageのメモリレイアウト

問題は、実際にMPSImageデータがテクスチャ内でどのように配置されているかです。もともと推測していたよりも複雑に思えます。

多くの実験の後、フィーチャチャンネルの数が< 4か> 4かどうかによってデータが異なるように思われますが、それでもわかりません。

誰も私にMPSImageのデータレイアウトを説明できますか?

答えて

0

最初の4つのフィーチャチャネルは、標準のRGBAテクスチャと同様にエンコードされます。フィーチャチャネル0は「R」位置にあり、フィーチャチャネル1は「G」位置にあり、以下同様である。

次の4つの機能チャネルは、texture2d_arrayの次のスライスとして存在します。 20個の機能チャンネルを持つ100x100の画像がある場合、これは100x100のテクスチャ配列としてエンコードされ、(20/4 =)5スライスが配列に含まれます。

問題をもっと複雑にするには、それぞれが4つ以上の機能チャンネルを持つ複数の画像を持つMPSImageアレイを持つことができます。これはしばしばバッチ処理と呼ばれます。第2の画像は、第1の画像の直後のテクスチャ配列内に見出される。 MPSIイメージに複数の100x100x20イメージがある場合、2番目のイメージはスライス5から始まり、3番目のイメージはスライス10で始まります。

関連する問題