-
-
[求助] HOOK DX11 Present 之后调用 ResizeBuffers 报错0x887A0001
-
发表于: 2025-9-5 16:25 561
-
c⌒っ゚Д゚)っ 我注入的是IMGUI的官方demo程序 “example_win32_directx11.exe” 当中,代码也是按照官方demo的更改尺寸写的,但是ResizeBuffers就是不成功
static void CleanupRenderTarget() {
client.render.pD3dDeviceContext->ClearState();
client.render.pD3dDeviceContext->Flush();
if (client.render.pRenderTargetView)
{
client.render.pRenderTargetView->Release();
client.render.pRenderTargetView = nullptr;
}
::Sleep(100);
}
static void CreateRenderTarget() {
ID3D11Texture2D* pBackBuffer = nullptr;
HRESULT hr = client.render.pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer);
if (SUCCEEDED(hr))
{
client.render.pD3dDevice->CreateRenderTargetView(
pBackBuffer,
0,
&client.render.pRenderTargetView);
pBackBuffer->Release();
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/*
* @brief Present钩子函数
*/
static HRESULT __stdcall mPresent(IDXGISwapChain* pSwapChain, UINT SyncInterval, UINT Flags) {
// 第一次调用时初始化ImGui
if (!client.render.bInitialized)
{
client.render.pSwapChain = pSwapChain;
Init();
}
// 不在WM_SIZE消息中处理窗口大小改变,而是在这里处理
if (client.render.ResizeWidth != 0 && client.render.ResizeHeight != 0)
{
CleanupRenderTarget();
HRESULT hr = pSwapChain->ResizeBuffers(
0,
0,
0,
DXGI_FORMAT_UNKNOWN,
0
);
if (!SUCCEEDED(hr))
{
method::PrintToConsole(L"ResizeBuffers失败 hr=0x%08X [%08X] [%08X]", hr, pSwapChain, client.render.pSwapChain);
}
client.render.ResizeWidth = client.render.ResizeHeight = 0;
CreateRenderTarget();
}
// 返回原始的Present函数
return((Present)client.render.oPresent)(pSwapChain, SyncInterval, Flags);
}