diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index 4f92ea898..709141850 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; }