summaryrefslogtreecommitdiff
path: root/src/3d/renderer_draw.cc
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-03-29 01:50:47 +0100
committerskal <pascal.massimino@gmail.com>2026-03-29 01:50:47 +0100
commita178de4e8680051925af9454b140343bf7eae214 (patch)
treee7c8cf472fb2ebe49ab015b2e3aecf61d2c3c6d6 /src/3d/renderer_draw.cc
parent70b77307a9a9ee4fdff23f783e041fe49e60e100 (diff)
fix(3d): restore correct orientation in test_3d_render (direct-to-surface)
Add Renderer3D::set_direct_render(bool) flag (must be set before init()). When true, uses standard CCW winding and un-negates perspective Y, restoring the pre-ba7ea27 orientation for direct-to-surface rendering where the post-process Y-flip is absent. handoff(Gemini): set_direct_render() is the escape hatch for any future renderer usage that bypasses the post-process chain.
Diffstat (limited to 'src/3d/renderer_draw.cc')
-rw-r--r--src/3d/renderer_draw.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/3d/renderer_draw.cc b/src/3d/renderer_draw.cc
index d4a35a8..dca7113 100644
--- a/src/3d/renderer_draw.cc
+++ b/src/3d/renderer_draw.cc
@@ -9,7 +9,9 @@
void Renderer3D::update_uniforms(const Scene& scene, const Camera& camera,
float time) {
- const mat4 vp = camera.get_projection_matrix() * camera.get_view_matrix();
+ mat4 proj = camera.get_projection_matrix();
+ 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),
@@ -203,8 +205,9 @@ void Renderer3D::draw(WGPURenderPassEncoder pass, const Scene& scene,
}
}
- // Calculate ViewProj matrix for the debug renderer
- mat4 view_proj = camera.get_projection_matrix() * camera.get_view_matrix();
+ mat4 dbg_proj = camera.get_projection_matrix();
+ 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);
}
#endif