如何为使用CVMetalTextureCache创建的纹理指定TextureUsage

时间:2018-03-26 07:50:06

标签: macos metal render-to-texture core-video

我需要从CVPixelBuffers创建纹理,所以我使用CVMetalTextureCache来生成它们。我想将这些纹理用作渲染目标,但我还没有找到指定MTLTextureUsage的方法。

TextureAttributes参数标记为"保留供将来使用"

如果没有办法,继续使用TextureCache并执行blit或从textureDescriptor创建纹理会更快吗?

1 个答案:

答案 0 :(得分:0)

我使用CVMetalTextureCache生成源自CVPixelBufferPool的Metal纹理。我正在使用CVMetalTextureCacheCreateTextureFromImage来创建Metal纹理本身,如下所示:

var pixelBuffer:CVPixelBuffer // this I get from CVPixelBufferPoolCreatePixelBufferWithAuxAttributes

var mTexture:CVMetalTexture?
let textureAttributes = [kCVPixelBufferPoolAllocationThresholdKey as String : Int(maxBufferCount)] as CFDictionary

if  CVMetalTextureCacheCreateTextureFromImage(kCFAllocatorDefault, metalTextureCache,pixelBuffer!,textureAttributes,MTLPixelFormat.bgra8Unorm,Int(globals_L.displaySize[0]),Int(globals_L.displaySize[1]), 0, &mTexture)  != kCVReturnSuccess {
    print("Problem creating a metal texture from pixel buffer")
}
else {
    metalTexture = mTexture  // now we use this metalTexture to render 
}

这会对你有用吗?