Приведите MTLTexture из глубины 32Плавать в bgra8UNorm - PullRequest
0 голосов
/ 15 февраля 2019

Я хотел бы обрабатывать информацию из буфера глубины с помощью Metal Performance Shaders, например, с использованием гауссовых или sobel-шейдеров.

Я сталкиваюсь с проблемами при использовании MTLTexture с depth32Float форматом пикселей.MPSImageGaussianBlur или любой другой шейдер производительности не принимает его в качестве исходной текстуры.

Я пытался преобразовать его, используя: depthBufferTexture.makeTextureView(pixelFormat: .bgra8Unorm), но получил сообщение об ошибке:

validateArgumentsForTextureViewOnDevice: 1406: сбой подтверждения source texture pixelFormat (MTLPixelFormatDepth32Float) not castable.

Есть лиВ любом случае, как конвертировать depth32Float в bgra8UNorm или любой другой формат пикселей?

1 Ответ

0 голосов
/ 15 февраля 2019

Преобразование из deep32Float в bgra8UNorm , на мой взгляд, не имеет особого смысла, они имеют разные размеры и количество каналов.В вашем случае лучшим решением будет использование MTLPixelFormatR32Float .Для преобразования из deep32Float в MTLPixelFormatR32Float используйте MTLComputeCommandEncoder .

...