Можно ли сделать захват экрана приложения DirectX (игра для примера) в D3D11?D3D11 Screen Capture in C++
я могу сделать это легко в DirectX 9 или API подсекать (IDXGISwapChain :: Present), но невозможно с DirectX 11.
Я D3D11 и инициализировать создать SwapChain с окном игры (FindWindow()), тогда я получаю BackBuffer,
затем ID3D11Texture2D :: GetDesc() использовать его в ID3D11Device :: CreateTexture2D(), затем ID3D11DeviceContext :: CopyResource() , который дает мне новый ID3D11Texture2D ресурс.
Когда я сохраняю его обычными способами, как D3DX11SaveTextureToFile(), я всегда получаю черное изображение.
Что я забыл?
Спасибо.
Это возможно, но не тривиально, так как вы должны сделать API подключения вы упоминаете. Проект OBS, вероятно, делает это «где-то в своём коде», см. Также http://stackoverflow.com/questions/5069104/fastest-method-of-screen-capturing – rogerdpack
Если вы нацеливаете клиентов Windows 8, API Duplication Desktop - это способ пойти : https://msdn.microsoft.com/library/windows/desktop/hh404487.aspx –
OBS использует указанный мной крючок (файл DXGICapture.cpp). Это легко, как с DirectX9, но я не понимаю, почему аналогичный метод с DirectX11 дает черное изображение. –