Browse Source

Examples: SDL2 (all), SDL3 (all), Win32+OpenGL3: Rework examples main loop to handle minimization without burning CPU or GPU by running unthrottled code. (#7844)

ocornut 1 year ago
parent
commit
887478793b

+ 4 - 0
docs/CHANGELOG.txt

@@ -43,6 +43,10 @@ Breaking changes:
 
 
 Other changes:
 Other changes:
 
 
+- Examples: SDL2 (all), SDL3 (all), Win32+OpenGL3: rework examples main loop to handle
+  minimization without burning CPU or GPU by running unthrottled code. (#7844)
+
+
 
 
 -----------------------------------------------------------------------
 -----------------------------------------------------------------------
  VERSION 1.91.0 (Released 2024-07-30)
  VERSION 1.91.0 (Released 2024-07-30)

+ 5 - 0
examples/example_sdl2_directx11/main.cpp

@@ -126,6 +126,11 @@ int main(int, char**)
                 CreateRenderTarget();
                 CreateRenderTarget();
             }
             }
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplDX11_NewFrame();
         ImGui_ImplDX11_NewFrame();

+ 5 - 0
examples/example_sdl2_opengl2/main.cpp

@@ -105,6 +105,11 @@ int main(int, char**)
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
                 done = true;
                 done = true;
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplOpenGL2_NewFrame();
         ImGui_ImplOpenGL2_NewFrame();

+ 5 - 0
examples/example_sdl2_opengl3/main.cpp

@@ -140,6 +140,11 @@ int main(int, char**)
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
                 done = true;
                 done = true;
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplOpenGL3_NewFrame();
         ImGui_ImplOpenGL3_NewFrame();

+ 5 - 0
examples/example_sdl2_sdlrenderer2/main.cpp

@@ -107,6 +107,11 @@ int main(int, char**)
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
                 done = true;
                 done = true;
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplSDLRenderer2_NewFrame();
         ImGui_ImplSDLRenderer2_NewFrame();

+ 5 - 0
examples/example_sdl2_vulkan/main.cpp

@@ -492,6 +492,11 @@ int main(int, char**)
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window))
                 done = true;
                 done = true;
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Resize swap chain?
         // Resize swap chain?
         int fb_width, fb_height;
         int fb_width, fb_height;

+ 5 - 0
examples/example_sdl3_opengl3/main.cpp

@@ -136,6 +136,11 @@ int main(int, char**)
             if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window))
             if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window))
                 done = true;
                 done = true;
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplOpenGL3_NewFrame();
         ImGui_ImplOpenGL3_NewFrame();

+ 5 - 0
examples/example_sdl3_sdlrenderer3/main.cpp

@@ -111,6 +111,11 @@ int main(int, char**)
             if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window))
             if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window))
                 done = true;
                 done = true;
         }
         }
+        if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)
+        {
+            SDL_Delay(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplSDLRenderer3_NewFrame();
         ImGui_ImplSDLRenderer3_NewFrame();

+ 5 - 0
examples/example_win32_opengl3/main.cpp

@@ -108,6 +108,11 @@ int main(int, char**)
         }
         }
         if (done)
         if (done)
             break;
             break;
+        if (::IsIconic(hwnd))
+        {
+            ::Sleep(10);
+            continue;
+        }
 
 
         // Start the Dear ImGui frame
         // Start the Dear ImGui frame
         ImGui_ImplOpenGL3_NewFrame();
         ImGui_ImplOpenGL3_NewFrame();