ドキュメントを読んで理解したところ、3D テクスチャには 1 つのスライスしかありません。ただし、データをロードしようとすると、次のエラーで失敗します。
MTLTexture.m:504: failed assertion `imageBytes(0) must be >= (2048).'
ロードに使用されるコードは次のとおりです (テクスチャは typeMTLPixelFormatRG16Uint
と size ですelementsInRow * elementsInRow * elementsInRow
):
[texture replaceRegion:region mipmapLevel:0 withBytes:data bytesPerRow:sizeof(uint16_t) * 2 * elementsInRow];
ここでelementsInRow
は128
、地域はMTLRegion region = MTLRegionMake3D(50, 50, 50, 4, 4, 4);
、データはuint16_t data[region.size.depth][region.size.height][region.size.width][2]
です。
私も試しました:
[texture replaceRegion:region mipmapLevel:0 slice:0 data bytesPerRow:sizeof(uint16_t) * 2 * elementsInRow bytesPerImage:sizeof(uint16_t) * 2 * elementsInRow * elementsInRow];
しかし、メモリエラーが発生します。
こちらもご覧ください: https://forums.developer.apple.com/message/43332#43332
3D テクスチャの 3D 領域にデータを正しくロードするにはどうすればよいですか?
更新 1:
2 番目の例は、領域に深さが1
あり、さらに大きい場合に機能width
しますheight
(ただし、これを使用32x32x1
するとクラッシュします)。
更新 2:
領域内のすべてのピクセルに同じ値を使用16x16x1
して書き込むと、うまくいくように見えますが、データを画像としてエクスポートすると、代わりにランダム データが書き込まれているように見えます。画像の拡大されたセクションを参照してください。
テストを再度実行すると、画像の上部のセクションは均一な色になりますが、残りのポイントは強度が変わります。すべてのピクセルに同じ値を書き込んでいることに注意してください。したがって、領域は均一な色でなければなりません。