如何获取基于ID3D11Texture2D的DirectX::Image(来自DirectXTex)结构?

How to get the DirectX::Image (from DirectXTex) structure based on ID3D11Texture2D?

我有一个自定义纹理 class:

class Texture{
    ID3D11Texture2D * renderTargetTexture;
public:
    ...
    void saveToTGA(std::wstring filePath);
};

我将此纹理用作渲染通道之间的渲染目标。我想编写 saveToTGA(std::wstring filePath) 方法,将纹理保存到文件(一种屏幕截图)。

MSDND3DX11SaveTextureToFile(...) 已贬值,所以我决定按照他们的建议使用 DirectXTex 库。

我知道我必须使用:

DirectX::Image image = ...
DirectX::SaveToTGAFile(image, filePath.c_str());

但问题是:如何根据ID3D11Texture2D获取DirectX::Image(来自DirectXTex)结构?

您可以使用 MSDN 文档

Blockquote we recommend that you use the DirectXTex library, CaptureTexture then SaveToXXXFile (where XXX is WIC, DDS, or TGA; WIC doesn't support DDS and TGA; D3DX 9 supported TGA as a common art source format for games).

因此,首先使用

从纹理缓冲区捕获纹理
HRESULT hr = DirectX::CaptureTexture(m_D3D->GetDevice(), m_D3D->GetDeviceContext(), resourceContext, image);

然后使用保存功能

hr = DirectX::SaveToDDSFile(image.GetImages(),image.GetImageCount(), image.GetMetadata(), DirectX::DDS_FLAGS_NONE, Filename);

请参阅此参考资料https://github.com/Microsoft/DirectXTex/wiki/CaptureTexture