allow for custom SDL window parameters, fixes #5

This commit is contained in:
2026-10-06 10:31:10 +02:00
parent 6b3b5b0241
commit a32a3db9bc
3 changed files with 53 additions and 17 deletions
+2 -1
View File
@@ -172,5 +172,6 @@ void
engine_stop() {
engine_sdl_destroy(internal_state->sdl_state);
free(internal_state);
free(game_state);
free(game_state->framebuffer);
free(game_state);
}
+40 -9
View File
@@ -2,9 +2,15 @@
#include "error.h"
#include <SDL3/SDL_render.h>
#include <SDL3/SDL_video.h>
#include <stdint.h>
bool
engine_sdl_init_state(engine_sdl_state_t **state) {
engine_sdl_init_state(
engine_sdl_state_t **state,
uint32_t window_width,
uint32_t window_height,
const char window_name[]
) {
*state = (engine_sdl_state_t *)
malloc(sizeof(engine_sdl_state_t));
@@ -13,12 +19,13 @@ engine_sdl_init_state(engine_sdl_state_t **state) {
return RCODE_FAILURE;
}
(*state)->width = WINDOW_WIDTH;
(*state)->height = WINDOW_HEIGHT;
(*state)->width = window_width;
(*state)->height = window_height;
strncpy(
(*state)->window_name, DEFAULT_WINDOW_NAME,
WINDOW_NAME_LENGTH
(*state)->window_name, window_name,
WINDOW_NAME_MAX_LENGTH - 1
);
(*state)->window_name[WINDOW_NAME_MAX_LENGTH - 1] = '\0';
return RCODE_SUCCESS;
}
@@ -94,11 +101,19 @@ engine_sdl_init_texture(
}
engine_sdl_state_t*
engine_sdl_init()
{
engine_sdl_init(
uint32_t window_width,
uint32_t window_height,
const char window_name[]
) {
engine_sdl_state_t *state;
if (!engine_sdl_init_state(&state) ||
if (!engine_sdl_init_state(
&state,
window_width,
window_height,
window_name
) ||
!engine_sdl_init_root() ||
!engine_sdl_init_window(state) ||
!engine_sdl_init_renderer(state) ||
@@ -127,6 +142,9 @@ engine_sdl_destroy(
bool
engine_init(
uint32_t window_width,
uint32_t window_height,
const char window_name[],
void (*engine_poll_events)(void),
void (*engine_update_framebuffer)(void)
) {
@@ -143,15 +161,28 @@ engine_init(
return RCODE_FAILURE;
}
game_state->framebuffer = (uint32_t *)
malloc(sizeof(uint32_t) * window_width * window_height);
if (game_state->framebuffer == NULL) {
free(internal_state);
free(game_state);
return RCODE_FAILURE;
}
internal_state->engine_poll_events
= engine_poll_events;
internal_state->engine_update_framebuffer
= engine_update_framebuffer;
internal_state->sdl_state = engine_sdl_init();
internal_state->sdl_state = engine_sdl_init(
window_width,
window_height,
window_name
);
if (internal_state->sdl_state == NULL) {
free(internal_state);
free(game_state->framebuffer);
free(game_state);
return RCODE_FAILURE;
}