From cf71571c962659eea17aa33131fd8bf0e41961a2 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 7 Apr 2026 13:31:16 -0700 Subject: [PATCH] testcolorspace: use the SDL main callbacks --- test/testcolorspace.c | 155 ++++++++++++++++++------------------------ 1 file changed, 67 insertions(+), 88 deletions(-) diff --git a/test/testcolorspace.c b/test/testcolorspace.c index 5c28e1e6db..36be78fde4 100644 --- a/test/testcolorspace.c +++ b/test/testcolorspace.c @@ -10,14 +10,11 @@ freely. */ +#define SDL_MAIN_USE_CALLBACKS 1 #include #include #include -#ifdef SDL_PLATFORM_EMSCRIPTEN -#include -#endif - #define WINDOW_WIDTH 640 #define WINDOW_HEIGHT 480 @@ -33,7 +30,6 @@ static const char *colorspace_name = "sRGB"; static int renderer_count = 0; static int renderer_index = 0; static int stage_index = 0; -static int done; static float HDR_headroom = 1.0f; enum @@ -584,80 +580,73 @@ static void RenderGradientTexture(void) y += 64.0f; } -static void loop(void) +SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { - SDL_Event event; - /* Check for events */ - while (SDL_PollEvent(&event)) { - if (event.type == SDL_EVENT_KEY_DOWN) { - switch (event.key.key) { - case SDLK_ESCAPE: - done = 1; - break; - case SDLK_SPACE: - case SDLK_RIGHT: - NextStage(); - break; - case SDLK_LEFT: - PrevStage(); - break; - case SDLK_DOWN: - NextRenderer(); - break; - case SDLK_UP: - PrevRenderer(); - break; - default: - break; - } - } else if (event.type == SDL_EVENT_WINDOW_HDR_STATE_CHANGED) { - UpdateHDRState(); - } else if (event.type == SDL_EVENT_QUIT) { - done = 1; - } - } - - if (renderer) { - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_RenderClear(renderer); - - switch (stage_index) { - case StageClearBackground: - RenderClearBackground(); + if (event->type == SDL_EVENT_KEY_DOWN) { + switch (event->key.key) { + case SDLK_ESCAPE: + return SDL_APP_SUCCESS; + case SDLK_SPACE: + case SDLK_RIGHT: + NextStage(); break; - case StageDrawBackground: - RenderDrawBackground(); + case SDLK_LEFT: + PrevStage(); break; - case StageTextureBackground: - RenderTextureBackground(); + case SDLK_DOWN: + NextRenderer(); break; - case StageTargetBackground: - RenderTargetBackground(); + case SDLK_UP: + PrevRenderer(); break; - case StageBlendDrawing: - RenderBlendDrawing(); - break; - case StageBlendTexture: - RenderBlendTexture(); - break; - case StageGradientDrawing: - RenderGradientDrawing(); - break; - case StageGradientTexture: - RenderGradientTexture(); + default: break; } - - SDL_RenderPresent(renderer); + } else if (event->type == SDL_EVENT_WINDOW_HDR_STATE_CHANGED) { + UpdateHDRState(); + } else if (event->type == SDL_EVENT_QUIT) { + return SDL_APP_SUCCESS; } + return SDL_APP_CONTINUE; +} + +SDL_AppResult SDL_AppIterate(void *appstate) +{ + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + switch (stage_index) { + case StageClearBackground: + RenderClearBackground(); + break; + case StageDrawBackground: + RenderDrawBackground(); + break; + case StageTextureBackground: + RenderTextureBackground(); + break; + case StageTargetBackground: + RenderTargetBackground(); + break; + case StageBlendDrawing: + RenderBlendDrawing(); + break; + case StageBlendTexture: + RenderBlendTexture(); + break; + case StageGradientDrawing: + RenderGradientDrawing(); + break; + case StageGradientTexture: + RenderGradientTexture(); + break; + } + + SDL_RenderPresent(renderer); SDL_Delay(100); -#ifdef SDL_PLATFORM_EMSCRIPTEN - if (done) { - emscripten_cancel_main_loop(); - } -#endif + return SDL_APP_CONTINUE; } static void LogUsage(const char *argv0) @@ -665,9 +654,8 @@ static void LogUsage(const char *argv0) SDL_Log("Usage: %s [--renderer renderer] [--colorspace colorspace]", argv0); } -int main(int argc, char *argv[]) +SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) { - int return_code = 1; int i; for (i = 1; i < argc; ++i) { @@ -677,7 +665,7 @@ int main(int argc, char *argv[]) ++i; } else { LogUsage(argv[0]); - goto quit; + return SDL_APP_FAILURE; } } else if (SDL_strcmp(argv[i], "--colorspace") == 0) { if (argv[i + 1]) { @@ -692,24 +680,23 @@ int main(int argc, char *argv[]) */ } else { SDL_Log("Unknown colorspace %s", argv[i + 1]); - goto quit; + return SDL_APP_FAILURE; } ++i; } else { LogUsage(argv[0]); - goto quit; + return SDL_APP_FAILURE; } } else { LogUsage(argv[0]); - goto quit; + return SDL_APP_FAILURE; } } window = SDL_CreateWindow("SDL colorspace test", WINDOW_WIDTH, WINDOW_HEIGHT, 0); if (!window) { SDL_Log("Couldn't create window: %s", SDL_GetError()); - return_code = 2; - goto quit; + return SDL_APP_FAILURE; } renderer_count = SDL_GetNumRenderDrivers(); @@ -724,20 +711,12 @@ int main(int argc, char *argv[]) } CreateRenderer(); - /* Main render loop */ - done = 0; + return SDL_APP_CONTINUE; +} -#ifdef SDL_PLATFORM_EMSCRIPTEN - emscripten_set_main_loop(loop, 0, 1); -#else - while (!done) { - loop(); - } -#endif - return_code = 0; -quit: +void SDL_AppQuit(void *appstate, SDL_AppResult result) +{ SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); - return return_code; }