从我通过阅读文档了解到的情况来看,3D纹理只有1个切片。当我尝试虽然将数据加载到它,它失败,错误:将数据加载到Metal中的3D纹理中
MTLTexture.m:504: failed assertion `imageBytes(0) must be >= (2048).'
用于加载的代码是(纹理是类型MTLPixelFormatRG16Uint
和大小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区域加载数据?
UPDATE 1:
第二个例子的工作原理在区域具有深度1
和更大width
和height
(但32x32x1
它会崩溃)。
更新2:
如果我使用16x16x1
,并在该地区的每个像素相同的值写入,它似乎工作,但是当我将数据导出为一个图像,它看起来就像是随机的数据被写入而是看到图像的这种缩放后的部分:
如果我再次运行测试,图像将有统一的颜色相同的顶部部分,但点的其余部分将改变强度。请注意,我为每个像素写入了相同的值,因此该区域应该具有统一的颜色。