SDL: Finish any drawing when destroying a software renderer

From 8f4c5e15f1f6d3a0886f2be78e8555f42fa7e455 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 20 Feb 2025 08:49:47 -0800
Subject: [PATCH] Finish any drawing when destroying a software renderer

Fixes the SDL3 version of https://github.com/libsdl-org/sdl2-compat/issues/373
---
 src/render/SDL_render.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 33cc29fa5f950..47470d1cfff64 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -5214,7 +5214,12 @@ void SDL_DestroyRendererWithoutFreeing(SDL_Renderer *renderer)
         SDL_RemoveWindowRenderer(renderer->window, renderer);
     }
 
-    SDL_DiscardAllCommands(renderer);
+    if (renderer->software) {
+        // Make sure all drawing to a surface is complete
+        FlushRenderCommands(renderer);
+    } else {
+        SDL_DiscardAllCommands(renderer);
+    }
 
     if (renderer->debug_char_texture_atlas) {
         SDL_DestroyTexture(renderer->debug_char_texture_atlas);