2017-02-20 236 views
0

我需要將DXGI_FORMAT_R32G32B32A32_TYPELESS類型的ID3D11Texture2D紋理有效地轉換爲DXGI_FORMAT_B8G8R8A8_TYPELESS(或任何其他32位RGBA類型)紋理。基本上將每像素紋理的128位降低到每像素32位。看起來像ID3D11DeviceContext :: CopyResource-method不能處理這種格式轉換。我應該使用着色器來實現嗎?如果是,那麼着色器可以與CopyResource方法一起使用,還是需要設置完整的渲染管道?嘗試在CPU上進行轉換,但速度太慢。在DXGI格式之間轉換RGBA數據

回答

1

一般而言,最快速的方法是使用GPU將源格式紋理的「全屏四邊形」渲染爲目標格式的渲染目標。限制將基於支持渲染目標格式的Direct3D硬件功能級別。例如,在具有現代驅動程序的所有功能級別上,可以指望支持DXGI_FORMAT_B8G8R8A8_UNORM作爲渲染目標,但不支持DXGI_FORMAT_B8G8R8A8_SNORM

MSDNDirect3D Feature Levels

對於所有可能的DXGI格式轉換基於CPU的回退,見DirectXTex