From 04f1901751dd3ce54be8879f525d4cda33d6118d Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 25 Apr 2024 16:42:18 -0700 Subject: [PATCH] Fixed window flashing under X11 when creating a window and OpenGL renderer --- src/render/SDL_render.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index 4f92ea8988..709141850c 100644 --- a/src/render/SDL_render.c +++ b/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; }