浏览代码

Viewports: DestroyContext() does not call DestroyPlatformWindows() anymore. (#7175, #8945)

ocornut 3 天之前
父节点
当前提交
16b2d20115
共有 2 个文件被更改,包括 8 次插入3 次删除
  1. 3 0
      docs/CHANGELOG.txt
  2. 5 3
      imgui.cpp

+ 3 - 0
docs/CHANGELOG.txt

@@ -48,6 +48,9 @@ Docking+Viewports Branch:
 - Nav: fixed a crash that could occur when opening a popup following the processing
   of a global shortcut while no windows were focused (the fix done in 1.92.3 was
   incomplete for docking branch).
+- Viewports: DestroyContext() does not call DestroyPlatformWindows() anymore at
+  it assumed to be unnecessary as backensd should have done it and we check that
+  backends have been shutdown since 1.90.4. Changed into asserts. (#7175, #8945)
 
 
 -----------------------------------------------------------------------

+ 5 - 3
imgui.cpp

@@ -4415,6 +4415,11 @@ void ImGui::Shutdown()
     ImGuiContext& g = *GImGui;
     IM_ASSERT_USER_ERROR(g.IO.BackendPlatformUserData == NULL, "Forgot to shutdown Platform backend?");
     IM_ASSERT_USER_ERROR(g.IO.BackendRendererUserData == NULL, "Forgot to shutdown Renderer backend?");
+    for (ImGuiViewportP* viewport : g.Viewports)
+    {
+        IM_UNUSED(viewport);
+        IM_ASSERT_USER_ERROR(viewport->RendererUserData == NULL && viewport->PlatformUserData == NULL && viewport->PlatformHandle == NULL, "Backend or app forgot to call DestroyPlatformWindows()?");
+    }
 
     // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame)
     for (ImFontAtlas* atlas : g.FontAtlases)
@@ -4436,9 +4441,6 @@ void ImGui::Shutdown()
     if (g.SettingsLoaded && g.IO.IniFilename != NULL)
         SaveIniSettingsToDisk(g.IO.IniFilename);
 
-    // Destroy platform windows
-    DestroyPlatformWindows();
-
     // Shutdown extensions
     DockContextShutdown(&g);