Это фрагмент кода, который я сейчас использовал в качестве теста, похоже, он работает.
ширина и высота - это размер ЭКРАНА в оконном режиме, а не окон. Так что для меня они установлены в 1280 x 1024, а не в окно, к которому я рендуюсь.
Вам также необходимо заменить mEngine-> getDevice () каким-либо способом получения вашего IDirect3DDevice9. Я просто вставил этот код в случайное d3d-приложение, которое мне нужно было сделать, чтобы его было проще тестировать. Но я могу подтвердить, что он фиксирует как выходные данные этого приложения, так и другое приложение d3d, запущенное одновременно.
О, я предположил, что это D3D9, как вы не сказали, я не уверен насчет d3d10 или 11
IDirect3DSurface9* surface;
mEngine->getDevice()->CreateOffscreenPlainSurface(width, height, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &surface, NULL);
mEngine->getDevice()->GetFrontBufferData(0, surface);
D3DXSaveSurfaceToFile("c:\\tmp\\output.jpg", D3DXIFF_JPG, surface, NULL, NULL);
surface->Release();