我想使用Metal Performance Shaders处理深度缓冲区中的信息,例如使用高斯或sobel着色器。
使用MTLTexture
像素格式的depth32Float
时遇到问题。 MPSImageGaussianBlur
或任何其他性能着色器均不接受它作为源纹理。
我尝试使用depthBufferTexture.makeTextureView(pixelFormat: .bgra8Unorm)
进行转换,但出现错误:
validateArgumentsForTextureViewOnDevice:1406:失败的断言
source texture pixelFormat (MTLPixelFormatDepth32Float) not castable.
有什么方法可以将depth32Float
转换为bgra8UNorm
或任何其他像素格式?
答案 0 :(得分:2)
从 depth32Float 转换为 bgra8UNorm ,我认为这没有多大意义,它们具有不同的维度和渠道数量。对于您而言,最好的解决方案是使用 MTLPixelFormatR32Float 。 要将 depth32Float 转换为 MTLPixelFormatR32Float ,请使用 MTLComputeCommandEncoder 。