mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-25 00:58:30 -05:00
Create capture surface only on request.
This commit is contained in:
parent
d5f7f243d5
commit
58a1d91ea3
1 changed files with 50 additions and 44 deletions
|
@ -772,34 +772,37 @@ namespace bgfx
|
||||||
|
|
||||||
void capturePostReset()
|
void capturePostReset()
|
||||||
{
|
{
|
||||||
ID3D11Texture2D* backBuffer;
|
if (m_flags&BGFX_RESET_CAPTURE)
|
||||||
DX_CHECK(m_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&backBuffer) );
|
|
||||||
|
|
||||||
D3D11_TEXTURE2D_DESC backBufferDesc;
|
|
||||||
backBuffer->GetDesc(&backBufferDesc);
|
|
||||||
|
|
||||||
D3D11_TEXTURE2D_DESC desc;
|
|
||||||
memcpy(&desc, &backBufferDesc, sizeof(desc) );
|
|
||||||
desc.SampleDesc.Count = 1;
|
|
||||||
desc.SampleDesc.Quality = 0;
|
|
||||||
desc.Usage = D3D11_USAGE_STAGING;
|
|
||||||
desc.BindFlags = 0;
|
|
||||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
|
|
||||||
|
|
||||||
HRESULT hr = m_device->CreateTexture2D(&desc, NULL, &m_captureTexture);
|
|
||||||
if (SUCCEEDED(hr) )
|
|
||||||
{
|
{
|
||||||
if (backBufferDesc.SampleDesc.Count != 1)
|
ID3D11Texture2D* backBuffer;
|
||||||
|
DX_CHECK(m_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&backBuffer) );
|
||||||
|
|
||||||
|
D3D11_TEXTURE2D_DESC backBufferDesc;
|
||||||
|
backBuffer->GetDesc(&backBufferDesc);
|
||||||
|
|
||||||
|
D3D11_TEXTURE2D_DESC desc;
|
||||||
|
memcpy(&desc, &backBufferDesc, sizeof(desc) );
|
||||||
|
desc.SampleDesc.Count = 1;
|
||||||
|
desc.SampleDesc.Quality = 0;
|
||||||
|
desc.Usage = D3D11_USAGE_STAGING;
|
||||||
|
desc.BindFlags = 0;
|
||||||
|
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
|
||||||
|
|
||||||
|
HRESULT hr = m_device->CreateTexture2D(&desc, NULL, &m_captureTexture);
|
||||||
|
if (SUCCEEDED(hr) )
|
||||||
{
|
{
|
||||||
desc.Usage = D3D11_USAGE_DEFAULT;
|
if (backBufferDesc.SampleDesc.Count != 1)
|
||||||
desc.CPUAccessFlags = 0;
|
{
|
||||||
m_device->CreateTexture2D(&desc, NULL, &m_captureResolve);
|
desc.Usage = D3D11_USAGE_DEFAULT;
|
||||||
|
desc.CPUAccessFlags = 0;
|
||||||
|
m_device->CreateTexture2D(&desc, NULL, &m_captureResolve);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_callback->captureBegin(backBufferDesc.Width, backBufferDesc.Height, backBufferDesc.Width*4, TextureFormat::BGRA8, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_callback->captureBegin(backBufferDesc.Width, backBufferDesc.Height, backBufferDesc.Width*4, TextureFormat::BGRA8, false);
|
DX_RELEASE(backBuffer, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
DX_RELEASE(backBuffer, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void capturePreReset()
|
void capturePreReset()
|
||||||
|
@ -815,29 +818,32 @@ namespace bgfx
|
||||||
|
|
||||||
void capture()
|
void capture()
|
||||||
{
|
{
|
||||||
ID3D11Texture2D* backBuffer;
|
if (NULL != m_captureTexture)
|
||||||
DX_CHECK(m_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&backBuffer) );
|
|
||||||
|
|
||||||
DXGI_MODE_DESC& desc = m_scd.BufferDesc;
|
|
||||||
|
|
||||||
if (NULL == m_captureResolve)
|
|
||||||
{
|
{
|
||||||
m_deviceCtx->CopyResource(m_captureTexture, backBuffer);
|
ID3D11Texture2D* backBuffer;
|
||||||
|
DX_CHECK(m_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&backBuffer) );
|
||||||
|
|
||||||
|
DXGI_MODE_DESC& desc = m_scd.BufferDesc;
|
||||||
|
|
||||||
|
if (NULL == m_captureResolve)
|
||||||
|
{
|
||||||
|
m_deviceCtx->CopyResource(m_captureTexture, backBuffer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_deviceCtx->ResolveSubresource(m_captureResolve, 0, backBuffer, 0, desc.Format);
|
||||||
|
m_deviceCtx->CopyResource(m_captureTexture, m_captureResolve);
|
||||||
|
}
|
||||||
|
|
||||||
|
D3D11_MAPPED_SUBRESOURCE mapped;
|
||||||
|
DX_CHECK(m_deviceCtx->Map(m_captureTexture, 0, D3D11_MAP_READ, 0, &mapped) );
|
||||||
|
|
||||||
|
g_callback->captureFrame(mapped.pData, desc.Height*mapped.RowPitch);
|
||||||
|
|
||||||
|
m_deviceCtx->Unmap(m_captureTexture, 0);
|
||||||
|
|
||||||
|
DX_RELEASE(backBuffer, 0);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_deviceCtx->ResolveSubresource(m_captureResolve, 0, backBuffer, 0, desc.Format);
|
|
||||||
m_deviceCtx->CopyResource(m_captureTexture, m_captureResolve);
|
|
||||||
}
|
|
||||||
|
|
||||||
D3D11_MAPPED_SUBRESOURCE mapped;
|
|
||||||
DX_CHECK(m_deviceCtx->Map(m_captureTexture, 0, D3D11_MAP_READ, 0, &mapped) );
|
|
||||||
|
|
||||||
g_callback->captureFrame(mapped.pData, desc.Height*mapped.RowPitch);
|
|
||||||
|
|
||||||
m_deviceCtx->Unmap(m_captureTexture, 0);
|
|
||||||
|
|
||||||
DX_RELEASE(backBuffer, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveScreenShot(Memory* _mem)
|
void saveScreenShot(Memory* _mem)
|
||||||
|
|
Loading…
Reference in a new issue