是否可以在D3D11中制作DirectX应用程序(例如游戏)的屏幕截图?
我可以在DirectX 9或API挂钩(IDXGISwapChain :: Present)中轻松完成,但DirectX 11无法实现。
我将D3D11初始化并使用Game窗口创建SwapChain(FindWindow()), 然后我得到BackBuffer,
然后 ID3D11Texture2D :: GetDesc() 使用它 ID3D11Device :: CreateTexture2D() 然后 ID3D11DeviceContext :: CopyResource() 这给了我一个新的ID3D11Texture2D资源。
当我用D3DX11SaveTextureToFile()等常用方法保存时,我总是得到一张黑色图像。
我忘了什么?
感谢。
答案 0 :(得分:0)
我认为这是检查代码的两步:
ID3D11DeviceContext :: CopyResource()是否按预期工作?我们知道,这个函数需要严格相同的src和des的desc,src tex有一些来自des tex的diff desc。您可以在保存前直接输出到窗口进行检查。
不推荐使用D3DX11SaveTextureToFile,它被SaveToXXXFile取代(其中XXX是WIC,DDS或TGA; WIC不支持DDS和TGA; D3DX 9支持TGA作为游戏的常见艺术源格式) 。 DirectXTex和DirectXTK库是新的。但是如果配置合适,它现在仍然有用。检查此func返回值。确保您知道如何使用
HRESULT D3DX11SaveTextureToFile(
ID3D11DeviceContext *pContext,
_In_ ID3D11Resource *pSrcTexture,
_In_ D3DX11_IMAGE_FILE_FORMAT DestFormat,
_In_ LPCTSTR pDestFile
);