From 61ba96db363b264f507ed00a7850c3174aa32ce9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 8 Apr 2026 10:08:11 -0700 Subject: [PATCH] Don't send any commands to the GPU while hidden Previously we weren't doing drawing, but we were enqueuing viewport commands and so forth, which were causing GPU permission errors on iOS. We really don't want to be sending any work to the GPU when we're in the background. (cherry picked from commit 57f3d2ea0aada9131c109aaa0dfda41839997ebf) --- src/render/SDL_render.c | 69 ++++------------------------------------- 1 file changed, 6 insertions(+), 63 deletions(-) diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index a4461f5d2b..b77d33e6ef 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -320,6 +320,12 @@ static bool FlushRenderCommands(SDL_Renderer *renderer) DebugLogRenderCommands(renderer->render_commands); +#if DONT_DRAW_WHILE_HIDDEN + // Don't send commands to the GPU while we're hidden + if (renderer->hidden) { + result = true; + } else +#endif result = renderer->RunCommandQueue(renderer, renderer->render_commands, renderer->vertex_data, renderer->vertex_data_used); // Move the whole render command queue to the unused pool so we can reuse them next time. @@ -3581,13 +3587,6 @@ bool SDL_RenderPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int coun return true; } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - const SDL_RenderViewState *view = renderer->view; if ((view->current_scale.x != 1.0f) || (view->current_scale.y != 1.0f)) { result = RenderPointsWithRects(renderer, points, count); @@ -3788,13 +3787,6 @@ bool SDL_RenderLines(SDL_Renderer *renderer, const SDL_FPoint *points, int count return true; } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - SDL_RenderViewState *view = renderer->view; const bool islogical = (view->logical_presentation_mode != SDL_LOGICAL_PRESENTATION_DISABLED); @@ -3968,13 +3960,6 @@ bool SDL_RenderRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count) return true; } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - for (i = 0; i < count; ++i) { if (!SDL_RenderRect(renderer, &rects[i])) { return false; @@ -4014,13 +3999,6 @@ bool SDL_RenderFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, int cou return true; } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - frects = SDL_small_alloc(SDL_FRect, count, &isstack); if (!frects) { return false; @@ -4111,13 +4089,6 @@ bool SDL_RenderTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_F return SDL_SetError("Texture was not created with this renderer"); } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - SDL_FRect real_srcrect; real_srcrect.x = 0.0f; real_srcrect.y = 0.0f; @@ -4165,13 +4136,6 @@ bool SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture, return SDL_SetError("Renderer does not support RenderCopyEx"); } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - real_srcrect.x = 0.0f; real_srcrect.y = 0.0f; real_srcrect.w = (float)texture->w; @@ -4292,13 +4256,6 @@ bool SDL_RenderTextureRotated(SDL_Renderer *renderer, SDL_Texture *texture, return SDL_SetError("Renderer does not support RenderCopyEx"); } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - real_srcrect.x = 0.0f; real_srcrect.y = 0.0f; real_srcrect.w = (float)texture->w; @@ -4553,13 +4510,6 @@ bool SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const return SDL_InvalidParamError("scale"); } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - real_srcrect.x = 0.0f; real_srcrect.y = 0.0f; real_srcrect.w = (float)texture->w; @@ -5339,13 +5289,6 @@ bool SDL_RenderGeometryRaw(SDL_Renderer *renderer, return SDL_Unsupported(); } -#if DONT_DRAW_WHILE_HIDDEN - // Don't draw while we're hidden - if (renderer->hidden) { - return true; - } -#endif - if (num_vertices < 3) { return true; }