的DirectX。如何将纹理从一种像素格式转换为另一种格式(RGBA - > BGRA)?

时间:2017-09-22 10:13:18

标签: c++ directx directx-11

下午好!

在DirectX我是初学者,我不知道很多事情。

我在RGBA格式的视频卡内存中有一个纹理(DXGI_FORMAT_R8G8B8A8_UNORM)。这是一个截获的游戏缓冲区。 在将其内容复制到计算机的内存之前,我需要对此纹理进行转换 格式为BGRA(DXGI_FORMAT_B8G8R8A8_UNORM)。如何将纹理从一种像素格式转换为另一种像素格式 视频卡的手段?

// DXGI_FORMAT_R8G8B8A8_UNORM
ID3D11Texture2D *pTexture1;

// DXGI_FORMAT_B8G8R8A8_UNORM
ID3D11Texture2D *pTexture2;
D3D11_TEXTURE2D_DESC desc2 = {};
desc2.Width = swapChainDesc.BufferDesc.Width;
desc2.Height = swapChainDesc.BufferDesc.Height;
desc2.MipLevels = 1;
desc2.ArraySize = 1;
desc2.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc2.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc2.SampleDesc.Count = 1;
desc2.Usage = D3D11_USAGE_DEFAULT;
desc2.MiscFlags = 0;

void pixelConvert(ID3D11Texture2D *pTexture1, ID3D11Texture2D *pTexture2)
{
     // 
     // Code....
     //
}

我不明白这个解决方案: DX11 convert pixel format BGRA to RGBA 它不完整

1 个答案:

答案 0 :(得分:2)

在GPU上,简单的解决方案是将纹理渲染到另一个渲染目标,作为全屏四边形'。不需要任何专门的着色​​器,它只是简单的渲染。当您加载纹理时,它会被“混合”#39;如果需要标准的红色,绿色和蓝色通道,当你写入渲染目标时,根据格式会发生同样的事情。

  

如果您需要适用于所有DirectX Tool Kit的解决方案,请参阅this tutorial中的SpriteBatchDirect3D Hardware Feature Levels。如果您需要D3D_FEATURE_LEVEL_10_0或更高版本,请参阅PostProcess,该{{1}}针对您始终将四边形绘制到整个渲染目标的事实进行了优化。

     

如果您需要CPU解决方案,请参阅DirectXTex