gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:56:58 24 4
gpt4 key购买 nike

下午好!

在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不完整

最佳答案

在 GPU 上,简单的解决方案是将纹理作为“全屏四边形”渲染到另一个渲染目标。不需要任何专门的着色​​器,它只是简单的渲染。当您加载纹理时,如果需要,它会“混合”到标准的红色、绿色和蓝色 channel ,并且当您写入渲染目标时,会发生相同的事情,具体取决于格式。

See SpriteBatch in DirectX Tool Kit, and this tutorial in particular if you need a solution that works on all Direct3D Hardware Feature Levels. If you can require D3D_FEATURE_LEVEL_10_0 or later, then see PostProcess which is optimized for the fact that you are always drawing the quad to the entire render target.

If you want a CPU solution, see DirectXTex.

关于c++ - DirectX。如何将纹理从一种像素格式转换为另一种像素格式(RGBA -> BGRA)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46362247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com