Можно ли сделать снимок экрана приложения DirectX (игра для примера) в D3D11?
Я могу сделать это легко в DirectX 9 или с перехватом API (IDXGISwapChain :: Present), но невозможно с DirectX 11.
Я инициализирую D3D11 и создаю SwapChain с окном игры (FindWindow ()),
тогда я получаю BackBuffer,
затем
ID3D11Texture2D :: GetDesc ()
использовать его в
ID3D11Device :: CreateTexture2D (),
затем
ID3D11DeviceContext :: CopyResource ()
который дает мне новый ресурс ID3D11Texture2D.
Когда я сохраняю его обычными способами, такими как D3DX11SaveTextureToFile (), я всегда получаю черное изображение.
Что я забыл?
Благодарю.
Я думаю, что здесь два шага, чтобы проверить свой код:
ID3D11DeviceContext :: CopyResource () работает ли он должным образом? Как мы знаем, эта функция требует строго одного и того же дескриптора src и des, если src tex имеет некоторые отличия от des tex. Вы можете вывести в окно непосредственно, чтобы проверить перед сохранением.
D3DX11SaveTextureToFile устарел, его заменил SaveToXXXFile (где XXX — это WIC, DDS или TGA; WIC не поддерживает DDS и TGA; D3DX 9 поддерживает TGA как общий формат исходного текста для игр). Библиотека DirectXTex и DirectXTK является новой. Но это все еще работает сейчас, если вы настроите соответствующий. проверьте это возвращаемое значение. Убедитесь, что вы знаете, как использовать
HRESULT D3DX11SaveTextureToFile(
ID3D11DeviceContext *pContext,
_In_ ID3D11Resource *pSrcTexture,
_In_ D3DX11_IMAGE_FILE_FORMAT DestFormat,
_In_ LPCTSTR pDestFile
);
Других решений пока нет …