commit 42592a9842d3a8d0e4646424abb3bf1a3a0dc9b4
parent ce5dbcc5331579d5a41633654d3b69e2d974a446
Author: beep <beep@wimdupont.com>
Date: Sat, 4 Apr 2026 16:59:44 +0000
Fix SDL renderer initialization order
Diffstat:
1 file changed, 33 insertions(+), 11 deletions(-)
diff --git a/src/game/main.c b/src/game/main.c
@@ -254,6 +254,33 @@ ph_read_input(const bool *keys)
}
static int
+ph_create_window_renderer(SDL_Window **window, SDL_Renderer **renderer)
+{
+ *window = SDL_CreateWindow("phantasia",
+ PH_VIEW_W * PH_SCALE,
+ PH_VIEW_H * PH_SCALE,
+ 0);
+ if (!*window) {
+ fprintf(stderr, "SDL_CreateWindow failed: %s\n", SDL_GetError());
+ return -1;
+ }
+
+ *renderer = SDL_CreateRenderer(*window, NULL);
+ if (!*renderer) {
+ fprintf(stderr, "SDL_CreateRenderer default backend failed: %s\n", SDL_GetError());
+ *renderer = SDL_CreateRenderer(*window, "software");
+ }
+ if (!*renderer) {
+ fprintf(stderr, "SDL_CreateRenderer software fallback failed: %s\n", SDL_GetError());
+ SDL_DestroyWindow(*window);
+ *window = NULL;
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
ph_run_render_smoke_test(void)
{
SDL_Surface *surface;
@@ -335,22 +362,17 @@ ph_run_game(int frame_limit)
return 1;
}
- tileset = ph_load_tileset(renderer, PH_TILESET_PATH);
- if (!tileset) {
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
+ if (ph_create_window_renderer(&window, &renderer) < 0) {
ph_area_free(&world.area);
SDL_Quit();
return 1;
}
- if (!SDL_CreateWindowAndRenderer("phantasia",
- PH_VIEW_W * PH_SCALE,
- PH_VIEW_H * PH_SCALE,
- 0,
- &window,
- &renderer)) {
- fprintf(stderr, "SDL_CreateWindowAndRenderer failed: %s\n", SDL_GetError());
+ tileset = ph_load_tileset(renderer, PH_TILESET_PATH);
+ if (!tileset) {
+ SDL_DestroyRenderer(renderer);
+ SDL_DestroyWindow(window);
+ ph_area_free(&world.area);
SDL_Quit();
return 1;
}