Backends: clear bits set in io.BackendFlags on backend Shutdown(). Clear BackendPlatformName. (#6334, #6335)

Amended with fix for missing clear for ImGuiBackendFlags_HasGamepad.
This commit is contained in:
Gereon V 2023-04-17 14:47:15 +02:00 committed by ocornut
parent f304603e13
commit 055e71518e
18 changed files with 34 additions and 1 deletions

View File

@ -462,8 +462,9 @@ void ImGui_ImplAllegro5_Shutdown()
if (bd->ClipboardTextData) if (bd->ClipboardTextData)
al_free(bd->ClipboardTextData); al_free(bd->ClipboardTextData);
io.BackendPlatformUserData = nullptr;
io.BackendPlatformName = io.BackendRendererName = nullptr; io.BackendPlatformName = io.BackendRendererName = nullptr;
io.BackendPlatformUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_HasMouseCursors;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -269,6 +269,8 @@ bool ImGui_ImplAndroid_Init(ANativeWindow* window)
void ImGui_ImplAndroid_Shutdown() void ImGui_ImplAndroid_Shutdown()
{ {
ImGuiIO& io = ImGui::GetIO();
io.BackendPlatformName = nullptr;
} }
void ImGui_ImplAndroid_NewFrame() void ImGui_ImplAndroid_NewFrame()

View File

@ -567,6 +567,7 @@ void ImGui_ImplDX10_Shutdown()
if (bd->pd3dDevice) { bd->pd3dDevice->Release(); } if (bd->pd3dDevice) { bd->pd3dDevice->Release(); }
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -583,6 +583,7 @@ void ImGui_ImplDX11_Shutdown()
if (bd->pd3dDeviceContext) { bd->pd3dDeviceContext->Release(); } if (bd->pd3dDeviceContext) { bd->pd3dDeviceContext->Release(); }
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -739,6 +739,7 @@ void ImGui_ImplDX12_Shutdown()
delete[] bd->pFrameResources; delete[] bd->pFrameResources;
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -304,6 +304,7 @@ void ImGui_ImplDX9_Shutdown()
if (bd->pd3dDevice) { bd->pd3dDevice->Release(); } if (bd->pd3dDevice) { bd->pd3dDevice->Release(); }
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -643,6 +643,7 @@ void ImGui_ImplGlfw_Shutdown()
io.BackendPlatformName = nullptr; io.BackendPlatformName = nullptr;
io.BackendPlatformUserData = nullptr; io.BackendPlatformUserData = nullptr;
io.BackendFlags &= ~(ImGuiBackendFlags_HasMouseCursors | ImGuiBackendFlags_HasSetMousePos | ImGuiBackendFlags_HasGamepad);
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -191,6 +191,8 @@ void ImGui_ImplGLUT_InstallFuncs()
void ImGui_ImplGLUT_Shutdown() void ImGui_ImplGLUT_Shutdown()
{ {
ImGuiIO& io = ImGui::GetIO();
io.BackendPlatformName = nullptr;
} }
void ImGui_ImplGLUT_NewFrame() void ImGui_ImplGLUT_NewFrame()

View File

@ -135,6 +135,12 @@ bool ImGui_ImplMetal_Init(id<MTLDevice> device)
void ImGui_ImplMetal_Shutdown() void ImGui_ImplMetal_Shutdown()
{ {
ImGui_ImplMetal_Data* bd = ImGui_ImplMetal_GetBackendData();
IM_ASSERT(bd != nullptr && "No renderer backend to shutdown, or already shutdown?");
ImGuiIO& io = ImGui::GetIO();
io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
ImGui_ImplMetal_DestroyDeviceObjects(); ImGui_ImplMetal_DestroyDeviceObjects();
ImGui_ImplMetal_DestroyBackendData(); ImGui_ImplMetal_DestroyBackendData();
} }

View File

@ -355,6 +355,7 @@ void ImGui_ImplOpenGL3_Shutdown()
ImGui_ImplOpenGL3_DestroyDeviceObjects(); ImGui_ImplOpenGL3_DestroyDeviceObjects();
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -476,12 +476,19 @@ bool ImGui_ImplOSX_Init(NSView* view)
void ImGui_ImplOSX_Shutdown() void ImGui_ImplOSX_Shutdown()
{ {
ImGui_ImplOSX_Data* bd = ImGui_ImplOSX_GetBackendData(); ImGui_ImplOSX_Data* bd = ImGui_ImplOSX_GetBackendData();
IM_ASSERT(bd != nullptr && "No platform backend to shutdown, or already shutdown?");
ImGuiIO& io = ImGui::GetIO();
bd->Observer = nullptr; bd->Observer = nullptr;
if (bd->Monitor != nullptr) if (bd->Monitor != nullptr)
{ {
[NSEvent removeMonitor:bd->Monitor]; [NSEvent removeMonitor:bd->Monitor];
bd->Monitor = nullptr; bd->Monitor = nullptr;
} }
io.BackendPlatformName = nullptr;
io.BackendPlatformUserData = nullptr;
io.BackendFlags &= ~(ImGuiBackendFlags_HasMouseCursors | ImGuiBackendFlags_HasGamepad);
ImGui_ImplOSX_DestroyBackendData(); ImGui_ImplOSX_DestroyBackendData();
} }

View File

@ -491,6 +491,7 @@ void ImGui_ImplSDL2_Shutdown()
io.BackendPlatformName = nullptr; io.BackendPlatformName = nullptr;
io.BackendPlatformUserData = nullptr; io.BackendPlatformUserData = nullptr;
io.BackendFlags &= ~(ImGuiBackendFlags_HasMouseCursors | ImGuiBackendFlags_HasSetMousePos | ImGuiBackendFlags_HasGamepad);
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -425,6 +425,7 @@ void ImGui_ImplSDL3_Shutdown()
io.BackendPlatformName = nullptr; io.BackendPlatformName = nullptr;
io.BackendPlatformUserData = nullptr; io.BackendPlatformUserData = nullptr;
io.BackendFlags &= ~(ImGuiBackendFlags_HasMouseCursors | ImGuiBackendFlags_HasSetMousePos | ImGuiBackendFlags_HasGamepad);
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -86,6 +86,7 @@ void ImGui_ImplSDLRenderer_Shutdown()
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -1000,6 +1000,7 @@ void ImGui_ImplVulkan_Shutdown()
ImGui_ImplVulkan_DestroyDeviceObjects(); ImGui_ImplVulkan_DestroyDeviceObjects();
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -751,6 +751,7 @@ void ImGui_ImplWGPU_Shutdown()
io.BackendRendererName = nullptr; io.BackendRendererName = nullptr;
io.BackendRendererUserData = nullptr; io.BackendRendererUserData = nullptr;
io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset;
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -178,6 +178,7 @@ void ImGui_ImplWin32_Shutdown()
io.BackendPlatformName = nullptr; io.BackendPlatformName = nullptr;
io.BackendPlatformUserData = nullptr; io.BackendPlatformUserData = nullptr;
io.BackendFlags &= ~(ImGuiBackendFlags_HasMouseCursors | ImGuiBackendFlags_HasSetMousePos | ImGuiBackendFlags_HasGamepad);
IM_DELETE(bd); IM_DELETE(bd);
} }

View File

@ -42,6 +42,9 @@ Breaking changes:
Other changes: Other changes:
- Backends: Clear bits sets io.BackendFlags on backend Shutdown(). (#6334, #6335] [@GereonV]
Potentially this would facilitate switching runtime backend mid-session.
----------------------------------------------------------------------- -----------------------------------------------------------------------