This commit is contained in:
luboslenco
2025-09-28 20:04:15 +02:00
parent 6b3222e30a
commit f297468fa8
6 changed files with 71 additions and 71 deletions
+48
View File
@@ -364,3 +364,51 @@ int gpu_texture_format_size(gpu_texture_format_t format) {
return 4;
}
}
static gpu_buffer_t rt_constant_buffer;
static gpu_raytrace_pipeline_t rt_pipeline;
static gpu_raytrace_acceleration_structure_t rt_accel;
static bool rt_created = false;
static bool rt_accel_created = false;
static const int rt_constant_buffer_size = 24;
void _gpu_raytrace_init(buffer_t *shader) {
if (rt_created) {
gpu_buffer_destroy(&rt_constant_buffer);
gpu_raytrace_pipeline_destroy(&rt_pipeline);
}
rt_created = true;
gpu_constant_buffer_init(&rt_constant_buffer, rt_constant_buffer_size * 4);
gpu_raytrace_pipeline_init(&rt_pipeline, shader->buffer, (int)shader->length, &rt_constant_buffer);
}
void _gpu_raytrace_as_init() {
if (rt_accel_created) {
gpu_raytrace_acceleration_structure_destroy(&rt_accel);
}
rt_accel_created = true;
gpu_raytrace_acceleration_structure_init(&rt_accel);
}
void _gpu_raytrace_as_add(struct gpu_buffer *vb, gpu_buffer_t *ib, iron_matrix4x4_t transform) {
gpu_raytrace_acceleration_structure_add(&rt_accel, vb, ib, transform);
}
void _gpu_raytrace_as_build(struct gpu_buffer *vb_full, gpu_buffer_t *ib_full) {
gpu_raytrace_acceleration_structure_build(&rt_accel, vb_full, ib_full);
}
void _gpu_raytrace_dispatch_rays(gpu_texture_t *render_target, buffer_t *buffer) {
float *cb = (float *)buffer->buffer;
gpu_constant_buffer_lock(&rt_constant_buffer, 0, rt_constant_buffer.count);
for (int i = 0; i < rt_constant_buffer_size; ++i) {
float *floats = (float *)(&rt_constant_buffer.data[i * 4]);
floats[0] = cb[i];
}
gpu_constant_buffer_unlock(&rt_constant_buffer);
gpu_raytrace_set_acceleration_structure(&rt_accel);
gpu_raytrace_set_pipeline(&rt_pipeline);
gpu_raytrace_set_target(render_target);
gpu_raytrace_dispatch_rays();
}