下午好!
在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 它不完整
答案 0 :(得分:2)
在GPU上,简单的解决方案是将纹理渲染到另一个渲染目标,作为全屏四边形'。不需要任何专门的着色器,它只是简单的渲染。当您加载纹理时,它会被“混合”#39;如果需要标准的红色,绿色和蓝色通道,当你写入渲染目标时,根据格式会发生同样的事情。
如果您需要适用于所有DirectX Tool Kit的解决方案,请参阅this tutorial中的
SpriteBatch
和Direct3D Hardware Feature Levels。如果您需要D3D_FEATURE_LEVEL_10_0
或更高版本,请参阅PostProcess
,该{{1}}针对您始终将四边形绘制到整个渲染目标的事实进行了优化。如果您需要CPU解决方案,请参阅DirectXTex。