代码之家  ›  专栏  ›  技术社区  ›  PolGraphic

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

  •  0
  • PolGraphic  · 技术社区  · 10 年前

    我有一个自定义纹理类:

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

    但问题是:如何获得 DirectX::Image (来自DirectXTex)结构基于 ID3D11Texture2D ?

    1 回复  |  直到 10 年前
        1
  •  0
  •   mojiiz    9 年前

    从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