【问题标题】:Converting RGBA data between DXGI formats在 DXGI 格式之间转换 RGBA 数据
【发布时间】:2017-07-09 15:50:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    MSDNDirect3D Feature Levels

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2019-06-10
      相关资源
      最近更新 更多