问题描述
当前,我将像素数据复制到CVPixelBuffer的y,u,v平面,使用CVMetalTextureCache创建CVMetalTexture,并导入和使用MTLTexture。
有没有一种方法可以制作CVMetalTexture而不将像素数据复制到CVPixelBuffer的y,u,v平面? 还是有一种方法可以仅使用像素数据指针而不使用CVPixelBuffer来创建MTLTexture?
解决方法
创建MTLTexture的惯用方式是:
创建一个MTLTextureDescriptor
来描述所需的纹理-其大小,像素格式,mip贴图的数量等。
使用纹理描述符通过makeTexture(descriptor:)
从MTLDevice
请求新纹理。
在纹理上使用replace(region:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:)
,以用数据填充纹理。
CVMetalTexture
主要用于将CoreVideo数据桥接到Metal中,例如如果您要解码视频并将其显示在3d场景中。如果您还没有进入CV
的世界,那么它无用。