summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-11-29 22:04:52 +0000
committeronelin <oscar@nelin.dk>2025-12-18 21:14:16 +0000
commit07116cd28845c3e589ab7e99f32d0ab96dd5cf4d (patch)
tree0382594d2d58376daa527aaa131d81d8273834a5 /src/window.c
parentc2335eab1db200481c3e81664f27f9244579397c (diff)
TMP Rework rendering
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/window.c b/src/window.c
index 9702a7f..72717ab 100644
--- a/src/window.c
+++ b/src/window.c
@@ -78,7 +78,7 @@ void window_reset_cameras(Window* w, RenderTargets* restrict targets) {
// Destroy & Create framebuffers (and related buffers?)
if (targets->camera_reset_callback[i] == NULL) continue;
- (*targets->camera_reset_callback)(&targets->cam[i], w->windowsize);
+ targets->camera_reset_callback[i](targets->cam[i], w->windowsize);
}
}
@@ -130,10 +130,11 @@ void window_init_renderstack(Window *restrict w,
void* allocation = malloc(
sizeof(RenderTargets) +
sizeof(*t->framebuffer) * num_fbuf +
- sizeof(*t->buffer) * num_buf +
sizeof(*t->framebuffer_parameters) * num_fbuf +
- sizeof(*t->buffer_parameters) * num_buf +
- sizeof(*t->cam) * num_fbuf
+ sizeof(*t->cam) * num_fbuf +
+ sizeof(*t->camera_reset_callback) * num_fbuf +
+ sizeof(*t->buffer) * num_buf +
+ sizeof(*t->buffer_parameters) * num_buf
// TODO: callbacks
);
@@ -148,28 +149,36 @@ void window_init_renderstack(Window *restrict w,
u64 acc = sizeof(RenderTargets);
ADVANCE_PTR(framebuffer, num_fbuf);
- ADVANCE_PTR(buffer, num_buf);
ADVANCE_PTR(framebuffer_parameters, num_fbuf);
- ADVANCE_PTR(buffer_parameters, num_buf);
ADVANCE_PTR(cam, num_fbuf);
+ ADVANCE_PTR(camera_reset_callback, num_fbuf);
+ ADVANCE_PTR(buffer, num_buf);
+ ADVANCE_PTR(buffer_parameters, num_buf);
// TODO: callbacks
#undef ADVANCE_PTR
memcpy(t->framebuffer_parameters, fb_params, sizeof(*t->framebuffer_parameters) * num_fbuf);
memcpy(t->buffer_parameters, buffer_params, sizeof(*t->buffer_parameters) * num_buf);
+ r_create_framebuffers(w->context, &t->framebuffer[0], num_fbuf);
+
// Iteratively set up each framebuffer and framebuffer-attached objects
usize buffer_offset = 0;
for (usize fb_idx = 0; fb_idx < num_fbuf; fb_idx++) {
FramebufferParameters *p = &t->framebuffer_parameters[fb_idx];
// Check everything is a texture, cuz rn. we don't support anything else
for (isize buffer_idx = 0; buffer_idx < p->num_attached_buffers; buffer_idx++) {
- ASSERT(BUFFERPARAMETER_GET_TYPE(t->buffer_parameters[buffer_idx + buffer_offset]) == BufferType_texture);
+ ASSERT(BUFFERPARAMETER_GET_TYPE(t->buffer_parameters[buffer_offset + buffer_idx]) == BufferType_texture);
}
+
+ // Create `num_attached_buffers` identical buffers
r_create_textures(w->context, &t->buffer[buffer_offset],
&t->buffer_parameters[buffer_offset],
&t->framebuffer_parameters[fb_idx].dimensions,
t->framebuffer_parameters[fb_idx].num_attached_buffers);
+
+ r_attach_buffers(w->context, t->framebuffer[fb_idx], &t->buffer[buffer_offset], &t->buffer_parameters[buffer_offset], t->framebuffer_parameters[fb_idx].num_attached_buffers);
+
//if (BUFFERPARAMETER_GET_TYPE(buffer_params[i]) != BufferType_texture) continue;
//u32 texture_type = BUFFERPARAMETER_GET_PARAMETER(buffer_params[i]);
@@ -195,3 +204,7 @@ void window_free_renderstack(RenderTargets *restrict t) {
// Everything is in the same buffer anyways
free(t->framebuffer);
}
+
+void draw_model(Window *restrict w, u32 framebuffer_idx, RenderObject* o, vec4 pos) {
+ r_draw_model(w->context, w->render_targets, framebuffer_idx, o, pos);
+}