DirectX 11 — захват экрана D3D11 при переполнении стека

Можно ли сделать снимок экрана приложения DirectX (игра для примера) в D3D11?

Я могу сделать это легко в DirectX 9 или с перехватом API (IDXGISwapChain :: Present), но невозможно с DirectX 11.

Я инициализирую D3D11 и создаю SwapChain с окном игры (FindWindow ()),
тогда я получаю BackBuffer,

затем
ID3D11Texture2D :: GetDesc ()
использовать его в
ID3D11Device :: CreateTexture2D (),
затем
ID3D11DeviceContext :: CopyResource ()
который дает мне новый ресурс ID3D11Texture2D.

Когда я сохраняю его обычными способами, такими как D3DX11SaveTextureToFile (), я всегда получаю черное изображение.

Что я забыл?

Благодарю.

1

Решение

Я думаю, что здесь два шага, чтобы проверить свой код:

  1. ID3D11DeviceContext :: CopyResource () работает ли он должным образом? Как мы знаем, эта функция требует строго одного и того же дескриптора src и des, если src tex имеет некоторые отличия от des tex. Вы можете вывести в окно непосредственно, чтобы проверить перед сохранением.

  2. 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
    );
    
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]