summaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-12-03 21:21:54 +0000
committeronelin <oscar@nelin.dk>2025-12-18 21:14:18 +0000
commiteb06c9d49fddd6ffd5725bf8a33c2eab8cfd94c7 (patch)
tree3889668b09aecf35473ccfb18409f3072f1beb5f /src/window.c
parent841c0da02c6d042578f45ed46f443852f8aa3148 (diff)
Add support for depth & stencil buffers
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/src/window.c b/src/window.c
index 7e7bfb2..36c1612 100644
--- a/src/window.c
+++ b/src/window.c
@@ -166,19 +166,43 @@ void window_init_renderstack(Window *restrict w,
// 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_offset + buffer_idx]) == BufferType_texture);
+
+ // Count textures & renderbuffers
+ u32 num_textures = 0;
+ u32 num_renderbuffers = 0;
+ for (i32 i = 0; i < t->framebuffer_parameters[fb_idx].num_attached_buffers; i++) {
+ switch (BUFFERPARAMETER_GET_TYPE(t->buffer_parameters[buffer_offset + i])) {
+ case BufferType_frame:
+ UNIMPLEMENTED;
+ case BufferType_texture:
+ num_textures++;
+ break;
+ case BufferType_render:
+ num_renderbuffers++;
+ break;
+ case BufferType_buffer:
+ UNIMPLEMENTED;
+ default:
+ UNIMPLEMENTED;
+ }
}
// 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);
+ num_textures);
+
+ r_create_renderbuffers(w->context, &t->buffer[buffer_offset + num_textures],
+ &t->buffer_parameters[buffer_offset + num_textures],
+ &t->framebuffer_parameters[fb_idx].dimensions,
+ num_renderbuffers);
- 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);
+ 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]);