From 9d8bc790258f1b31770c71e6704375a0c4d48b4d Mon Sep 17 00:00:00 2001 From: omar Date: Thu, 5 Apr 2018 11:06:00 +0200 Subject: [PATCH] Viewport: Renamed RenderPlatformWindows() to RenderPlatformWindowsDefault(), tweaked examples and emphasis optional Viewport code path. (#1542) --- examples/directx10_example/main.cpp | 9 ++++++--- examples/directx11_example/main.cpp | 9 ++++++--- examples/directx12_example/main.cpp | 9 ++++++--- examples/opengl2_example/main.cpp | 9 ++++++--- examples/opengl3_example/main.cpp | 9 ++++++--- examples/sdl_opengl3_example/main.cpp | 9 ++++++--- examples/sdl_vulkan_example/main.cpp | 9 ++++++--- examples/vulkan_example/main.cpp | 9 ++++++--- imgui.cpp | 2 +- imgui.h | 6 +++--- 10 files changed, 52 insertions(+), 28 deletions(-) diff --git a/examples/directx10_example/main.cpp b/examples/directx10_example/main.cpp index 205b697d..94864eda 100644 --- a/examples/directx10_example/main.cpp +++ b/examples/directx10_example/main.cpp @@ -208,9 +208,12 @@ int main(int, char**) ImGui::Render(); ImGui_ImplDX10_RenderDrawData(ImGui::GetDrawData()); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } g_pSwapChain->Present(1, 0); // Present with vsync //g_pSwapChain->Present(0, 0); // Present without vsync diff --git a/examples/directx11_example/main.cpp b/examples/directx11_example/main.cpp index 759fbe7a..8f7df9d8 100644 --- a/examples/directx11_example/main.cpp +++ b/examples/directx11_example/main.cpp @@ -226,9 +226,12 @@ int main(int, char**) ImGui::Render(); ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } g_pSwapChain->Present(1, 0); // Present with vsync //g_pSwapChain->Present(0, 0); // Present without vsync diff --git a/examples/directx12_example/main.cpp b/examples/directx12_example/main.cpp index 57bd1bbc..2597e5f3 100644 --- a/examples/directx12_example/main.cpp +++ b/examples/directx12_example/main.cpp @@ -401,9 +401,12 @@ int main(int, char**) g_pd3dCommandQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*)&g_pd3dCommandList); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } g_pSwapChain->Present(1, 0); // Present with vsync //g_pSwapChain->Present(0, 0); // Present without vsync diff --git a/examples/opengl2_example/main.cpp b/examples/opengl2_example/main.cpp index 6e3bc988..d22d593f 100644 --- a/examples/opengl2_example/main.cpp +++ b/examples/opengl2_example/main.cpp @@ -117,9 +117,12 @@ int main(int, char**) //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound, but prefer using the GL3+ code. ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData()); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } glfwMakeContextCurrent(window); glfwSwapBuffers(window); diff --git a/examples/opengl3_example/main.cpp b/examples/opengl3_example/main.cpp index 96151389..527a4f14 100644 --- a/examples/opengl3_example/main.cpp +++ b/examples/opengl3_example/main.cpp @@ -124,9 +124,12 @@ int main(int, char**) glClear(GL_COLOR_BUFFER_BIT); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } glfwMakeContextCurrent(window); glfwSwapBuffers(window); diff --git a/examples/sdl_opengl3_example/main.cpp b/examples/sdl_opengl3_example/main.cpp index c8781630..366bc222 100644 --- a/examples/sdl_opengl3_example/main.cpp +++ b/examples/sdl_opengl3_example/main.cpp @@ -132,9 +132,12 @@ int main(int, char**) glClear(GL_COLOR_BUFFER_BIT); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } SDL_GL_MakeCurrent(window, gl_context); SDL_GL_SwapWindow(window); diff --git a/examples/sdl_vulkan_example/main.cpp b/examples/sdl_vulkan_example/main.cpp index dcad5343..53de0fbb 100644 --- a/examples/sdl_vulkan_example/main.cpp +++ b/examples/sdl_vulkan_example/main.cpp @@ -469,9 +469,12 @@ int main(int, char**) memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float)); FrameRender(wd); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } FramePresent(wd); } diff --git a/examples/vulkan_example/main.cpp b/examples/vulkan_example/main.cpp index 57697135..6400a2ab 100644 --- a/examples/vulkan_example/main.cpp +++ b/examples/vulkan_example/main.cpp @@ -479,9 +479,12 @@ int main(int, char**) memcpy(&wd->ClearValue.color.float32[0], &clear_color, 4 * sizeof(float)); FrameRender(wd); - // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindows(NULL, NULL); + // Update and Render additional Platform Windows + if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) + { + ImGui::UpdatePlatformWindows(); + ImGui::RenderPlatformWindowsDefault(); + } FramePresent(wd); } diff --git a/imgui.cpp b/imgui.cpp index 024066fc..9459a39b 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -3602,7 +3602,7 @@ void ImGui::UpdatePlatformWindows() // MySwapBufferFunction(data->Viewports[i], my_args); // // Note how we intentionally skip the main viewport (index 0) which is generally rendered as part of our main application. -void ImGui::RenderPlatformWindows(void* platform_render_arg, void* renderer_render_arg) +void ImGui::RenderPlatformWindowsDefault(void* platform_render_arg, void* renderer_render_arg) { if (!(ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_EnableViewports)) return; diff --git a/imgui.h b/imgui.h index eb324f55..beae3f39 100644 --- a/imgui.h +++ b/imgui.h @@ -551,7 +551,7 @@ namespace ImGui IMGUI_API ImGuiPlatformData* GetPlatformData(); // List of viewports. Viewport 0 is always the main viewport, followed by the secondary viewports. IMGUI_API ImGuiViewport* GetMainViewport(); // GetPlatformData()->MainViewport IMGUI_API void UpdatePlatformWindows(); // Call in main loop. Create/Destroy/Resize platform windows so there's one for each viewport - IMGUI_API void RenderPlatformWindows(void* platform_render_arg, void* renderer_render_arg); // Call in main loop. Call RenderWindow/SwapBuffers from the ImGuiPlatformIO structure. May be reimplemented by user. + IMGUI_API void RenderPlatformWindowsDefault(void* platform_render_arg = NULL, void* renderer_render_arg = NULL); // Call in main loop. Call RenderWindow/SwapBuffers from the ImGuiPlatformIO structure. May be reimplemented by user. IMGUI_API void DestroyPlatformWindows(); // (Optional) Call in back-end shutdown if you need to close Platform Windows before imgui shutdown. IMGUI_API ImGuiViewport* FindViewportByPlatformHandle(void* platform_handle); @@ -1878,8 +1878,8 @@ struct ImFont // This is designed so we can mix and match two imgui_impl_xxxx files, one for the Platform (~ Windowing), one for Renderer. // Custom engine back-ends will often provide both Platform and Renderer interfaces and thus may not need to use all functions. // Platform functions are typically called before their Renderer counterpart, apart from Destroy which are called the other way. -// RenderPlatformWindows() basically iterate secondary viewports and call Platform+Renderer's RenderWindow then Platform+Renderer's SwapBuffers, -// You may skip using RenderPlatformWindows() and call your functions yourself if you need specific behavior for your multi-window rendering. +// RenderPlatformWindowsDefault() basically iterate secondary viewports and call Platform+Renderer's RenderWindow then Platform+Renderer's SwapBuffers, +// You may skip using RenderPlatformWindowsDefault() and call your draw/swap functions yourself if you need specific behavior for your multi-window rendering. struct ImGuiPlatformIO { // Platform (e.g. Win32, GLFW, SDL2)