Код: Выделить всё
void screenshot(IDXGISwapChain *pSwapChain)
{
ID3D11Device *pDevice;
pSwapChain->GetDevice(__uuidof(ID3D11Device), reinterpret_cast(&pDevice));
ID3D11DeviceContext *pContext;
pDevice->GetImmediateContext(&pContext);
ID3D11Texture2D *pBackBuffer;
pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast(&pBackBuffer));
D3D11_TEXTURE2D_DESC txtDesc;
pBackBuffer->GetDesc(&txtDesc);
txtDesc.Usage = D3D11_USAGE_STAGING;
txtDesc.BindFlags = 0;
txtDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
// txtDesc.Format == DXGI_FORMAT_B8G8R8A8_UNORM
ID3D11Texture2D *pBackBufferStaging;
pDevice->CreateTexture2D(&txtDesc, nullptr, &pBackBufferStaging);
pContext->CopyResource(pBackBufferStaging, pBackBuffer);
HRESULT hr = D3DX11SaveTextureToFileA(pContext, pBackBufferStaging, D3DX11_IFF_PNG, "E:\\screenshot.png");
// hr == E_FAIL
pBackBufferStaging->Release();
pBackBuffer->Release();
}
Я знаю, что существует библиотека DirectXTK, но я застрял на VS2013 и Похоже, что DirectXTK не поддерживает его, если я правильно прочитал его файл readme.
РЕДАКТИРОВАТЬ
DirectXTK/DirectXTex работал безупречно.
Подробнее здесь: https://stackoverflow.com/questions/508 ... directx-11
Мобильная версия