SDL: Make interactive tests work on SDL3 built with disabled param checking (or assert on invalid)

From b30cda60c1d1b7371d71d6f0ca58b5ca948c6621 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Wed, 12 Aug 2026 23:01:48 +0200
Subject: [PATCH] Make interactive tests work on SDL3 built with disabled param
 checking (or assert on invalid)

---
 examples/asyncio/01-load-bitmaps/load-bitmaps.c |  4 +++-
 examples/demo/04-bytepusher/bytepusher.c        |  6 +++---
 examples/renderer/17-read-pixels/read-pixels.c  |  4 +++-
 test/testffmpeg.c                               | 10 +++++++---
 test/testintersections.c                        |  6 +++++-
 test/testmodal.c                                |  2 +-
 test/testrotate.c                               |  4 +++-
 test/testyuv.c                                  | 12 +++++++-----
 8 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/examples/asyncio/01-load-bitmaps/load-bitmaps.c b/examples/asyncio/01-load-bitmaps/load-bitmaps.c
index aebb96eb068d8..eba69230edbdc 100644
--- a/examples/asyncio/01-load-bitmaps/load-bitmaps.c
+++ b/examples/asyncio/01-load-bitmaps/load-bitmaps.c
@@ -102,7 +102,9 @@ SDL_AppResult SDL_AppIterate(void *appstate)
     SDL_RenderClear(renderer);
 
     for (i = 0; i < SDL_arraysize(textures); i++) {
-        SDL_RenderTexture(renderer, textures[i], NULL, &texture_rects[i]);
+        if (textures[i]) {
+            SDL_RenderTexture(renderer, textures[i], NULL, &texture_rects[i]);
+        }
     }
 
     SDL_RenderPresent(renderer);
