mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Examples: OpenGL2: Added multi-viewport support in the OpenGL2 back-end. (#1542) + Metrics: Fix undisplayed flag.
This commit is contained in:
		| @@ -3,6 +3,7 @@ | |||||||
|  |  | ||||||
| // Implemented features: | // Implemented features: | ||||||
| //  [X] User texture binding. Use 'GLUint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. | //  [X] User texture binding. Use 'GLUint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. | ||||||
|  | //  [X] Multi-viewport rendering (when ImGuiConfigFlags_EnableViewports is enabled). | ||||||
|  |  | ||||||
| // **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** | // **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** | ||||||
| // **Prefer using the code in imgui_impl_opengl3.cpp** | // **Prefer using the code in imgui_impl_opengl3.cpp** | ||||||
| @@ -14,6 +15,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG  | // CHANGELOG  | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface. | ||||||
| //  2018-XX-XX: OpenGL: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications). | //  2018-XX-XX: OpenGL: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications). | ||||||
| //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplGlfwGL2_RenderDrawData() in the .h file so you can call it yourself. | //  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplGlfwGL2_RenderDrawData() in the .h file so you can call it yourself. | ||||||
| //  2017-09-01: OpenGL: Save and restore current polygon mode. | //  2017-09-01: OpenGL: Save and restore current polygon mode. | ||||||
| @@ -39,14 +41,24 @@ | |||||||
| // OpenGL Data | // OpenGL Data | ||||||
| static GLuint       g_FontTexture = 0; | static GLuint       g_FontTexture = 0; | ||||||
|  |  | ||||||
|  | // Forward Declarations | ||||||
|  | static void ImGui_ImplOpenGL2_InitPlatformInterface(); | ||||||
|  | static void ImGui_ImplOpenGL2_ShutdownPlatformInterface(); | ||||||
|  |  | ||||||
| // Functions | // Functions | ||||||
| bool    ImGui_ImplOpenGL2_Init() | bool    ImGui_ImplOpenGL2_Init() | ||||||
| { | { | ||||||
|  |     // Setup back-end capabilities flags | ||||||
|  |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |     io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports;    // We can create multi-viewports on the Renderer side (optional) | ||||||
|  |     if (io.ConfigFlags & ImGuiConfigFlags_EnableViewports) | ||||||
|  |         ImGui_ImplOpenGL2_InitPlatformInterface(); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| void    ImGui_ImplOpenGL2_Shutdown() | void    ImGui_ImplOpenGL2_Shutdown() | ||||||
| { | { | ||||||
|  |     ImGui_ImplOpenGL2_ShutdownPlatformInterface(); | ||||||
|     ImGui_ImplOpenGL2_DestroyDeviceObjects(); |     ImGui_ImplOpenGL2_DestroyDeviceObjects(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -197,3 +209,29 @@ void    ImGui_ImplOpenGL2_DestroyDeviceObjects() | |||||||
| { | { | ||||||
|     ImGui_ImplOpenGL2_DestroyFontsTexture(); |     ImGui_ImplOpenGL2_DestroyFontsTexture(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | //-------------------------------------------------------------------------------------------------------- | ||||||
|  | // Platform Interface (Optional, for multi-viewport support) | ||||||
|  | //-------------------------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
|  | static void ImGui_ImplOpenGL2_RenderWindow(ImGuiViewport* viewport, void*) | ||||||
|  | { | ||||||
|  |     if (!(viewport->Flags & ImGuiViewportFlags_NoRendererClear)) | ||||||
|  |     { | ||||||
|  |         ImVec4 clear_color = ImVec4(0.0f, 0.0f, 0.0f, 1.0f); | ||||||
|  |         glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); | ||||||
|  |         glClear(GL_COLOR_BUFFER_BIT); | ||||||
|  |     } | ||||||
|  |     ImGui_ImplOpenGL2_RenderDrawData(viewport->DrawData); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void ImGui_ImplOpenGL2_InitPlatformInterface() | ||||||
|  | { | ||||||
|  |     ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO(); | ||||||
|  |     platform_io.Renderer_RenderWindow = ImGui_ImplOpenGL2_RenderWindow; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static void ImGui_ImplOpenGL2_ShutdownPlatformInterface() | ||||||
|  | { | ||||||
|  |     ImGui::DestroyPlatformWindows(); | ||||||
|  | } | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ | |||||||
|  |  | ||||||
| // Implemented features: | // Implemented features: | ||||||
| //  [X] User texture binding. Use 'GLUint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. | //  [X] User texture binding. Use 'GLUint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID in imgui.cpp. | ||||||
|  | //  [X] Multi-viewport rendering (when ImGuiConfigFlags_EnableViewports is enabled). | ||||||
|  |  | ||||||
| // **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** | // **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** | ||||||
| // **Prefer using the code in imgui_impl_opengl3.cpp** | // **Prefer using the code in imgui_impl_opengl3.cpp** | ||||||
|   | |||||||
| @@ -30,6 +30,8 @@ int main(int, char**) | |||||||
|     // Setup ImGui binding |     // Setup ImGui binding | ||||||
|     ImGui::CreateContext(); |     ImGui::CreateContext(); | ||||||
|     ImGuiIO& io = ImGui::GetIO(); (void)io; |     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||||
|  |     io.ConfigFlags |= ImGuiConfigFlags_EnableViewports; | ||||||
|  |     io.ConfigFlags |= ImGuiConfigFlags_NoTaskBarForViewports; | ||||||
|     //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls |     //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls | ||||||
|     ImGui_ImplGlfw_InitForOpenGL(window, true); |     ImGui_ImplGlfw_InitForOpenGL(window, true); | ||||||
|     ImGui_ImplOpenGL2_Init(); |     ImGui_ImplOpenGL2_Init(); | ||||||
| @@ -114,6 +116,12 @@ int main(int, char**) | |||||||
|         glClear(GL_COLOR_BUFFER_BIT); |         glClear(GL_COLOR_BUFFER_BIT); | ||||||
|         //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. |         //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()); |         ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData()); | ||||||
|  |  | ||||||
|  |         // Update and Render additional Platform Windows (when ImGuiConfigFlags_EnableViewports is enabled) | ||||||
|  |         ImGui::UpdatePlatformWindows(); | ||||||
|  |         ImGui::RenderPlatformWindows(NULL, NULL); | ||||||
|  |  | ||||||
|  |         glfwMakeContextCurrent(window); | ||||||
|         glfwSwapBuffers(window); |         glfwSwapBuffers(window); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14066,7 +14066,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|                     ImGui::BulletText("Pos: (%.0f,%.0f), PlatformPos: (%.0f,%.0f)", viewport->Pos.x, viewport->Pos.y, viewport->PlatformPos.x, viewport->PlatformPos.y); |                     ImGui::BulletText("Pos: (%.0f,%.0f), PlatformPos: (%.0f,%.0f)", viewport->Pos.x, viewport->Pos.y, viewport->PlatformPos.x, viewport->PlatformPos.y); | ||||||
|                     if (i > 0) { ImGui::SameLine(); if (ImGui::SmallButton("Reset")) viewport->PlatformPos = ImVec2(0, 0); } |                     if (i > 0) { ImGui::SameLine(); if (ImGui::SmallButton("Reset")) viewport->PlatformPos = ImVec2(0, 0); } | ||||||
|                     ImGui::BulletText("DpiScale: %.0f%%", viewport->DpiScale * 100.0f); |                     ImGui::BulletText("DpiScale: %.0f%%", viewport->DpiScale * 100.0f); | ||||||
|                     ImGui::BulletText("Flags: 0x%04X =%s%s%s%s", viewport->Flags, |                     ImGui::BulletText("Flags: 0x%04X =%s%s%s%s%s", viewport->Flags, | ||||||
|                         (flags & ImGuiViewportFlags_CanHostOtherWindows) ? " CanHostOtherWindows" : "", (flags & ImGuiViewportFlags_NoDecoration) ? " NoDecoration" : "", |                         (flags & ImGuiViewportFlags_CanHostOtherWindows) ? " CanHostOtherWindows" : "", (flags & ImGuiViewportFlags_NoDecoration) ? " NoDecoration" : "", | ||||||
|                         (flags & ImGuiViewportFlags_NoFocusOnAppearing)  ? " NoFocusOnAppearing"  : "", (flags & ImGuiViewportFlags_NoInputs)     ? " NoInputs" : "", |                         (flags & ImGuiViewportFlags_NoFocusOnAppearing)  ? " NoFocusOnAppearing"  : "", (flags & ImGuiViewportFlags_NoInputs)     ? " NoInputs" : "", | ||||||
|                         (flags & ImGuiViewportFlags_NoRendererClear)     ? " NoRendererClear"     : ""); |                         (flags & ImGuiViewportFlags_NoRendererClear)     ? " NoRendererClear"     : ""); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 omar
					omar