summaryrefslogtreecommitdiff
path: root/src/effects/rotating_cube_effect.h
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-03-08 10:38:19 +0100
committerskal <pascal.massimino@gmail.com>2026-03-08 10:38:19 +0100
commit21b061b951ec3a65bc479fabeb2d9565e08a807e (patch)
tree24755d905463c8a507a34624ab3edf7295c8e0c5 /src/effects/rotating_cube_effect.h
parent5f64a20daa81a6182d4898dcd6f86870ad0bf9d5 (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/effects/rotating_cube_effect.h')
-rw-r--r--src/effects/rotating_cube_effect.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/effects/rotating_cube_effect.h b/src/effects/rotating_cube_effect.h
index e773025..920be5c 100644
--- a/src/effects/rotating_cube_effect.h
+++ b/src/effects/rotating_cube_effect.h
@@ -28,6 +28,14 @@ class RotatingCube : public Effect {
vec2 resolution;
float aspect_ratio;
float _pad;
+
+ // Transpose matrices: mini_math is row-major, WGSL expects column-major.
+ static Uniforms make(const mat4& vp, const vec4& cam_pos_time,
+ const vec4& p, const vec2& res, float asp) {
+ return {mat4::transpose(vp), mat4::transpose(vp.inverse()),
+ cam_pos_time, p,
+ res, asp};
+ }
};
static_assert(sizeof(Uniforms) == 176, "Uniforms size mismatch");