diff options
Diffstat (limited to 'src/window.c')
| -rw-r--r-- | src/window.c | 27 |
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); +} |
