diff options
| author | skal <pascal.massimino@gmail.com> | 2026-05-21 08:10:47 +0200 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-05-21 08:10:47 +0200 |
| commit | d806027dcaeadcdd8d2febd88bc46b2fd2c465de (patch) | |
| tree | 30bc1ef9f40ccab7c00e31ee20e62bb86755fa26 /src/3d/renderer_draw.cc | |
| parent | 680042a18c11ad5e58757e45b260745c2f52417f (diff) | |
Diffstat (limited to 'src/3d/renderer_draw.cc')
| -rw-r--r-- | src/3d/renderer_draw.cc | 138 |
1 files changed, 76 insertions, 62 deletions
diff --git a/src/3d/renderer_draw.cc b/src/3d/renderer_draw.cc index 929f261..bd7e994 100644 --- a/src/3d/renderer_draw.cc +++ b/src/3d/renderer_draw.cc @@ -10,11 +10,11 @@ void Renderer3D::update_uniforms(const Scene& scene, const Camera& camera, float time) { mat4 proj = camera.get_projection_matrix(); - if (direct_render_) proj.m[5] = -proj.m[5]; // undo Y-negate for direct surface + if (direct_render_) + proj.m[5] = -proj.m[5]; // undo Y-negate for direct surface const mat4 vp = proj * camera.get_view_matrix(); const GlobalUniforms globals = GlobalUniforms::make( - vp, - vec4(camera.position.x, camera.position.y, camera.position.z, time), + vp, vec4(camera.position.x, camera.position.y, camera.position.z, time), vec4((float)std::min((size_t)kMaxObjects, scene.objects.size()), 0.0f, 0.0f, 0.0f), vec2((float)width_, (float)height_)); @@ -26,13 +26,25 @@ void Renderer3D::update_uniforms(const Scene& scene, const Camera& camera, for (const auto& obj : scene.objects) { float type_id = 0.0f; switch (obj.type) { - case ObjectType::SPHERE: type_id = 1.0f; break; - case ObjectType::CUBE: // fallthrough (legacy alias for BOX) - case ObjectType::BOX: type_id = 2.0f; break; - case ObjectType::TORUS: type_id = 3.0f; break; - case ObjectType::PLANE: type_id = 4.0f; break; - case ObjectType::MESH: type_id = 5.0f; break; - default: type_id = 0.0f; break; + case ObjectType::SPHERE: + type_id = 1.0f; + break; + case ObjectType::CUBE: // fallthrough (legacy alias for BOX) + case ObjectType::BOX: + type_id = 2.0f; + break; + case ObjectType::TORUS: + type_id = 3.0f; + break; + case ObjectType::PLANE: + type_id = 4.0f; + break; + case ObjectType::MESH: + type_id = 5.0f; + break; + default: + type_id = 0.0f; + break; } float plane_distance = 0.0f; @@ -69,68 +81,69 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene, } else { bind_group_dirty_ = false; - if (bind_group_) - wgpuBindGroupRelease(bind_group_); + if (bind_group_) + wgpuBindGroupRelease(bind_group_); - std::vector<WGPUBindGroupEntry> bg_entries; + std::vector<WGPUBindGroupEntry> bg_entries; - { - WGPUBindGroupEntry e = {}; - e.binding = 0; - e.buffer = global_uniform_buffer_; - e.size = sizeof(GlobalUniforms); - bg_entries.push_back(e); - } + { + WGPUBindGroupEntry e = {}; + e.binding = 0; + e.buffer = global_uniform_buffer_; + e.size = sizeof(GlobalUniforms); + bg_entries.push_back(e); + } - { - WGPUBindGroupEntry e = {}; - e.binding = 1; - e.buffer = object_storage_buffer_; - e.size = sizeof(ObjectData) * kMaxObjects; - bg_entries.push_back(e); - } + { + WGPUBindGroupEntry e = {}; + e.binding = 1; + e.buffer = object_storage_buffer_; + e.size = sizeof(ObjectData) * kMaxObjects; + bg_entries.push_back(e); + } - if (bvh_enabled_) { - WGPUBindGroupEntry e = {}; - e.binding = 2; - e.buffer = bvh_storage_buffer_; - e.size = sizeof(BVHNode) * kMaxObjects * 2; - bg_entries.push_back(e); - } + if (bvh_enabled_) { + WGPUBindGroupEntry e = {}; + e.binding = 2; + e.buffer = bvh_storage_buffer_; + e.size = sizeof(BVHNode) * kMaxObjects * 2; + bg_entries.push_back(e); + } - { - WGPUBindGroupEntry e = {}; - e.binding = 3; - e.textureView = noise_texture_view_; - bg_entries.push_back(e); - } + { + WGPUBindGroupEntry e = {}; + e.binding = 3; + e.textureView = noise_texture_view_; + bg_entries.push_back(e); + } - { - WGPUBindGroupEntry e = {}; - e.binding = 4; - e.sampler = default_sampler_; - bg_entries.push_back(e); - } + { + WGPUBindGroupEntry e = {}; + e.binding = 4; + e.sampler = default_sampler_; + bg_entries.push_back(e); + } - { - WGPUBindGroupEntry e = {}; - e.binding = 5; - e.textureView = sky_texture_view_ ? sky_texture_view_ : noise_texture_view_; - bg_entries.push_back(e); - } + { + WGPUBindGroupEntry e = {}; + e.binding = 5; + e.textureView = + sky_texture_view_ ? sky_texture_view_ : noise_texture_view_; + bg_entries.push_back(e); + } - WGPURenderPipeline cp = bvh_enabled_ ? pipeline_ : pipeline_no_bvh_; - WGPUBindGroupLayout current_layout = - wgpuRenderPipelineGetBindGroupLayout(cp, 0); + WGPURenderPipeline cp = bvh_enabled_ ? pipeline_ : pipeline_no_bvh_; + WGPUBindGroupLayout current_layout = + wgpuRenderPipelineGetBindGroupLayout(cp, 0); - WGPUBindGroupDescriptor bg_desc = {}; - bg_desc.layout = current_layout; - bg_desc.entryCount = (uint32_t)bg_entries.size(); - bg_desc.entries = bg_entries.data(); + WGPUBindGroupDescriptor bg_desc = {}; + bg_desc.layout = current_layout; + bg_desc.entryCount = (uint32_t)bg_entries.size(); + bg_desc.entries = bg_entries.data(); - bind_group_ = wgpuDeviceCreateBindGroup(device_, &bg_desc); + bind_group_ = wgpuDeviceCreateBindGroup(device_, &bg_desc); - wgpuBindGroupLayoutRelease(current_layout); + wgpuBindGroupLayoutRelease(current_layout); } // end dirty block WGPURenderPipeline current_pipeline = @@ -208,7 +221,8 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene, } mat4 dbg_proj = camera.get_projection_matrix(); - if (direct_render_) dbg_proj.m[5] = -dbg_proj.m[5]; + if (direct_render_) + dbg_proj.m[5] = -dbg_proj.m[5]; mat4 view_proj = dbg_proj * camera.get_view_matrix(); visual_debug_.render(pass, view_proj); } |
