|
@@ -9,52 +9,60 @@
|
|
|
including commercial applications, and to alter it and redistribute it
|
|
|
freely.
|
|
|
*/
|
|
|
+#define SDL_MAIN_USE_CALLBACKS 1 /* use the callbacks instead of main() */
|
|
|
#include <SDL3/SDL.h>
|
|
|
#include <SDL3/SDL_main.h>
|
|
|
|
|
|
-int main(int argc, char *argv[])
|
|
|
+static SDL_Window *window = NULL;
|
|
|
+static SDL_Renderer *renderer = NULL;
|
|
|
+
|
|
|
+/* This function runs once at startup. */
|
|
|
+SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
|
|
|
+{
|
|
|
+ /* Create the window */
|
|
|
+ if (!SDL_CreateWindowAndRenderer("Hello World", 800, 600, SDL_WINDOW_FULLSCREEN, &window, &renderer)) {
|
|
|
+ SDL_Log("Couldn't create window and renderer: %s\n", SDL_GetError());
|
|
|
+ return SDL_APP_FAILURE;
|
|
|
+ }
|
|
|
+ return SDL_APP_CONTINUE;
|
|
|
+}
|
|
|
+
|
|
|
+/* This function runs when a new event (mouse input, keypresses, etc) occurs. */
|
|
|
+SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
|
|
|
+{
|
|
|
+ if (event->type == SDL_EVENT_KEY_DOWN ||
|
|
|
+ event->type == SDL_EVENT_QUIT) {
|
|
|
+ return SDL_APP_SUCCESS; /* end the program, reporting success to the OS. */
|
|
|
+ }
|
|
|
+ return SDL_APP_CONTINUE;
|
|
|
+}
|
|
|
+
|
|
|
+/* This function runs once per frame, and is the heart of the program. */
|
|
|
+SDL_AppResult SDL_AppIterate(void *appstate)
|
|
|
{
|
|
|
- SDL_Window *window = NULL;
|
|
|
- SDL_Renderer *renderer = NULL;
|
|
|
const char *message = "Hello World!";
|
|
|
int w = 0, h = 0;
|
|
|
float x, y;
|
|
|
const float scale = 4.0f;
|
|
|
- bool done = false;
|
|
|
|
|
|
- /* Create the window */
|
|
|
- if (!SDL_CreateWindowAndRenderer("Hello World", 0, 0, SDL_WINDOW_FULLSCREEN, &window, &renderer)) {
|
|
|
- SDL_Log("Couldn't create window and renderer: %s\n", SDL_GetError());
|
|
|
- return 1;
|
|
|
- }
|
|
|
+ /* Center the message and scale it up */
|
|
|
+ SDL_GetRenderOutputSize(renderer, &w, &h);
|
|
|
+ SDL_SetRenderScale(renderer, scale, scale);
|
|
|
+ x = ((w / scale) - SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * SDL_strlen(message)) / 2;
|
|
|
+ y = ((h / scale) - SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE) / 2;
|
|
|
|
|
|
- while (!done) {
|
|
|
- SDL_Event event;
|
|
|
-
|
|
|
- /* Handle events */
|
|
|
- while (SDL_PollEvent(&event)) {
|
|
|
- if (event.type == SDL_EVENT_KEY_DOWN ||
|
|
|
- event.type == SDL_EVENT_MOUSE_BUTTON_DOWN ||
|
|
|
- event.type == SDL_EVENT_QUIT) {
|
|
|
- done = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /* Center the message and scale it up */
|
|
|
- SDL_GetRenderOutputSize(renderer, &w, &h);
|
|
|
- SDL_SetRenderScale(renderer, scale, scale);
|
|
|
- x = ((w / scale) - SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * SDL_strlen(message)) / 2;
|
|
|
- y = ((h / scale) - SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE) / 2;
|
|
|
-
|
|
|
- /* Draw the message */
|
|
|
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
|
|
- SDL_RenderClear(renderer);
|
|
|
- SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
|
|
- SDL_RenderDebugText(renderer, x, y, message);
|
|
|
- SDL_RenderPresent(renderer);
|
|
|
- }
|
|
|
- SDL_Quit();
|
|
|
+ /* Draw the message */
|
|
|
+ SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
|
|
|
+ SDL_RenderClear(renderer);
|
|
|
+ SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
|
|
+ SDL_RenderDebugText(renderer, x, y, message);
|
|
|
+ SDL_RenderPresent(renderer);
|
|
|
+
|
|
|
+ return SDL_APP_CONTINUE;
|
|
|
+}
|
|
|
|
|
|
- return 0;
|
|
|
+/* This function runs once at shutdown. */
|
|
|
+void SDL_AppQuit(void *appstate, SDL_AppResult result)
|
|
|
+{
|
|
|
}
|
|
|
|