update mat4 and mat4 mul

because m1 and m2 could be same matrix e.g dest = m1*m1
This commit is contained in:
Recep Aslantas
2016-09-11 13:07:39 +03:00
parent 6c6418d19a
commit f708240ad3
2 changed files with 25 additions and 9 deletions

View File

@@ -33,14 +33,30 @@
CGLM_INLINE
void
glm_mat_mul4(float * __restrict m1,
float * __restrict m2,
float * __restrict dest) {
glm_mat_mul4(mat4 m1, mat4 m2, mat4 dest) {
float * __restrict d;
float * __restrict l;
d = (float *)dest;
l = (float *)m1;
if (m1 != m2) {
float * __restrict r;
r = (float *)m2;
#if defined( __SSE__ ) || defined( __SSE2__ )
CGLM_MAT_MUL_SSE_4x4f(m1, m2, dest);
CGLM_MAT_MUL_SSE_4x4f(l, r, d);
#else
glm_mat_mul4_impl(m1, m2, dest);
glm_mat_mul4_impl(l, r, d);
#endif
} else {
#if defined( __SSE__ ) || defined( __SSE2__ )
CGLM_MAT_MUL_SSE_4x4f(l, l, d);
#else
glm_mat_mul4_impl(l, l, d);
#endif
}
}
#endif /* cglm_mat_h */

View File

@@ -14,13 +14,13 @@ typedef float vec3[3];
typedef float vec4[4];
typedef float mat3[3];
typedef float mat4[16];
typedef vec4 mat4[4];
CGLM_INLINE
void
glm_mat_mul4(float * __restrict m1,
float * __restrict m2,
float * __restrict dest);
glm_mat_mul4(mat4 m1,
mat4 m2,
mat4 dest);
#include "cglm-vec.h"
#include "cglm-mat.h"