当前,我将像素数据复制到CVPixelBuffer的y、u、v平面,使用CVMetalTextureCache创建CVMetalTexture,并导入并使用MTLTexture。
有没有一种方法可以在不将像素数据复制到CVPixelBuffer的y、u、v平面的情况下制作CVMetalTexture?或者,有没有一种方法可以在不使用CVPixelBuffer的情况下仅使用像素数据指针创建MTLTexture?
创建MTLTexture的惯用方法是:
创建一个MTLTextureDescriptor
来描述你想要的纹理——它的大小、像素格式、mip贴图的数量等。
使用纹理描述符通过makeTexture(descriptor:)
向MTLDevice
请求新纹理。
在纹理上使用replace(region:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:)
可以使用数据填充纹理。
CVMetalTexture
的存在主要是为了将CoreVideo数据桥接到Metal中——例如,如果您想解码视频并在三维场景中显示它。如果你还没有进入CV
的世界,它就没有用处。