diff --git a/include/cglm-affine.h b/include/cglm-affine.h index 5befb8a..0b7f7b9 100644 --- a/include/cglm-affine.h +++ b/include/cglm-affine.h @@ -74,25 +74,23 @@ glm_translate_z(mat4 m, float to) { CGLM_INLINE void glm_scale_to(mat4 m, vec3 v, mat4 dest) { - dest[0][0] = m[0][0] * v[0]; - dest[1][1] = m[1][1] * v[1]; - dest[2][2] = m[2][2] * v[2]; + glm_vec_scale(m[0], v[0], dest[0]); + glm_vec_scale(m[1], v[1], dest[1]); + glm_vec_scale(m[2], v[2], dest[2]); + + glm_vec_dup(m[3], dest[3]); } CGLM_INLINE void glm_scale(mat4 m, vec3 v) { - m[0][0] *= v[0]; - m[1][1] *= v[1]; - m[2][2] *= v[2]; + glm_scale_to(m, v, m); } CGLM_INLINE void glm_scale1(mat4 m, float s) { - m[0][0] *= s; - m[1][1] *= s; - m[2][2] *= s; + glm_scale_to(m, (vec3){s, s, s}, m); } CGLM_INLINE diff --git a/include/cglm-vec.h b/include/cglm-vec.h index 95e86a1..1cc838e 100644 --- a/include/cglm-vec.h +++ b/include/cglm-vec.h @@ -10,6 +10,23 @@ #include "cglm.h" +CGLM_INLINE +void +glm_vec_dup(vec3 a, vec3 dest) { + dest[0] = a[0]; + dest[1] = a[1]; + dest[2] = a[2]; +} + +CGLM_INLINE +void +glm_vec_dup4(vec4 a, vec4 dest) { + dest[0] = a[0]; + dest[1] = a[1]; + dest[2] = a[2]; + dest[3] = a[3]; +} + CGLM_INLINE float glm_vec_dot(vec3 a, vec3 b) {