allow for custom SDL window parameters #8
+11
-7
@@ -6,16 +6,13 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#define WINDOW_WIDTH 1280
|
#define WINDOW_NAME_MAX_LENGTH 128
|
||||||
#define WINDOW_HEIGHT 720
|
|
||||||
#define DEFAULT_WINDOW_NAME "Dangerzone"
|
|
||||||
#define WINDOW_NAME_LENGTH 128
|
|
||||||
#define TARGET_FRAME 1.0 / 60.0
|
#define TARGET_FRAME 1.0 / 60.0
|
||||||
#define FONT_ROWS 7
|
#define FONT_ROWS 7
|
||||||
#define FONT_COLS 5
|
#define FONT_COLS 5
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char window_name[WINDOW_NAME_LENGTH];
|
char window_name[WINDOW_NAME_MAX_LENGTH];
|
||||||
uint16_t width, height;
|
uint16_t width, height;
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
@@ -38,19 +35,23 @@ typedef struct {
|
|||||||
} engine_internal_state_t;
|
} engine_internal_state_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t framebuffer[WINDOW_WIDTH * WINDOW_HEIGHT];
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
bool is_running;
|
bool is_running;
|
||||||
bool framebuffer_dirty;
|
bool framebuffer_dirty;
|
||||||
SDL_Rect dirty_rect;
|
SDL_Rect dirty_rect;
|
||||||
uint16_t width, height;
|
uint16_t width, height;
|
||||||
|
uint32_t *framebuffer;
|
||||||
} game_state_t;
|
} game_state_t;
|
||||||
|
|
||||||
extern engine_internal_state_t *internal_state;
|
extern engine_internal_state_t *internal_state;
|
||||||
extern game_state_t *game_state;
|
extern game_state_t *game_state;
|
||||||
|
|
||||||
engine_sdl_state_t*
|
engine_sdl_state_t*
|
||||||
engine_sdl_init();
|
engine_sdl_init(
|
||||||
|
uint32_t window_width,
|
||||||
|
uint32_t window_height,
|
||||||
|
const char window_name[]
|
||||||
|
);
|
||||||
|
|
||||||
void
|
void
|
||||||
engine_sdl_destroy(
|
engine_sdl_destroy(
|
||||||
@@ -59,6 +60,9 @@ engine_sdl_destroy(
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
engine_init(
|
engine_init(
|
||||||
|
uint32_t window_width,
|
||||||
|
uint32_t window_height,
|
||||||
|
const char window_name[],
|
||||||
void (*engine_poll_events)(void),
|
void (*engine_poll_events)(void),
|
||||||
void (*engine_update_framebuffer)(void)
|
void (*engine_update_framebuffer)(void)
|
||||||
);
|
);
|
||||||
|
|||||||
+2
-1
@@ -172,5 +172,6 @@ void
|
|||||||
engine_stop() {
|
engine_stop() {
|
||||||
engine_sdl_destroy(internal_state->sdl_state);
|
engine_sdl_destroy(internal_state->sdl_state);
|
||||||
free(internal_state);
|
free(internal_state);
|
||||||
free(game_state);
|
free(game_state->framebuffer);
|
||||||
|
free(game_state);
|
||||||
}
|
}
|
||||||
@@ -2,9 +2,15 @@
|
|||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include <SDL3/SDL_render.h>
|
#include <SDL3/SDL_render.h>
|
||||||
#include <SDL3/SDL_video.h>
|
#include <SDL3/SDL_video.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
bool
|
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 *)
|
*state = (engine_sdl_state_t *)
|
||||||
malloc(sizeof(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;
|
return RCODE_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*state)->width = WINDOW_WIDTH;
|
(*state)->width = window_width;
|
||||||
(*state)->height = WINDOW_HEIGHT;
|
(*state)->height = window_height;
|
||||||
strncpy(
|
strncpy(
|
||||||
(*state)->window_name, DEFAULT_WINDOW_NAME,
|
(*state)->window_name, window_name,
|
||||||
WINDOW_NAME_LENGTH
|
WINDOW_NAME_MAX_LENGTH - 1
|
||||||
);
|
);
|
||||||
|
(*state)->window_name[WINDOW_NAME_MAX_LENGTH - 1] = '\0';
|
||||||
|
|
||||||
return RCODE_SUCCESS;
|
return RCODE_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -94,11 +101,19 @@ engine_sdl_init_texture(
|
|||||||
}
|
}
|
||||||
|
|
||||||
engine_sdl_state_t*
|
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;
|
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_root() ||
|
||||||
!engine_sdl_init_window(state) ||
|
!engine_sdl_init_window(state) ||
|
||||||
!engine_sdl_init_renderer(state) ||
|
!engine_sdl_init_renderer(state) ||
|
||||||
@@ -127,6 +142,9 @@ engine_sdl_destroy(
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
engine_init(
|
engine_init(
|
||||||
|
uint32_t window_width,
|
||||||
|
uint32_t window_height,
|
||||||
|
const char window_name[],
|
||||||
void (*engine_poll_events)(void),
|
void (*engine_poll_events)(void),
|
||||||
void (*engine_update_framebuffer)(void)
|
void (*engine_update_framebuffer)(void)
|
||||||
) {
|
) {
|
||||||
@@ -143,15 +161,28 @@ engine_init(
|
|||||||
return RCODE_FAILURE;
|
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
|
internal_state->engine_poll_events
|
||||||
= engine_poll_events;
|
= engine_poll_events;
|
||||||
|
|
||||||
internal_state->engine_update_framebuffer
|
internal_state->engine_update_framebuffer
|
||||||
= 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) {
|
if (internal_state->sdl_state == NULL) {
|
||||||
free(internal_state);
|
free(internal_state);
|
||||||
|
free(game_state->framebuffer);
|
||||||
free(game_state);
|
free(game_state);
|
||||||
return RCODE_FAILURE;
|
return RCODE_FAILURE;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user