phantasia

Phantasia - 2D SDL3 RPG prototype.
git clone git://git.beep.wimdupont.com/phantasia.git
Log | Files | Refs | README | LICENSE

commit 42592a9842d3a8d0e4646424abb3bf1a3a0dc9b4
parent ce5dbcc5331579d5a41633654d3b69e2d974a446
Author: beep <beep@wimdupont.com>
Date:   Sat,  4 Apr 2026 16:59:44 +0000

Fix SDL renderer initialization order

Diffstat:
Msrc/game/main.c | 44+++++++++++++++++++++++++++++++++-----------
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; }