mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-04-08 18:07:17 +02:00
testcolorspace: use the SDL main callbacks
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user