diff options
| author | onelin <oscar@nelin.dk> | 2025-12-03 21:21:54 +0000 |
|---|---|---|
| committer | onelin <oscar@nelin.dk> | 2025-12-18 21:14:18 +0000 |
| commit | eb06c9d49fddd6ffd5725bf8a33c2eab8cfd94c7 (patch) | |
| tree | 3889668b09aecf35473ccfb18409f3072f1beb5f /src/window.c | |
| parent | 841c0da02c6d042578f45ed46f443852f8aa3148 (diff) | |
Add support for depth & stencil buffers
Diffstat (limited to 'src/window.c')
| -rw-r--r-- | src/window.c | 36 |
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]); |
