Backends: DX10, DX11, DX12: fixed a crash rendering multi-viewports if a ClearRenderTargetView() or CreateSwapChain() call failed. (#9546)
Likely to be incomplete for DX12.
This commit is contained in:
parent
d7950e2c42
commit
545d1a884a
@ -768,10 +768,12 @@ static void ImGui_ImplDX10_SetWindowSize(ImGuiViewport* viewport, ImVec2 size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ImGui_ImplDX10_RenderViewport(ImGuiViewport* viewport, void*)
|
static void ImGui_ImplDX10_RenderWindow(ImGuiViewport* viewport, void*)
|
||||||
{
|
{
|
||||||
ImGui_ImplDX10_Data* bd = ImGui_ImplDX10_GetBackendData();
|
ImGui_ImplDX10_Data* bd = ImGui_ImplDX10_GetBackendData();
|
||||||
ImGui_ImplDX10_ViewportData* vd = (ImGui_ImplDX10_ViewportData*)viewport->RendererUserData;
|
ImGui_ImplDX10_ViewportData* vd = (ImGui_ImplDX10_ViewportData*)viewport->RendererUserData;
|
||||||
|
if (vd->RTView == nullptr) // Swap chain creation or resize failed (e.g. device removed)
|
||||||
|
return;
|
||||||
ImVec4 clear_color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
ImVec4 clear_color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
bd->pd3dDevice->OMSetRenderTargets(1, &vd->RTView, nullptr);
|
bd->pd3dDevice->OMSetRenderTargets(1, &vd->RTView, nullptr);
|
||||||
if (!(viewport->Flags & ImGuiViewportFlags_NoRendererClear))
|
if (!(viewport->Flags & ImGuiViewportFlags_NoRendererClear))
|
||||||
@ -792,7 +794,7 @@ void ImGui_ImplDX10_InitMultiViewportSupport()
|
|||||||
platform_io.Renderer_CreateWindow = ImGui_ImplDX10_CreateWindow;
|
platform_io.Renderer_CreateWindow = ImGui_ImplDX10_CreateWindow;
|
||||||
platform_io.Renderer_DestroyWindow = ImGui_ImplDX10_DestroyWindow;
|
platform_io.Renderer_DestroyWindow = ImGui_ImplDX10_DestroyWindow;
|
||||||
platform_io.Renderer_SetWindowSize = ImGui_ImplDX10_SetWindowSize;
|
platform_io.Renderer_SetWindowSize = ImGui_ImplDX10_SetWindowSize;
|
||||||
platform_io.Renderer_RenderWindow = ImGui_ImplDX10_RenderViewport;
|
platform_io.Renderer_RenderWindow = ImGui_ImplDX10_RenderWindow;
|
||||||
platform_io.Renderer_SwapBuffers = ImGui_ImplDX10_SwapBuffers;
|
platform_io.Renderer_SwapBuffers = ImGui_ImplDX10_SwapBuffers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -802,6 +802,8 @@ static void ImGui_ImplDX11_RenderWindow(ImGuiViewport* viewport, void*)
|
|||||||
{
|
{
|
||||||
ImGui_ImplDX11_Data* bd = ImGui_ImplDX11_GetBackendData();
|
ImGui_ImplDX11_Data* bd = ImGui_ImplDX11_GetBackendData();
|
||||||
ImGui_ImplDX11_ViewportData* vd = (ImGui_ImplDX11_ViewportData*)viewport->RendererUserData;
|
ImGui_ImplDX11_ViewportData* vd = (ImGui_ImplDX11_ViewportData*)viewport->RendererUserData;
|
||||||
|
if (vd->RTView == nullptr) // Swap chain creation or resize failed (e.g. device removed)
|
||||||
|
return;
|
||||||
ImVec4 clear_color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
ImVec4 clear_color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
bd->pd3dDeviceContext->OMSetRenderTargets(1, &vd->RTView, nullptr);
|
bd->pd3dDeviceContext->OMSetRenderTargets(1, &vd->RTView, nullptr);
|
||||||
if (!(viewport->Flags & ImGuiViewportFlags_NoRendererClear))
|
if (!(viewport->Flags & ImGuiViewportFlags_NoRendererClear))
|
||||||
|
|||||||
@ -1256,6 +1256,8 @@ static void ImGui_ImplDX12_RenderWindow(ImGuiViewport* viewport, void*)
|
|||||||
{
|
{
|
||||||
ImGui_ImplDX12_Data* bd = ImGui_ImplDX12_GetBackendData();
|
ImGui_ImplDX12_Data* bd = ImGui_ImplDX12_GetBackendData();
|
||||||
ImGui_ImplDX12_ViewportData* vd = (ImGui_ImplDX12_ViewportData*)viewport->RendererUserData;
|
ImGui_ImplDX12_ViewportData* vd = (ImGui_ImplDX12_ViewportData*)viewport->RendererUserData;
|
||||||
|
if (vd->SwapChain == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
ImGui_ImplDX12_FrameContext* frame_context = ImGui_WaitForNextFrameContext(vd);
|
ImGui_ImplDX12_FrameContext* frame_context = ImGui_WaitForNextFrameContext(vd);
|
||||||
UINT back_buffer_idx = vd->SwapChain->GetCurrentBackBufferIndex();
|
UINT back_buffer_idx = vd->SwapChain->GetCurrentBackBufferIndex();
|
||||||
|
|||||||
@ -114,6 +114,8 @@ Other Changes:
|
|||||||
Docking+Viewports Branch:
|
Docking+Viewports Branch:
|
||||||
|
|
||||||
- Backends:
|
- Backends:
|
||||||
|
- DX10, DX11, DX12: fixed crash when CreateSwapChain() or CreateRenderTargetView()
|
||||||
|
calls are failing. (#9546)
|
||||||
- GLFW: fixed applying mouse cursor shapes to secondary viewports, broken in 1.92.6
|
- GLFW: fixed applying mouse cursor shapes to secondary viewports, broken in 1.92.6
|
||||||
when introducing a cache. (#9545) [@JamesWrigley]
|
when introducing a cache. (#9545) [@JamesWrigley]
|
||||||
- Metal: fixed resizing windows losing framebuffer scale. (#6828, #8856) [@laikoken]
|
- Metal: fixed resizing windows losing framebuffer scale. (#6828, #8856) [@laikoken]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user