Forráskód Böngészése

Fixed window flashing under X11 when creating a window and OpenGL renderer

Sam Lantinga 11 hónapja
szülő
commit
04f1901751
1 módosított fájl, 17 hozzáadás és 0 törlés
  1. 17 0
      src/render/SDL_render.c

+ 17 - 0
src/render/SDL_render.c

@@ -828,6 +828,18 @@ static int SDLCALL SDL_RendererEventWatch(void *userdata, SDL_Event *event)
 
 int SDL_CreateWindowAndRenderer(int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer)
 {
+    SDL_bool hidden = (window_flags & SDL_WINDOW_HIDDEN) != 0;
+
+    if (!window) {
+        return SDL_InvalidParamError("window");
+    }
+
+    if (!renderer) {
+        return SDL_InvalidParamError("renderer");
+    }
+
+    // Hide the window so if the renderer recreates it, we don't get a visual flash on screen
+    window_flags |= SDL_WINDOW_HIDDEN;
     *window = SDL_CreateWindow(NULL, width, height, window_flags);
     if (!*window) {
         *renderer = NULL;
@@ -836,9 +848,14 @@ int SDL_CreateWindowAndRenderer(int width, int height, SDL_WindowFlags window_fl
 
     *renderer = SDL_CreateRenderer(*window, NULL, 0);
     if (!*renderer) {
+        SDL_DestroyWindow(*window);
         return -1;
     }
 
+    if (!hidden) {
+        SDL_ShowWindow(*window);
+    }
+
     return 0;
 }