0
当调用IDXGISwapChain::ResizeBuffer()
时,调用失败并从HRESULT 0x887a0001
返回此错误,否则返回DXGI_ERROR_INVALID_CALL
。IDXGISwapChain :: ResizeBuffers()0x887a0001 DXGI_ERROR_INVALID_CALL
在此通话之前会发生什么,我拨打ID3D11DeviceContext::ClearState()
并发布ID3D11RenderTargetView
和ID3D11DepthStencilView
。
上面的视图是绑定到IDXGISwapChain
的唯一视图。
我会后下面的代码展示给大家,如果有人可以帮我解决这个问题,将不胜感激:
void SRNTY_API Direct3D11::D3D11ResizeBuffers(void)
{
mResizing = true;
RECT rect;
GetWindowRect(mhWnd, &rect);
mRenderTargetWidth = rect.right - rect.left;
mRenderTargetHeight = rect.bottom - rect.top;
if (gDXGI.GetSwapChain() != NULL)
{
assert(mD3D11DeviceContext);
assert(mD3D11Device);
assert(gDXGI.GetSwapChain());
if (mD3D11DeviceContext)
mD3D11DeviceContext->ClearState();
if (mD3D11RenderTargetView)
if (FAILED(result = mD3D11RenderTargetView->Release()))
{
SRNTY::gErrorHandler->AddError(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR21_D3D11ResizeBuffers),
SRNTY::ErrorHandler::ErrorHeaderSelect::EHS_ERROR);
}
if (mD3D11DepthStencilView)
if (FAILED(result = mD3D11DepthStencilView->Release()))
{
SRNTY::gErrorHandler->AddError(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR22_D3D11ResizeBuffers),
SRNTY::ErrorHandler::ErrorHeaderSelect::EHS_ERROR);
}
if (FAILED(result = gDXGI.GetSwapChain()->ResizeBuffers(1, mRenderTargetWidth, mRenderTargetHeight,
DXGI_FORMAT_R8G8B8A8_UNORM, 0))) // the offending line
{
SRNTY::gErrorHandler->AddError(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR23_D3D11ResizeBuffers),
SRNTY::ErrorHandler::ErrorHeaderSelect::EHS_ERROR);
}
if (FAILED(result = gDXGI.GetSwapChain()->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mD3D11RenderTargetView)))
{
SRNTY::gErrorHandler->AddError(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR24_D3D11ResizeBuffers),
SRNTY::ErrorHandler::ErrorHeaderSelect::EHS_ERROR);
}
if (FAILED(result = gDXGI.GetSwapChain()->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mD3D11DepthStencilView)))
{
SRNTY::gErrorHandler->AddError(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR25_D3D11ResizeBuffers),
SRNTY::ErrorHandler::ErrorHeaderSelect::EHS_ERROR);
}
D3D11_VIEWPORT viewport;
ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT));
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
viewport.Width = mRenderTargetWidth;
viewport.Height = mRenderTargetHeight;
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
if ((mD3D11DeviceContext != NULL) && (mD3D11RenderTargetView != NULL) && (mD3D11DepthStencilView != NULL))
{
mD3D11DeviceContext->OMSetRenderTargets(1, &mD3D11RenderTargetView, mD3D11DepthStencilView);
mD3D11DeviceContext->RSSetViewports(1, &viewport);
mResizing = false;
return;
}
else
{
SRNTY::gErrorHandler->AddError(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR26_D3D11ResizeBuffers),
SRNTY::ErrorHandler::ErrorHeaderSelect::EHS_ERROR);
SRNTY::gErrorHandler->EmergencyShutDown();
ERROR(gErrors->ERRORCODE(_ERROR::ERRORCODES::ERR26_D3D11ResizeBuffers).c_str());
return;
}
}
}
请帮帮忙,如果有一些方法可以让我看到了什么是绑定在通话时使用调试器交换链,这将是伟大的。
感谢,希望帮助:)
非常感谢您的回复。我试过你提到的解决方案,但是这对程序没有影响,并且仍然返回相同的HRESULT 0x887a0001。 –