diff options
| author | skal <pascal.massimino@gmail.com> | 2026-03-08 10:38:19 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-03-08 10:38:19 +0100 |
| commit | 21b061b951ec3a65bc479fabeb2d9565e08a807e (patch) | |
| tree | 24755d905463c8a507a34624ab3edf7295c8e0c5 /src/3d/renderer.h | |
| parent | 5f64a20daa81a6182d4898dcd6f86870ad0bf9d5 (diff) | |
fix: transpose matrices on GPU upload (row-major → column-major)
mini_math mat4 is row-major; WGSL mat4x4f is column-major. Matrices
uploaded without transposing were interpreted as their own transpose on
the GPU, causing RotatingCube and Renderer3D to render upside-down.
- Add gpu_upload_mat4() to post_process_helper for standalone uploads
- Add Uniforms::make() to RotatingCube::Uniforms (handles transpose)
- Add GlobalUniforms::make() and ObjectData::make() to renderer.h
- Update renderer_draw.cc and visual_debug.cc to use make()
handoff(Gemini): matrix layout bug fixed across all rasterized effects.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/3d/renderer.h')
| -rw-r--r-- | src/3d/renderer.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/3d/renderer.h b/src/3d/renderer.h index bf3b497..4c31c97 100644 --- a/src/3d/renderer.h +++ b/src/3d/renderer.h @@ -23,6 +23,14 @@ struct GlobalUniforms { vec4 params; // x = num_objects, yzw = padding vec2 resolution; vec2 padding; + + // Transpose matrices: mini_math is row-major, WGSL expects column-major. + static GlobalUniforms make(const mat4& vp, const vec4& cam_pos_time, + const vec4& p, const vec2& res) { + return {mat4::transpose(vp), mat4::transpose(vp.inverse()), + cam_pos_time, p, + res, vec2(0.0f, 0.0f)}; + } }; // Matches the GPU struct layout @@ -33,6 +41,11 @@ struct ObjectData { // params.x = object type (as float), params.y = plane_distance (if // applicable) vec4 params; + + // Transpose matrices: mini_math is row-major, WGSL expects column-major. + static ObjectData make(const mat4& m, const vec4& col, const vec4& p) { + return {mat4::transpose(m), mat4::transpose(m.inverse()), col, p}; + } }; class Renderer3D { |
