From d1d87447ae44d85b15e748c5b1cc8ccd310f8740 Mon Sep 17 00:00:00 2001 From: skal Date: Mon, 2 Feb 2026 13:12:01 +0100 Subject: 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. --- src/3d/renderer.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/3d/renderer.cc') 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 #include +#if !defined(STRIP_ALL) +bool Renderer3D::s_debug_enabled_ = false; +#endif + static const char* kShaderCode = R"( struct GlobalUniforms { view_proj: mat4x4, @@ -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, -- cgit v1.2.3