我创建了一个像这样的 MTLTexture:
descTex=[MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatRGBA8Unorm width:texCamWidth height:texCamHeight mipmapped:NO];
descTex.usage = MTLTextureUsageShaderWrite | MTLTextureUsageShaderRead ;
[descTex setStorageMode:MTLStorageModeShared];
texOutRGB = [_device newTextureWithDescriptor:descTex];
Run Code Online (Sandbox Code Playgroud)
使用计算着色器填充纹理并将其渲染到屏幕上。结果符合预期。现在我需要做一个CPU钩子来修改纹理数据,这是用着色器无法完成的。我预计 MTLTexture.buffer 内容将允许我循环像素,但它似乎不能那样工作。我看到人们使用 getBytes 然后replaceRegion 将其写回,但这看起来不像使用共享内存,因为创建了数据副本。如何用CPU循环遍历纹理中的RGBA像素数据?