将金属帧缓冲区复制到具有不同像素格式的MTLTexture

问题描述 投票:0回答:1

我需要将屏幕像素捕获到纹理中以执行后期处理。以前,我一直在使用BlitCommandEncoder从纹理复制到纹理。源纹理是MTLDrawable纹理,位于我的目标纹理上。它们都具有相同的MTLPixelFormatBGRA8Unorm,因此一切正常。

但是,现在我需要使用MTLPixelFormatRGBA16Float的帧缓冲区颜色附件纹理进行HDR渲染。因此,当我抓取屏幕像素时,实际上是从此颜色附件纹理而不是Drawable纹理抓取。而且我收到此错误:

[[MTLDebugBlitCommandEncoder internalValidateCopyFromTexture:sourceSlice:sourceLevel:sourceOrigin:sourceSize:toTexture:destinationSlice:destinationLevel:destinationOrigin:options:]:447:失败的断言[sourceTexture pixelFormat] (MTLPixelFormatRGBA16Float)必须等于[destinationTexture pixelFormat] (MTLPixelFormatBGRA8Unorm)

我认为我不需要将目标纹理更改为RGBA16Float格式吗?因为那样会占用双倍的内存。一种具有该格式的全屏纹理(颜色附件)应该足以使HDR正常工作?

还有其他方法可以成功执行这种复制吗?在openGL上,使用glCopyTexImage2D复制时没有错误]

我需要将屏幕像素捕获到纹理中以执行后期处理。以前,我一直在使用BlitCommandEncoder从纹理复制到纹理。源纹理是MTLDrawable ...

ios graphics metal blit
1个回答
0
投票

金属在渲染期间会自动从源格式转换为目标格式。因此,您只需要执行无操作渲染即可执行转换。

© www.soinside.com 2019 - 2024. All rights reserved.