将MTLTexture从depth32Float转换为bgra8UNorm

时间:2019-02-15 10:20:02

标签: metalkit metal-performance-shaders

我想使用Metal Performance Shaders处理深度缓冲区中的信息,例如使用高斯或sobel着色器。

使用MTLTexture像素格式的depth32Float时遇到问题。 MPSImageGaussianBlur或任何其他性能着色器均不接受它作为源纹理。

我尝试使用depthBufferTexture.makeTextureView(pixelFormat: .bgra8Unorm)进行转换,但出现错误:

  

validateArgumentsForTextureViewOnDevice:1406:失败的断言source texture pixelFormat (MTLPixelFormatDepth32Float) not castable.

有什么方法可以将depth32Float转换为bgra8UNorm或任何其他像素格式?

1 个答案:

答案 0 :(得分:2)

depth32Float 转换为 bgra8UNorm ,我认为这没有多大意义,它们具有不同的维度和渠道数量。对于您而言,最好的解决方案是使用 MTLPixelFormatR32Float 。 要将 depth32Float 转换为 MTLPixelFormatR32Float ,请使用 MTLComputeCommandEncoder