From 1901282ae8899cb290e7216829407b8938327279 Mon Sep 17 00:00:00 2001 From: onelin Date: Wed, 17 Dec 2025 14:39:35 +0100 Subject: Add state to resize callback --- src/daw.c | 6 ++++-- src/include/daw/rendering.h | 4 ++-- src/include/daw/window.h | 2 +- src/window.c | 4 ++-- 4 files changed, 9 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/daw.c b/src/daw.c index 56577b9..25091c5 100644 --- a/src/daw.c +++ b/src/daw.c @@ -208,10 +208,11 @@ static const char* default_quad_shader_fragment_src = void framebuffer_size_callback_default(ivec3* dst,ivec2 src) { + DEBUG("RESIZING FRAMEBUFFER TO %d x %d :))", src[0], src[1]); glm_ivec2_copy(src, *dst); } -void camera_reset_callback_default(Camera* dst, ivec2 src) { +void camera_reset_callback_default(Camera* dst, void* state, ivec2 src) { *dst = (Camera)DEFAULT_CAMERA; glm_ortho_default(45.f, dst->per); } @@ -365,9 +366,10 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { }; window_init_renderstack(w, 1, sizeof(t) / sizeof(t[0]), p, t); + // TODO set if null ..? w->render_targets->framebuffer_size_callback[0] = &framebuffer_size_callback_default; w->render_targets->camera_reset_callback[0] = &camera_reset_callback_default; - camera_reset_callback_default(&default_camera, wsz); + camera_reset_callback_default(&default_camera, (void*)(mem->data), wsz); w->render_targets->cam[0] = &default_camera; } diff --git a/src/include/daw/rendering.h b/src/include/daw/rendering.h index 70b1566..321cfd0 100644 --- a/src/include/daw/rendering.h +++ b/src/include/daw/rendering.h @@ -311,7 +311,7 @@ typedef struct { // NULL to skip changing framebuffer_size. Comparable to glViewport. // This function can be heavy due to it destroying and re-creating buffers, // textures and framebuffers. - void (**framebuffer_size_callback)(ivec3* dst,ivec2 src); + void (**framebuffer_size_callback)(ivec3* dst, ivec2 src); // Called when window is resized. Calls the respective framebuffer_size_callback function at // the same index if not null. The camera resize callback function is then @@ -319,7 +319,7 @@ typedef struct { // framebuffer_size_callback is not null, otherwise called with // the new window size. // Set to NULL to skip changing the camera size/perspective. - void (**camera_reset_callback)(Camera*,ivec2 src); + void (**camera_reset_callback)(Camera*, void *state, ivec2 src); // glTexture and glRenderBuffer // Currently, each buffer must be either a texture or a (depth and/or stencil) diff --git a/src/include/daw/window.h b/src/include/daw/window.h index b86ee60..3a4d1b0 100644 --- a/src/include/daw/window.h +++ b/src/include/daw/window.h @@ -112,7 +112,7 @@ void window_init_renderstack(Window *restrict w, void get_mousepos(double *x, double *y); void window_get_size(ivec2* dst); -void window_reset_cameras(Window* w, RenderTargets* restrict targets); +void window_reset_cameras(Window* w, void* state, RenderTargets* restrict targets); #ifdef __cplusplus } diff --git a/src/window.c b/src/window.c index 142e8bd..e9ec62c 100644 --- a/src/window.c +++ b/src/window.c @@ -68,7 +68,7 @@ Window* Window_new(const struct Platform* p, const char *restrict title, Window_ } -void window_reset_cameras(Window* w, RenderTargets* restrict targets) { +void window_reset_cameras(Window* w, void* state, RenderTargets* restrict targets) { usize b_ofst = 0; for (usize i = 0; i < targets->framebuffer_len; i++) { ivec3 newsz; @@ -114,7 +114,7 @@ void window_reset_cameras(Window* w, RenderTargets* restrict targets) { // Reset camera using callback (if any) if (targets->camera_reset_callback[i] != NULL) { - targets->camera_reset_callback[i](targets->cam[i], newsz); + targets->camera_reset_callback[i](targets->cam[i], state, newsz); } b_ofst += num_textures + num_renderbuffers; -- cgit v1.3