- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
调用IDXGISwapChain::ResizeBuffer()
时调用失败并从 HRESULT 0x887a0001
返回此错误也称为 DXGI_ERROR_INVALID_CALL
.
在此调用之前发生的事情是,我调用 ID3D11DeviceContext::ClearState()
并释放 ID3D11RenderTargetView
和 ID3D11DepthStencilView
.
以上 View 是绑定(bind)到IDXGISwapChain
的唯一 View .
我将发布下面的代码给大家看,如果有人能帮助我进一步解决这个问题,我将不胜感激:
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;
}
}
}
请帮忙,如果有什么方法可以在调用时使用调试器查看绑定(bind)到交换链的内容,那会很棒。
谢谢,希望得到帮助:)
最佳答案
ResizeBuffers
方法的第一个参数不能是 1
如果您使用的是前缓冲区和后缓冲区。将值更改为 2
,或指定 0
以保持原始值。
关于c++ - IDXGISwapChain::ResizeBuffers() 0x887a0001 DXGI_ERROR_INVALID_CALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35684575/
调用IDXGISwapChain::ResizeBuffer()时调用失败并从 HRESULT 0x887a0001 返回此错误也称为 DXGI_ERROR_INVALID_CALL . 在此调用之前
每次我尝试创建 swapChain 时它都会抛出这个错误。经过几个小时为此寻找修复程序后,我发现没有任何对我有用的东西。这是代码的重要部分: bool Direct3D::Initialize(HWN
我正在尝试使用 Dear IMGUI 为 DirectX 12 游戏制作一个简单的帧计数器。我只是想覆盖一个小的透明窗口,在游戏过程中显示帧的顺序。为此,我 Hook Present(),所以我可以得
我正在尝试使用 D3D11 为硬件加速的 h264 解码和渲染设置正确的上下文 - 但一开始就在 CreateSwapChainForHwnd() 调用中失败。 这些是我正在使用的接口(interfa
我正在 DirectX11 中创建一个设备和交换链,然后尝试获取后台缓冲区的纹理。创建步骤似乎有效,但无论我做什么,GetBuffer 调用总是失败并出现错误 DXGI_ERROR_INVALID_C
我是一名优秀的程序员,十分优秀!