summaryrefslogtreecommitdiff
path: root/src/3d/renderer.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-02 13:12:01 +0100
committerskal <pascal.massimino@gmail.com>2026-02-02 13:12:01 +0100
commitd1d87447ae44d85b15e748c5b1cc8ccd310f8740 (patch)
tree215852cc15df71129b66f0d5c36ccf46930c8df7 /src/3d/renderer.cc
parente0a92d8c7b5dea290155dd17784686fc9e95a029 (diff)
feat(3d): Add scaffolding for visual debugging (Task #18a)
- Added 'src/3d/visual_debug.h/cc' to implement wireframe rendering. - Integrated VisualDebug into Renderer3D with a static global toggle. - Added '--debug' command-line option to 'demo64k' and 'test_3d_render' to enable wireframes. - Updated 'src/gpu/effects/hybrid_3d_effect.h' to expose the debug setter (reverted later as static method used). - Ensured full cross-platform compatibility (native and Windows) for the new debug module. - All code guarded by STRIP_ALL for final release.
Diffstat (limited to 'src/3d/renderer.cc')
-rw-r--r--src/3d/renderer.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/3d/renderer.cc b/src/3d/renderer.cc
index db9d73d..adc9a5f 100644
--- a/src/3d/renderer.cc
+++ b/src/3d/renderer.cc
@@ -7,6 +7,10 @@
#include <cstring>
#include <iostream>
+#if !defined(STRIP_ALL)
+bool Renderer3D::s_debug_enabled_ = false;
+#endif
+
static const char* kShaderCode = R"(
struct GlobalUniforms {
view_proj: mat4x4<f32>,
@@ -242,9 +246,17 @@ void Renderer3D::init(WGPUDevice device, WGPUQueue queue,
create_default_resources();
create_pipeline();
+
+#if !defined(STRIP_ALL)
+ visual_debug_.init(device_, format_);
+#endif
}
void Renderer3D::shutdown() {
+#if !defined(STRIP_ALL)
+ visual_debug_.shutdown();
+#endif
+
if (default_sampler_)
wgpuSamplerRelease(default_sampler_);
if (pipeline_)
@@ -482,6 +494,19 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
if (instance_count > 0) {
wgpuRenderPassEncoderDraw(pass, 36, instance_count, 0, 0);
}
+
+#if !defined(STRIP_ALL)
+ if (s_debug_enabled_) {
+ for (const auto& obj : scene.objects) {
+ // Simple AABB approximation from scale
+ visual_debug_.add_box(obj.position, obj.scale, vec3(1.0f, 1.0f, 0.0f)); // Yellow boxes
+ }
+
+ // Calculate ViewProj matrix for the debug renderer
+ mat4 view_proj = camera.get_projection_matrix() * camera.get_view_matrix();
+ visual_debug_.render(pass, view_proj);
+ }
+#endif
}
void Renderer3D::render(const Scene& scene, const Camera& camera, float time,