ocornut / imgui

Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies
MIT License
61.08k stars 10.29k forks source link

Assert when shutting down and recreating backend #2769

Closed metarutaiga closed 5 years ago

metarutaiga commented 5 years ago

Version/Branch of Dear ImGui:

Version: 1.73 Branch: viewport

Back-end/Renderer/Compiler/OS

Back-ends: imgui_impl_win32.cpp Compiler: msvc_v142 Operating System: win10

My Issue/Question:

I implement a graphic library that it can change APIs in runtime. But it always assert when recreating imgui. I modified it below, but it's not a good method. Has any good idea to resolve this assert?

Standalone, minimal, complete and verifiable example: -- ImGuiViewport main_viewport = ImGui::GetMainViewport(); ++ ImGuiViewportP main_viewport = (ImGuiViewportP*)ImGui::GetMainViewport(); ++ main_viewport->PlatformWindowCreated = true;

ocornut commented 5 years ago

Please:

TL;DR; we need more context please.

metarutaiga commented 5 years ago

My recreating method : ImGui_ImplXX_Shutdown(); ImGui_ImplWin32_Shutdown(); ImGui_ImplWin32_Init(hWnd); ImGui_ImplXX_Init(g_instance, 0, g_device);

I don't run ImGui::DestroyContext(); / ImGui::CreateContext(); And the PlatformWindowCreated of main-viewport is initialized in ImGui::CreateContext(); only. So it would be assert the problem.

x1 x2

kudaba commented 5 years ago

I think you're hitting the crash that I fixed here: https://github.com/ocornut/imgui/pull/2698, at least I think you're using the vulkan backend, you should include that in reports.

ocornut commented 5 years ago

Pushed a fix for this issue. Ideally we may want this field to be set/cleared by the platform back-end. We'll probably refactor this when working on #2471.