From 04f1901751dd3ce54be8879f525d4cda33d6118d Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
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 4f92ea8988cfe..709141850ce25 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;
}