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