From 602b487b53026a22d57d93c5b08d45e13ae912fc Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Wed, 14 Sep 2016 12:32:03 +0300 Subject: [PATCH] mat4 non-simd determinant --- include/cglm-mat.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/include/cglm-mat.h b/include/cglm-mat.h index 81ce791..d6d890a 100644 --- a/include/cglm-mat.h +++ b/include/cglm-mat.h @@ -124,4 +124,36 @@ glm_mat_transpose_self(mat4 m) { #endif } +CGLM_INLINE +float +glm_mat4_det(mat4 mat) { + float a, b, c, d, + e, f, g, h, + i, j, k, l, + m, n, o, p + ; + + float kp_ol, jp_nl, jo_nk, + jp_ml, io_mk, in_mj; + + a = mat[0][0], b = mat[1][0], c = mat[2][0], d = mat[3][0], + e = mat[0][1], f = mat[1][1], g = mat[2][1], h = mat[3][1], + i = mat[0][2], j = mat[1][2], k = mat[2][2], l = mat[3][2], + m = mat[0][3], n = mat[1][3], o = mat[2][3], p = mat[3][3] + ; + + kp_ol = k * p - o * l; + jp_nl = j * p - n * l; + jo_nk = j * o - n * k; + jp_ml = i * p - m * l; + io_mk = i * o - m * k; + in_mj = i * n - m * j; + + return a * (f * kp_ol - g * jp_nl + h * jo_nk) + - b * (e * kp_ol - g * jp_ml + h * io_mk) + + c * (e * jp_nl - f * jp_ml + h * in_mj) + - d * (e * jo_nk - f * io_mk + g * in_mj) + ; +} + #endif /* cglm_mat_h */