'ImGui, GLFW: ImGui Window is not showing up when it's over GLFW Window
I set up glfw, then I added ImGui. Both of them are working, but when I try to put an ImGui Window over a GLFW Window, the ImGui window disappear. I tried to create a Dockspace and the result was the same. I never encountered something like this
My project is big so I left here only the part where is ImGui initialized and the main loop.
Any idea?
void App::Run()
{
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
//io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
//io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows
//io.ConfigViewportsNoAutoMerge = true;
//io.ConfigViewportsNoTaskBarIcon = true;
// Setup Platform/Renderer backends
ImGui_ImplGlfw_InitForOpenGL((GLFWwindow*)(m_Window->Get()), true);
ImGui_ImplOpenGL3_Init();
// Setup Dear ImGui style
ImGui::StyleColorsDark();
//ImGui::StyleColorsClassic();
// When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones.
ImGuiStyle& style = ImGui::GetStyle();
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
{
style.WindowRounding = 0.0f;
style.Colors[ImGuiCol_WindowBg].w = 1.0f;
}
while (m_Running)
{
for (auto layer : m_LayerStack)
layer->OnUpdate();
while (!m_EventQueue.empty())
{
for (auto layer : m_LayerStack)
layer->OnEvent(*m_EventQueue.front());
CORE_PRINT(m_EventQueue.front()->ToString());
delete m_EventQueue.front();
m_EventQueue.pop();
}
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
ImGui::SetNextWindowPos(ImVec2(m_Window->GetPosX(), m_Window->GetPosY()));
ImGui::SetNextWindowSize(ImVec2(m_Window->GetWidth(), m_Window->GetHeight()));
ImGui::Begin("DockSpace", NULL,
ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoResize |
ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoScrollbar |
ImGuiWindowFlags_NoScrollWithMouse
);
// Declare Central dockspace
auto dockspaceID = ImGui::GetID("HUB_DockSpace");
ImGui::DockSpace(dockspaceID, ImVec2(0.0f, 0.0f), ImGuiDockNodeFlags_None | ImGuiDockNodeFlags_PassthruCentralNode/*|ImGuiDockNodeFlags_NoResize*/);
ImGui::End();
ImGui::ShowDemoWindow();
ImGui::Begin("Example");
ImGui::Button("Text");
ImGui::Text("Text");
ImGui::End();
ImGuiIO& io = ImGui::GetIO();
io.DisplaySize = ImVec2(m_Window->GetWidth(), m_Window->GetHeight());
// Render dear imgui into screen
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
{
GLFWwindow* backup_current_context = glfwGetCurrentContext();
ImGui::UpdatePlatformWindows();
ImGui::RenderPlatformWindowsDefault();
glfwMakeContextCurrent(backup_current_context);
}
m_Window->Update();
}
// Cleanup
ImGui_ImplOpenGL3_Shutdown();
ImGui_ImplGlfw_Shutdown();
ImGui::DestroyContext();
}
'''
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
