testcolorspace: use the SDL main callbacks

This commit is contained in:
Sam Lantinga
2026-04-07 13:31:16 -07:00
parent 7f23f09ee8
commit cf71571c96

View File

@@ -10,14 +10,11 @@
freely.
*/
#define SDL_MAIN_USE_CALLBACKS 1
#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include <SDL3/SDL_main.h>
#ifdef SDL_PLATFORM_EMSCRIPTEN
#include <emscripten/emscripten.h>
#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;
}