MTLTextureDescriptor conundrum



我正在尝试转换" Metal By example ";App - textrendering -适用于IOS到OSX。不幸的是,Xcode告诉我,MTLTextureDescriptor的storageMode需要设置为MTLStorageModePrivate,当我这样做时:replaceRegion:mipmapLevel:withBytes:bytesPerRow:抛出"断言失败"的CPU访问纹理与MTLResourceStorageModePrivate存储模式是不允许的。

MTLTextureDescriptor *textureDesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:AAPLDepthPixelFormat
width:MBEFontAtlasSize
height:MBEFontAtlasSize
mipmapped:NO];

textureDesc.storageMode = MTLStorageModePrivate;
textureDesc.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite;
textureDesc.usage = MTLTextureUsageShaderRead;//MTLTextureUsageRenderTarget;

MTLRegion region = MTLRegionMake2D(0, 0, MBEFontAtlasSize, MBEFontAtlasSize);
_fontTexture = [_device newTextureWithDescriptor:textureDesc];
[_fontTexture setLabel:@"Font Atlas"];
[_fontTexture replaceRegion:region mipmapLevel:0 withBytes:_fontAtlas.textureData.bytes bytesPerRow:MBEFontAtlasSize];

任何帮助都将非常感激!

在macOS上,你实际上必须显式地同步CPU/RAM和GPU之间的资源(因为Mac可能有一个专用的GPU与自己的内存,与iOS上的共享内存模型相反)。

为此,您需要将存储模式设置为managed,并使用MTLBlitCommandEncoder在设备之间复制内存(参见managed的文档)。

相关内容

  • 没有找到相关文章

最新更新