|
@@ -10,14 +10,11 @@
|
|
|
freely.
|
|
freely.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
|
|
+#define SDL_MAIN_USE_CALLBACKS 1
|
|
|
#include <SDL3/SDL.h>
|
|
#include <SDL3/SDL.h>
|
|
|
#include <SDL3/SDL_test.h>
|
|
#include <SDL3/SDL_test.h>
|
|
|
#include <SDL3/SDL_main.h>
|
|
#include <SDL3/SDL_main.h>
|
|
|
|
|
|
|
|
-#ifdef SDL_PLATFORM_EMSCRIPTEN
|
|
|
|
|
-#include <emscripten/emscripten.h>
|
|
|
|
|
-#endif
|
|
|
|
|
-
|
|
|
|
|
#define WINDOW_WIDTH 640
|
|
#define WINDOW_WIDTH 640
|
|
|
#define WINDOW_HEIGHT 480
|
|
#define WINDOW_HEIGHT 480
|
|
|
|
|
|
|
@@ -33,7 +30,6 @@ static const char *colorspace_name = "sRGB";
|
|
|
static int renderer_count = 0;
|
|
static int renderer_count = 0;
|
|
|
static int renderer_index = 0;
|
|
static int renderer_index = 0;
|
|
|
static int stage_index = 0;
|
|
static int stage_index = 0;
|
|
|
-static int done;
|
|
|
|
|
static float HDR_headroom = 1.0f;
|
|
static float HDR_headroom = 1.0f;
|
|
|
|
|
|
|
|
enum
|
|
enum
|
|
@@ -584,80 +580,73 @@ static void RenderGradientTexture(void)
|
|
|
y += 64.0f;
|
|
y += 64.0f;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static void loop(void)
|
|
|
|
|
|
|
+SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
|
|
|
{
|
|
{
|
|
|
- SDL_Event event;
|
|
|
|
|
-
|
|
|
|
|
/* Check for events */
|
|
/* 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();
|
|
|
|
|
- break;
|
|
|
|
|
- case StageDrawBackground:
|
|
|
|
|
- RenderDrawBackground();
|
|
|
|
|
- break;
|
|
|
|
|
- case StageTextureBackground:
|
|
|
|
|
- RenderTextureBackground();
|
|
|
|
|
|
|
+ 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;
|
|
break;
|
|
|
- case StageTargetBackground:
|
|
|
|
|
- RenderTargetBackground();
|
|
|
|
|
|
|
+ case SDLK_LEFT:
|
|
|
|
|
+ PrevStage();
|
|
|
break;
|
|
break;
|
|
|
- case StageBlendDrawing:
|
|
|
|
|
- RenderBlendDrawing();
|
|
|
|
|
|
|
+ case SDLK_DOWN:
|
|
|
|
|
+ NextRenderer();
|
|
|
break;
|
|
break;
|
|
|
- case StageBlendTexture:
|
|
|
|
|
- RenderBlendTexture();
|
|
|
|
|
|
|
+ case SDLK_UP:
|
|
|
|
|
+ PrevRenderer();
|
|
|
break;
|
|
break;
|
|
|
- case StageGradientDrawing:
|
|
|
|
|
- RenderGradientDrawing();
|
|
|
|
|
- break;
|
|
|
|
|
- case StageGradientTexture:
|
|
|
|
|
- RenderGradientTexture();
|
|
|
|
|
|
|
+ default:
|
|
|
break;
|
|
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);
|
|
SDL_Delay(100);
|
|
|
|
|
|
|
|
-#ifdef SDL_PLATFORM_EMSCRIPTEN
|
|
|
|
|
- if (done) {
|
|
|
|
|
- emscripten_cancel_main_loop();
|
|
|
|
|
- }
|
|
|
|
|
-#endif
|
|
|
|
|
|
|
+ return SDL_APP_CONTINUE;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void LogUsage(const char *argv0)
|
|
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);
|
|
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;
|
|
int i;
|
|
|
|
|
|
|
|
for (i = 1; i < argc; ++i) {
|
|
for (i = 1; i < argc; ++i) {
|
|
@@ -677,7 +665,7 @@ int main(int argc, char *argv[])
|
|
|
++i;
|
|
++i;
|
|
|
} else {
|
|
} else {
|
|
|
LogUsage(argv[0]);
|
|
LogUsage(argv[0]);
|
|
|
- goto quit;
|
|
|
|
|
|
|
+ return SDL_APP_FAILURE;
|
|
|
}
|
|
}
|
|
|
} else if (SDL_strcmp(argv[i], "--colorspace") == 0) {
|
|
} else if (SDL_strcmp(argv[i], "--colorspace") == 0) {
|
|
|
if (argv[i + 1]) {
|
|
if (argv[i + 1]) {
|
|
@@ -692,24 +680,23 @@ int main(int argc, char *argv[])
|
|
|
*/
|
|
*/
|
|
|
} else {
|
|
} else {
|
|
|
SDL_Log("Unknown colorspace %s", argv[i + 1]);
|
|
SDL_Log("Unknown colorspace %s", argv[i + 1]);
|
|
|
- goto quit;
|
|
|
|
|
|
|
+ return SDL_APP_FAILURE;
|
|
|
}
|
|
}
|
|
|
++i;
|
|
++i;
|
|
|
} else {
|
|
} else {
|
|
|
LogUsage(argv[0]);
|
|
LogUsage(argv[0]);
|
|
|
- goto quit;
|
|
|
|
|
|
|
+ return SDL_APP_FAILURE;
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
LogUsage(argv[0]);
|
|
LogUsage(argv[0]);
|
|
|
- goto quit;
|
|
|
|
|
|
|
+ return SDL_APP_FAILURE;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
window = SDL_CreateWindow("SDL colorspace test", WINDOW_WIDTH, WINDOW_HEIGHT, 0);
|
|
window = SDL_CreateWindow("SDL colorspace test", WINDOW_WIDTH, WINDOW_HEIGHT, 0);
|
|
|
if (!window) {
|
|
if (!window) {
|
|
|
SDL_Log("Couldn't create window: %s", SDL_GetError());
|
|
SDL_Log("Couldn't create window: %s", SDL_GetError());
|
|
|
- return_code = 2;
|
|
|
|
|
- goto quit;
|
|
|
|
|
|
|
+ return SDL_APP_FAILURE;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
renderer_count = SDL_GetNumRenderDrivers();
|
|
renderer_count = SDL_GetNumRenderDrivers();
|
|
@@ -724,20 +711,12 @@ int main(int argc, char *argv[])
|
|
|
}
|
|
}
|
|
|
CreateRenderer();
|
|
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_DestroyRenderer(renderer);
|
|
|
SDL_DestroyWindow(window);
|
|
SDL_DestroyWindow(window);
|
|
|
SDL_Quit();
|
|
SDL_Quit();
|
|
|
- return return_code;
|
|
|
|
|
}
|
|
}
|