Мне нужно захватить пиксели экрана в текстуру для выполнения постобработки. Раньше я использовал BlitCommandEncoder для копирования из текстуры в текстуру. Исходная текстура, являющаяся текстурой MTLDrawable, на мою целевую текстуру. У них обоих одинаковый MTLPixelFormatBGRA8Unorm, поэтому все работает нормально.
Однако теперь мне нужно использовать текстуру прикрепления цвета буфера кадра MTLPixelFormatRGBA16Float для рендеринга HDR. Итак, когда я захватываю пиксели экрана, я на самом деле беру из этой текстуры прикрепления цвета вместо текстуры Drawable. И я получаю эту ошибку:
[MTLDebugBlitCommandEncoder internalValidateCopyFromTexture: sourceSlice: sourceLevel: sourceOrigin: sourceSize: toTexture: destinationSlice: destinationLevel: destinationOrigin: options:]: 447: неудачное утверждение [sourceTexture pixelFormat] (MTLPixelFormatRGBA16Float)
must [pixelFormat pixelFormat] (MTLPixelFormatRGBA16Float)
должен
Не думаю, что мне нужно менять целевую текстуру на формат RGBA16Float? Потому что это займет вдвое больше памяти. Одной полноэкранной текстуры (цветное приложение) в этом формате должно хватить для работы HDR, верно?
Есть ли другой способ успешно выполнить такое копирование? В openGL нет ошибки при копировании с помощью glCopyTexImage2D