summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-12-17 13:39:35 +0000
committeronelin <oscar@nelin.dk>2025-12-18 21:14:22 +0000
commit1901282ae8899cb290e7216829407b8938327279 (patch)
tree19e6ec5c2abbd72087e8f7a8c3cc51e68ffa0ffb
parentbb521d304aee0bb990ad92dd8cf5251a4eb1f0fa (diff)
Add state to resize callback
-rw-r--r--src/daw.c6
-rw-r--r--src/include/daw/rendering.h4
-rw-r--r--src/include/daw/window.h2
-rw-r--r--src/window.c4
4 files changed, 9 insertions, 7 deletions
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;