diff --git a/examples/demo/04-bytepusher/bytepusher.c b/examples/demo/04-bytepusher/bytepusher.c
index e1661b50181e2..ce7b5f194fe4d 100644
--- a/examples/demo/04-bytepusher/bytepusher.c
+++ b/examples/demo/04-bytepusher/bytepusher.c
@@ -344,7 +344,7 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event) {
         case SDL_EVENT_DROP_FILE:
             load_file(vm, event->drop.data);
             break;
-        
+
         case SDL_EVENT_KEY_DOWN:
 #ifndef SDL_PLATFORM_EMSCRIPTEN
             if (event->key.key == SDLK_ESCAPE) {
@@ -366,8 +366,8 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event) {
                 vm->keystate |= keycode_mask(event->key.key);
             }
             break;
-        
-        case SDL_EVENT_KEY_UP: 
+
+        case SDL_EVENT_KEY_UP:
             if (vm->positional_input) {
                 vm->keystate &= ~scancode_mask(event->key.scancode);
             } else {
diff --git a/examples/renderer/17-read-pixels/read-pixels.c b/examples/renderer/17-read-pixels/read-pixels.c
index 3775069e0f1da..040b6ac86cfc2 100644
--- a/examples/renderer/17-read-pixels/read-pixels.c
+++ b/examples/renderer/17-read-pixels/read-pixels.c
@@ -126,7 +126,9 @@ SDL_AppResult SDL_AppIterate(void *appstate)
     if (surface) {
         /* Rebuild converted_texture if the dimensions have changed (window resized, etc). */
         if ((surface->w != converted_texture_width) || (surface->h != converted_texture_height)) {
-            SDL_DestroyTexture(converted_texture);
+            if (converted_texture) {
+                SDL_DestroyTexture(converted_texture);
+            }
             converted_texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, surface->w, surface->h);
             if (!converted_texture) {
                 SDL_Log("Couldn't (re)create conversion texture: %s", SDL_GetError());
diff --git a/test/testffmpeg.c b/test/testffmpeg.c
index da1420e14ae24..10931a6366865 100644
--- a/test/testffmpeg.c
+++ b/test/testffmpeg.c
@@ -1589,7 +1589,7 @@ int main(int argc, char *argv[])
         }
 
         if (flushing && !decoded) {
-            if (SDL_GetAudioStreamQueued(audio) > 0 && !nodelay) {
+            if (audio && SDL_GetAudioStreamQueued(audio) > 0 && !nodelay) {
                 /* Wait a little bit for the audio to finish */
                 SDL_Delay(10);
             } else {
@@ -1616,11 +1616,15 @@ int main(int argc, char *argv[])
     avcodec_free_context(&audio_context);
     avcodec_free_context(&video_context);
     avformat_close_input(&ic);
-    SDL_DestroyRenderer(renderer);
+    if (renderer) {
+        SDL_DestroyRenderer(renderer);
+    }
     if (vulkan_context) {
         DestroyVulkanVideoContext(vulkan_context);
     }
-    SDL_DestroyWindow(window);
+    if (window) {
+        SDL_DestroyWindow(window);
+    }
     SDL_Quit();
     SDLTest_CommonDestroyState(state);
     return return_code;
diff --git a/test/testintersections.c b/test/testintersections.c
index cb9fed75497ca..967d82aa22e49 100644
--- a/test/testintersections.c
+++ b/test/testintersections.c
@@ -210,8 +210,12 @@ static void loop(void *arg)
 
     /* Check for events */
     while (SDL_PollEvent(&event)) {
+        SDL_Window *window;
         SDLTest_CommonEvent(state, &event, done);
-        SDL_ConvertEventToRenderCoordinates(SDL_GetRenderer(SDL_GetWindowFromEvent(&event)), &event);
+        window = SDL_GetWindowFromEvent(&event);
+        if (window) {
+            SDL_ConvertEventToRenderCoordinates(SDL_GetRenderer(window), &event);
+        }
         switch (event.type) {
         case SDL_EVENT_MOUSE_BUTTON_DOWN:
             mouse_begin_x = event.button.x;
diff --git a/test/testmodal.c b/test/testmodal.c
index 3c10a00866b81..9dad19f6595d4 100644
--- a/test/testmodal.c
+++ b/test/testmodal.c
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
                 quit = 1;
                 break;
             } else if (e.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED) {
-                if (e.window.windowID == SDL_GetWindowID(w2)) {
+                if (w2 && e.window.windowID == SDL_GetWindowID(w2)) {
                     SDL_DestroyRenderer(r2);
                     SDL_DestroyWindow(w2);
                     r2 = NULL;
diff --git a/test/testrotate.c b/test/testrotate.c
index 9dfb16c9166d1..85851809fa8b2 100644
--- a/test/testrotate.c
+++ b/test/testrotate.c
@@ -104,7 +104,9 @@ static bool UpdateRotation(SDL_Renderer *renderer)
         return false;
     }
 
-    SDL_DestroyTexture(texture);
+    if (texture) {
+        SDL_DestroyTexture(texture);
+    }
     texture = SDL_CreateTextureFromSurface(renderer, rotated);
     SDL_DestroySurface(rotated);
     if (!texture) {
diff --git a/test/testyuv.c b/test/testyuv.c
index 3cc5af8daa3fe..9c2ba97aaa091 100644
--- a/test/testyuv.c
+++ b/test/testyuv.c
@@ -674,9 +674,9 @@ static bool run_all_format_test(SDL_Window *window, const char *requested_render
 
     for (int i = 0; i < SDL_GetNumRenderDrivers() && !quit; ++i) {
         const char *renderer_name = SDL_GetRenderDriver(i);
-		if (requested_renderer && SDL_strcmp(renderer_name, requested_renderer) != 0) {
-			continue;
-		}
+        if (requested_renderer && SDL_strcmp(renderer_name, requested_renderer) != 0) {
+            continue;
+        }
 
         SDL_Renderer *renderer = SDL_CreateRenderer(window, renderer_name);
         if (!renderer) {
@@ -1047,9 +1047,11 @@ int main(int argc, char **argv)
     }
 
 done:
-	SDL_free(filename);
+    SDL_free(filename);
     SDL_DestroySurface(original);
-    SDL_DestroyWindow(window);
+    if (window) {
+        SDL_DestroyWindow(window);
+    }
     SDL_Quit();
     SDLTest_CommonDestroyState(state);
     return result;