Browse Source

Examples: OpenGL: skip rendering and calling glViewport() if we have a zero-fixed buffer (#486)

ocornut 9 years ago
parent
commit
2813a44dcc

+ 3 - 1
examples/opengl3_example/imgui_impl_glfw_gl3.cpp

@@ -62,6 +62,8 @@ void ImGui_ImplGlfwGL3_RenderDrawLists(ImDrawData* draw_data)
     ImGuiIO& io = ImGui::GetIO();
     ImGuiIO& io = ImGui::GetIO();
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
+    if (fb_width == 0 || fb_height == 0)
+        return;
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 
 
     // Setup viewport, orthographic projection matrix
     // Setup viewport, orthographic projection matrix
@@ -353,7 +355,7 @@ void ImGui_ImplGlfwGL3_NewFrame()
     glfwGetWindowSize(g_Window, &w, &h);
     glfwGetWindowSize(g_Window, &w, &h);
     glfwGetFramebufferSize(g_Window, &display_w, &display_h);
     glfwGetFramebufferSize(g_Window, &display_w, &display_h);
     io.DisplaySize = ImVec2((float)w, (float)h);
     io.DisplaySize = ImVec2((float)w, (float)h);
-    io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h);
+    io.DisplayFramebufferScale = ImVec2(w > 0 ? ((float)display_w / w) : 0, h > 0 ? ((float)display_h / h) : 0);
 
 
     // Setup time step
     // Setup time step
     double current_time =  glfwGetTime();
     double current_time =  glfwGetTime();

+ 3 - 1
examples/opengl_example/imgui_impl_glfw.cpp

@@ -48,6 +48,8 @@ void ImGui_ImplGlfw_RenderDrawLists(ImDrawData* draw_data)
     ImGuiIO& io = ImGui::GetIO();
     ImGuiIO& io = ImGui::GetIO();
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
+    if (fb_width == 0 || fb_height == 0)
+        return;
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 
 
     // Setup viewport, orthographic projection matrix
     // Setup viewport, orthographic projection matrix
@@ -242,7 +244,7 @@ void ImGui_ImplGlfw_NewFrame()
     glfwGetWindowSize(g_Window, &w, &h);
     glfwGetWindowSize(g_Window, &w, &h);
     glfwGetFramebufferSize(g_Window, &display_w, &display_h);
     glfwGetFramebufferSize(g_Window, &display_w, &display_h);
     io.DisplaySize = ImVec2((float)w, (float)h);
     io.DisplaySize = ImVec2((float)w, (float)h);
-    io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h);
+    io.DisplayFramebufferScale = ImVec2(w > 0 ? ((float)display_w / w) : 0, h > 0 ? ((float)display_h / h) : 0);
 
 
     // Setup time step
     // Setup time step
     double current_time =  glfwGetTime();
     double current_time =  glfwGetTime();

+ 2 - 0
examples/sdl_opengl3_example/imgui_impl_sdl_gl3.cpp

@@ -57,6 +57,8 @@ void ImGui_ImplSdlGL3_RenderDrawLists(ImDrawData* draw_data)
     ImGuiIO& io = ImGui::GetIO();
     ImGuiIO& io = ImGui::GetIO();
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
+    if (fb_width == 0 || fb_height == 0)
+        return;
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 
 
     // Setup orthographic projection matrix
     // Setup orthographic projection matrix

+ 2 - 0
examples/sdl_opengl_example/imgui_impl_sdl.cpp

@@ -41,6 +41,8 @@ void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data)
     ImGuiIO& io = ImGui::GetIO();
     ImGuiIO& io = ImGui::GetIO();
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
     int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y);
+    if (fb_width == 0 || fb_height == 0)
+        return;
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
     draw_data->ScaleClipRects(io.DisplayFramebufferScale);
 
 
     // Setup viewport, orthographic projection matrix
     // Setup viewport, orthographic projection matrix