如何获得DirectX::图像(从DirectXTex)结构基于ID3D11Texture2D

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

本文关键字:结构 DirectXTex ID3D11Texture2D 何获得 DirectX 图像      更新时间:2023-10-16

我有一个自定义纹理类:

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

我使用这个纹理作为渲染通道之间的渲染目标。我想写的saveToTGA(std::wstring filePath)方法保存纹理文件(一种截图)。

MSDN说D3DX11SaveTextureToFile(...)贬值了,所以我决定按照他们的建议使用DirectXTex库。

我知道我必须使用:

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

但问题是:如何在ID3D11Texture2D的基础上得到DirectX::Image(从DirectXTex)结构?

从MSDN文档中可以使用

Blockquote我们建议你使用DirectXTex库,CaptureTexture然后SaveToXXXFile(其中XXX是WIC, DDS,或TGA;WIC不支持DDS和TGA;D3DX 9支持TGA作为游戏的通用美术源格式)。

首先使用

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

,后面跟着Save功能

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

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