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

时间:2015-09-18 20:14:22

标签: c++ directx directx-11 texture2d render-to-texture

我有一个自定义纹理类:

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());

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

1 个答案:

答案 0 :(得分:0)

从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);

并按照保存功能

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

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