在DXGI格式之间转换RGBA数据

时间:2017-02-20 11:27:37

标签: c++ windows texture2d render-to-texture direct3d11

我需要将DXGI_FORMAT_R32G32B32A32_TYPELESS类型的ID3D11Texture2D纹理有效地转换为DXGI_FORMAT_B8G8R8A8_TYPELESS(或任何其他32位RGBA类型)的纹理。基本上将每像素纹理128位减少到每像素32位。看起来像ID3D11DeviceContext :: CopyResource-method无法处理这样的格式转换。我应该使用着色器来实现吗?如果是,可以将着色器与CopyResource方法一起使用,还是需要设置完整的渲染管道?尝试在CPU上进行转换但速度太慢。

1 个答案:

答案 0 :(得分:1)

一般来说,进行这些转换的最快方法是使用GPU将源格式纹理的“全屏四边形”渲染到目标格式的渲染目标。这些限制将基于支持渲染目标格式的Direct3D硬件功能级别。例如,在具有现代驱动程序的所有功能级别上,您可以依靠DXGI_FORMAT_B8G8R8A8_UNORM作为渲染目标而不是DXGI_FORMAT_B8G8R8A8_SNORM

请参阅MSDNDirect3D Feature Levels

  

对于所有可能的DXGI格式转换的基于CPU的回退,请参阅DirectXTex