Копирование между текстурами металла с разными форматами пикселей - PullRequest
1 голос
/ 11 июля 2020

Я экспериментировал с разными copyFromTexture:... методами, но мне кажется, что они всегда хотят одного и того же формата пикселей между текстурами. Я чувствую, что должно быть просто скопировать из MTLTexture с цветовым форматом MTLPixelFormatRGBA8Uint в формат с MTLPixelFormatRGBA16Float, что мне здесь не хватает? Мне действительно нужно использовать фреймворк Accelerate или аналогичный для преобразования формата пикселей на ЦП? Надеясь на что-то быстрое, я смогу делать каждый кадр ...

Мой код:

[blitCommandEncoder copyFromTexture:tempTexture sourceSlice:0 sourceLevel:0 toTexture:anotherTexture destinationSlice:0 destinationLevel:0 sliceCount:1 levelCount:1];

Ошибки консоли:

-[MTLDebugBlitCommandEncoder internalValidateCopyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:options:]:447: failed assertion `[sourceTexture pixelFormat](MTLPixelFormatRGBA8Uint) must equal [destinationTexture pixelFormat](MTLPixelFormatRGBA16Float) '

Спасибо!

1 Ответ

2 голосов
/ 11 июля 2020

Можно использовать шейдеры производительности металла или настраиваемые шейдеры вычислений.

MPSImageConversion - фильтр, выполняющий преобразование цветового пространства, альфа , или формат пикселей.

Как и все фильтры Metal Performance Shaders, фильтр преобразования позволяет использовать исходную и целевую текстуры с разными форматами пикселей и, в этом случае, преобразует формат исходной текстуры в формат целевой текстуры.

...