From 090f940f502c9ef0e9309e5f015629334a0120d8 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sat, 20 Jan 2018 18:38:26 +0300 Subject: [PATCH 01/56] swizzle support --- include/cglm/common.h | 3 +++ include/cglm/vec3.h | 27 +++++++++++++++++++++++++++ include/cglm/vec4.h | 29 +++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/include/cglm/common.h b/include/cglm/common.h index f0eb965..84a09b6 100644 --- a/include/cglm/common.h +++ b/include/cglm/common.h @@ -54,6 +54,9 @@ #define glm__memzero(type, dest, size) glm__memset(type, dest, size, 0) +#define GLM_SHUFFLE4(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w)) +#define GLM_SHUFFLE3(z, y, x) (((z) << 4) | ((y) << 2) | (x)) + #include "types.h" #include "simd/intrin.h" diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index ebcedcf..e5559e1 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -44,6 +44,7 @@ CGLM_INLINE void glm_vec_maxv(vec3 v1, vec3 v2, vec3 dest); CGLM_INLINE void glm_vec_minv(vec3 v1, vec3 v2, vec3 dest); CGLM_INLINE void glm_vec_ortho(vec3 v, vec3 dest); + CGLM_INLINE void glm_vec_swizzle(vec3 v, int mask, vec3 dest); Convenient: CGLM_INLINE void glm_cross(vec3 a, vec3 b, vec3 d); @@ -69,6 +70,11 @@ #define GLM_ZUP (vec3){0.0f, 0.0f, 1.0f} #define GLM_XUP (vec3){1.0f, 0.0f, 0.0f} +#define GLM_XXX GLM_SHUFFLE3(0, 0, 0) +#define GLM_YYY GLM_SHUFFLE3(1, 1, 1) +#define GLM_ZZZ GLM_SHUFFLE3(2, 2, 2) +#define GLM_ZYX GLM_SHUFFLE3(0, 1, 2) + /*! * @brief init vec3 using vec4 * @@ -528,4 +534,25 @@ glm_normalize_to(vec3 v, vec3 dest) { glm_vec_normalize_to(v, dest); } +/*! + * @brief swizzle vector components + * + * you can use existin masks e.g. GLM_XXX, GLM_ZYX + * + * @param[in] v source + * @param[in] mask mask + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_vec_swizzle(vec3 v, int mask, vec3 dest) { + vec3 t; + + t[0] = v[(mask & (3 << 0))]; + t[1] = v[(mask & (3 << 2)) >> 2]; + t[2] = v[(mask & (3 << 4)) >> 4]; + + glm_vec_copy(t, dest); +} + #endif /* cglm_vec3_h */ diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index e76bfac..a92758a 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -38,6 +38,7 @@ CGLM_INLINE float glm_vec4_distance(vec4 v1, vec4 v2); CGLM_INLINE void glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest); CGLM_INLINE void glm_vec4_minv(vec4 v1, vec4 v2, vec4 dest); + CGLM_INLINE void glm_vec4_swizzle(vec4 v, int mask, vec4 dest); */ #ifndef cglm_vec4_h @@ -57,6 +58,12 @@ #define GLM_VEC4_ONE (vec4)GLM_VEC4_ONE_INIT #define GLM_VEC4_BLACK (vec4)GLM_VEC4_BLACK_INIT +#define GLM_XXXX GLM_SHUFFLE4(0, 0, 0, 0) +#define GLM_YYYY GLM_SHUFFLE4(1, 1, 1, 1) +#define GLM_ZZZZ GLM_SHUFFLE4(2, 2, 2, 2) +#define GLM_WWWW GLM_SHUFFLE4(3, 3, 3, 3) +#define GLM_WZYX GLM_SHUFFLE4(0, 1, 2, 3) + /*! * @brief init vec4 using vec3 * @@ -369,4 +376,26 @@ glm_vec4_minv(vec4 v1, vec4 v2, vec4 dest) { dest[3] = glm_min(v1[3], v2[3]); } +/*! + * @brief swizzle vector components + * + * you can use existin masks e.g. GLM_XXXX, GLM_WZYX + * + * @param[in] v source + * @param[in] mask mask + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_vec4_swizzle(vec4 v, int mask, vec4 dest) { + vec4 t; + + t[0] = v[(mask & (3 << 0))]; + t[1] = v[(mask & (3 << 2)) >> 2]; + t[2] = v[(mask & (3 << 4)) >> 4]; + t[3] = v[(mask & (3 << 6)) >> 6]; + + glm_vec4_copy(t, dest); +} + #endif /* cglm_vec4_h */ From f848e4451afe6666c83b9488e4bc70d9c950c8f0 Mon Sep 17 00:00:00 2001 From: acoto87 Date: Thu, 28 Mar 2019 20:56:37 -0600 Subject: [PATCH 02/56] Include `stddef.h` to ensure `size_t` and other dependent types --- include/cglm/common.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/cglm/common.h b/include/cglm/common.h index 422716a..42d5e67 100644 --- a/include/cglm/common.h +++ b/include/cglm/common.h @@ -11,6 +11,7 @@ #define _USE_MATH_DEFINES /* for windows */ #include +#include #include #include From 674e05213a58e3289319616ed38fab4be4adc64a Mon Sep 17 00:00:00 2001 From: acoto87 Date: Thu, 28 Mar 2019 23:41:19 -0600 Subject: [PATCH 03/56] - Add struct types to types.h. - Add structs/vec4.h file. --- include/cglm/structs/vec4.h | 282 ++++++++++++++++++++++++++++++++++++ include/cglm/types.h | 46 ++++++ 2 files changed, 328 insertions(+) create mode 100644 include/cglm/structs/vec4.h diff --git a/include/cglm/structs/vec4.h b/include/cglm/structs/vec4.h new file mode 100644 index 0000000..7290c35 --- /dev/null +++ b/include/cglm/structs/vec4.h @@ -0,0 +1,282 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_vec4s_h +#define cglm_vec4s_h + +#include "common.h" +#include "vec4-ext.h" +#include "util.h" + +#define GLMS_VEC4_ONE_INIT {1.0f, 1.0f, 1.0f, 1.0f} +#define GLMS_VEC4_BLACK_INIT {0.0f, 0.0f, 0.0f, 1.0f} +#define GLMS_VEC4_ZERO_INIT {0.0f, 0.0f, 0.0f, 0.0f} + +#define GLMS_VEC4_ONE ((vec4s)GLM_VEC4_ONE_INIT) +#define GLMS_VEC4_BLACK ((vec4s)GLM_VEC4_BLACK_INIT) +#define GLMS_VEC4_ZERO ((vec4s)GLM_VEC4_ZERO_INIT) + +CGLM_INLINE +vec4s +glms_vec4(vec3s v3, float last) +{ + vec4s r; + glm_vec4(v3.raw, last, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec4_copy3(vec4s v) +{ + vec3s r; + glm_vec4_copy3(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_copy(vec4s v) +{ + vec4s r; + glm_vec4_copy(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_ucopy(vec4s v) +{ + vec4s r; + glm_vec4_ucopy(v.raw, r.raw); + return r; +} + + +CGLM_INLINE +float +glms_vec4_dot(vec4s a, vec4s b) +{ + return glm_vec4_dot(a.raw, b.raw); +} + +CGLM_INLINE +float +glms_vec4_norm2(vec4s v) +{ + return glm_vec4_norm2(v.raw); +} + +CGLM_INLINE +float +glms_vec4_norm(vec4s v) +{ + return glm_vec4_norm(v.raw); +} + +CGLM_INLINE +vec4s +glms_vec4_add(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_add(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_adds(vec4s v, float s) +{ + vec4s r; + glm_vec4_adds(v.raw s, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_sub(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_sub(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_subs(vec4s v, float s) +{ + vec4s r; + glm_vec4_subs(v.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_mul(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_mul(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_scale(vec4s v, float s) +{ + vec4s r; + glm_vec4_scale(v.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_scale_as(vec4s v, float s) +{ + vec4s r; + glm_vec4_scale_as(v.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_div(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_div(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_divs(vec4s v, float s) +{ + vec4s r; + glm_vec4_divs(v.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_addadd(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_addadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_subadd(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_subadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_muladd(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_muladd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_muladds(vec4s a, float s) +{ + vec4s r; + glm_vec4_muladds(a.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_maxadd(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_maxadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_minadd(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_minadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_negate(vec4s v) +{ + glm_vec4_negate(v.raw); + return v; +} + +CGLM_INLINE +vec4s +glms_vec4_inv(vec4s v) +{ + glm_vec4_inv(v.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_normalize(vec4s v) +{ + glm_vec4_normalize(v.raw); + return v; +} + +CGLM_INLINE +float +glms_vec4_distance(vec4s a, vec4s b) +{ + return glm_vec4_distance(a.raw, b.raw); +} + +CGLM_INLINE +vec4s +glms_vec4_maxv(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_maxv(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_minv(vec4s a, vec4s b) +{ + vec4s r; + glm_vec4_minv(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_clamp(vec4s v, float minVal, float maxVal) +{ + glm_vec4_clamp(v.raw, minVal, maxVal); + return v; +} + +CGLM_INLINE +vec4s +glms_vec4_lerp(vec4s from, vec4s to, float t) +{ + vec4s r; + glm_vec4_lerp(from.raw, to.raw, t, r.raw); + return r; +} + +#endif /* cglm_vec4s_h */ diff --git a/include/cglm/types.h b/include/cglm/types.h index 1190b73..29703df 100644 --- a/include/cglm/types.h +++ b/include/cglm/types.h @@ -32,6 +32,7 @@ # define CGLM_ALIGN_MAT CGLM_ALIGN(16) #endif +// array types typedef float vec2[2]; typedef float vec3[3]; typedef int ivec3[3]; @@ -45,6 +46,51 @@ typedef CGLM_ALIGN_IF(32) vec4 mat4[4]; typedef CGLM_ALIGN_IF(16) vec4 mat4[4]; #endif +// struct types +typedef union CGLM_ALIGN_IF(8) vec2s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float x; + float y; + }; +#endif + vec2 raw; +} vec2s; + +typedef union CGLM_ALIGN_IF(8) vec3s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float x; + float y; + float z; + }; +#endif + vec3 raw; +} vec3s; + +typedef union CGLM_ALIGN_IF(8) ivec3s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + int x; + int y; + int z; + }; +#endif + ivec3 raw; +} ivec3s; + +typedef union CGLM_ALIGN_IF(16) vec4s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float x; + float y; + float z; + float w; + }; +#endif + vec4 raw; +} vec4s; + #define GLM_E 2.71828182845904523536028747135266250 /* e */ #define GLM_LOG2E 1.44269504088896340735992468100189214 /* log2(e) */ #define GLM_LOG10E 0.434294481903251827651128918916605082 /* log10(e) */ From 6c0c5167b05f6a1c1fa29f89783c151650d85409 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 31 Mar 2019 18:53:31 +0300 Subject: [PATCH 04/56] docs: fix some parameter docs --- include/cglm/vec3.h | 4 ++-- include/cglm/vec4.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index c53c8ab..e67cc2f 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -428,8 +428,8 @@ glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { * * it applies += operator so dest must be initialized * - * @param[in] a vector - * @param[in] b scalar + * @param[in] a vector 1 + * @param[in] b vector 2 * @param[out] dest dest += min(a, b) */ CGLM_INLINE diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index bbd1c31..b94cf61 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -576,8 +576,8 @@ glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { * * it applies += operator so dest must be initialized * - * @param[in] a vector - * @param[in] b scalar + * @param[in] a vector 1 + * @param[in] b vector 2 * @param[out] dest dest += min(a, b) */ CGLM_INLINE From 81a74ba2255dd4c60f19126aab9d78609e74a5c8 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 31 Mar 2019 18:58:20 +0300 Subject: [PATCH 05/56] move 'stdbool.h' to common header, add missing common.h header to public headers --- include/cglm/bezier.h | 2 ++ include/cglm/common.h | 1 + include/cglm/project.h | 1 + include/cglm/util.h | 1 - include/cglm/vec3-ext.h | 3 --- include/cglm/vec4-ext.h | 3 --- 6 files changed, 4 insertions(+), 7 deletions(-) diff --git a/include/cglm/bezier.h b/include/cglm/bezier.h index 2560594..5dac859 100644 --- a/include/cglm/bezier.h +++ b/include/cglm/bezier.h @@ -8,6 +8,8 @@ #ifndef cglm_bezier_h #define cglm_bezier_h +#include "common.h" + #define GLM_BEZIER_MAT_INIT {{-1.0f, 3.0f, -3.0f, 1.0f}, \ { 3.0f, -6.0f, 3.0f, 0.0f}, \ {-3.0f, 3.0f, 0.0f, 0.0f}, \ diff --git a/include/cglm/common.h b/include/cglm/common.h index 42d5e67..c7c5eb8 100644 --- a/include/cglm/common.h +++ b/include/cglm/common.h @@ -14,6 +14,7 @@ #include #include #include +#include #if defined(_MSC_VER) # ifdef CGLM_DLL diff --git a/include/cglm/project.h b/include/cglm/project.h index d4295d3..1336222 100644 --- a/include/cglm/project.h +++ b/include/cglm/project.h @@ -8,6 +8,7 @@ #ifndef cglm_project_h #define cglm_project_h +#include "common.h" #include "vec3.h" #include "vec4.h" #include "mat4.h" diff --git a/include/cglm/util.h b/include/cglm/util.h index af73eb8..d1ef21b 100644 --- a/include/cglm/util.h +++ b/include/cglm/util.h @@ -19,7 +19,6 @@ #define cglm_util_h #include "common.h" -#include #define GLM_MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) #define GLM_MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) diff --git a/include/cglm/vec3-ext.h b/include/cglm/vec3-ext.h index 0e64325..f1cc462 100644 --- a/include/cglm/vec3-ext.h +++ b/include/cglm/vec3-ext.h @@ -31,9 +31,6 @@ #include "common.h" #include "util.h" -#include -#include -#include /*! * @brief fill a vector with specified value diff --git a/include/cglm/vec4-ext.h b/include/cglm/vec4-ext.h index 07821ac..c545a14 100644 --- a/include/cglm/vec4-ext.h +++ b/include/cglm/vec4-ext.h @@ -31,9 +31,6 @@ #include "common.h" #include "vec3-ext.h" -#include -#include -#include /*! * @brief fill a vector with specified value From c25469829a000a397fc164d93896a5505899e859 Mon Sep 17 00:00:00 2001 From: acoto87 Date: Wed, 3 Apr 2019 22:25:49 -0600 Subject: [PATCH 06/56] Initial implementation of struct type `vec4s` --- include/cglm/cglms.h | 20 ++++++ include/cglm/structs/vec4-ext.h | 114 ++++++++++++++++++++++++++++++++ include/cglm/structs/vec4.h | 15 +++-- include/cglm/types.h | 23 +------ test/src/test_common.c | 14 ++++ test/src/test_common.h | 9 ++- test/src/test_quat.c | 2 + test/src/test_vec4.c | 10 ++- 8 files changed, 178 insertions(+), 29 deletions(-) create mode 100644 include/cglm/cglms.h create mode 100644 include/cglm/structs/vec4-ext.h diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h new file mode 100644 index 0000000..4dd471f --- /dev/null +++ b/include/cglm/cglms.h @@ -0,0 +1,20 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_structs_h +#define cglm_structs_h +#ifdef __cplusplus +extern "C" { +#endif + +#include "cglm.h" +#include "structs/vec4.h" + +#ifdef __cplusplus +} +#endif +#endif /* cglm_structs_h */ diff --git a/include/cglm/structs/vec4-ext.h b/include/cglm/structs/vec4-ext.h new file mode 100644 index 0000000..ea84e82 --- /dev/null +++ b/include/cglm/structs/vec4-ext.h @@ -0,0 +1,114 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_vec4s_ext_h +#define cglm_vec4s_ext_h + +#include "common.h" +#include "vec3-ext.h" +#include +#include +#include + +CGLM_INLINE +vec4s +glms_vec4_broadcast(float val, vec4 d) +{ + vec4s r; + glm_vec4_broadcast(val, r.raw); + return r; +} + +CGLM_INLINE +bool +glms_vec4_eq(vec4s v, float val) +{ + return glm_vec4_eq(v.raw, val); +} + +CGLM_INLINE +bool +glms_vec4_eq_eps(vec4 v, float val) +{ + return glm_vec4_eq_eps(v.raw, val); +} + +CGLM_INLINE +bool +glms_vec4_eq_all(vec4s v) +{ + return glm_vec4_eq_all(v.raw); +} + +CGLM_INLINE +bool +glms_vec4_eqv(vec4s a, vec4s b) +{ + return glm_vec4_eqv(a.raw, b.raw); +} + +CGLM_INLINE +bool +glms_vec4_eqv_eps(vec4s a, vec4s b) +{ + return glm_vec4_eqv_eps(a.raw, b.raw); +} + +CGLM_INLINE +float +glms_vec4_max(vec4s v) +{ + return glm_vec4_max(v.raw); +} + +CGLM_INLINE +float +glms_vec4_min(vec4s v) +{ + return glm_vec4_min(v.raw); +} + +CGLM_INLINE +bool +glms_vec4_isnan(vec4s v) +{ + return glm_vec4_isnan(v.raw); +} + +CGLM_INLINE +bool +glms_vec4_isinf(vec4s v) +{ + return glm_vec4_isinf(v.raw); +} + +CGLM_INLINE +bool +glms_vec4_isvalid(vec4s v) +{ + return glm_vec4_isvalid(v.raw); +} + +CGLM_INLINE +vec4s +glms_vec4_sign(vec4s v) +{ + vec4s r; + glm_vec4_sign(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec4s +glms_vec4_sqrt(vec4s v) +{ + vec4s r; + glm_vec4_sqrt(v.raw, r.raw); + return r; +} + +#endif /* cglm_vec4s_ext_h */ diff --git a/include/cglm/structs/vec4.h b/include/cglm/structs/vec4.h index 7290c35..b68bb33 100644 --- a/include/cglm/structs/vec4.h +++ b/include/cglm/structs/vec4.h @@ -8,9 +8,11 @@ #ifndef cglm_vec4s_h #define cglm_vec4s_h -#include "common.h" -#include "vec4-ext.h" -#include "util.h" +#ifdef __cplusplus +extern "C" { +#endif + +#include "../cglm.h" #define GLMS_VEC4_ONE_INIT {1.0f, 1.0f, 1.0f, 1.0f} #define GLMS_VEC4_BLACK_INIT {0.0f, 0.0f, 0.0f, 1.0f} @@ -92,7 +94,7 @@ vec4s glms_vec4_adds(vec4s v, float s) { vec4s r; - glm_vec4_adds(v.raw s, r.raw); + glm_vec4_adds(v.raw, s, r.raw); return r; } @@ -226,7 +228,7 @@ vec4s glms_vec4_inv(vec4s v) { glm_vec4_inv(v.raw); - return r; + return v; } CGLM_INLINE @@ -279,4 +281,7 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) return r; } +#ifdef __cplusplus +} +#endif #endif /* cglm_vec4s_h */ diff --git a/include/cglm/types.h b/include/cglm/types.h index 29703df..69c2885 100644 --- a/include/cglm/types.h +++ b/include/cglm/types.h @@ -47,17 +47,7 @@ typedef CGLM_ALIGN_IF(16) vec4 mat4[4]; #endif // struct types -typedef union CGLM_ALIGN_IF(8) vec2s { -#ifndef CGLM_NO_ANONYMOUS_STRUCT - struct { - float x; - float y; - }; -#endif - vec2 raw; -} vec2s; - -typedef union CGLM_ALIGN_IF(8) vec3s { +typedef union CGLM_ALIGN_IF(16) vec3s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { float x; @@ -68,17 +58,6 @@ typedef union CGLM_ALIGN_IF(8) vec3s { vec3 raw; } vec3s; -typedef union CGLM_ALIGN_IF(8) ivec3s { -#ifndef CGLM_NO_ANONYMOUS_STRUCT - struct { - int x; - int y; - int z; - }; -#endif - ivec3 raw; -} ivec3s; - typedef union CGLM_ALIGN_IF(16) vec4s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { diff --git a/test/src/test_common.c b/test/src/test_common.c index d41d3cb..94331f4 100644 --- a/test/src/test_common.c +++ b/test/src/test_common.c @@ -57,6 +57,14 @@ test_rand_vec4(vec4 dest) { dest[3] = drand48(); } +vec4s +test_rand_vec4s() +{ + vec4s r; + test_rand_vec4(r.raw); + return r; +} + float test_rand(void) { srand((unsigned int)time(NULL)); @@ -127,6 +135,12 @@ test_assert_vec4_eq(vec4 v1, vec4 v2) { assert_true(fabsf(v1[3] - v2[3]) <= 0.000009); } +void +test_assert_vec4s_eq(vec4s v1, vec4s v2) +{ + test_assert_vec4_eq(v1.raw, v2.raw); +} + void test_assert_quat_eq_abs(versor v1, versor v2) { assert_true(fabsf(fabsf(v1[0]) - fabsf(v2[0])) <= 0.0009); /* rounding errors */ diff --git a/test/src/test_common.h b/test/src/test_common.h index 8a16b0f..c6a2dc4 100644 --- a/test/src/test_common.h +++ b/test/src/test_common.h @@ -20,6 +20,7 @@ #include #include +#include #include void @@ -46,6 +47,9 @@ test_assert_vec3_eq(vec3 v1, vec3 v2); void test_assert_vec4_eq(vec4 v1, vec4 v2); +void +test_assert_vec4s_eq(vec4s v1, vec4s v2); + void test_assert_quat_eq(versor v1, versor v2); @@ -56,7 +60,10 @@ void test_rand_vec3(vec3 dest); void -test_rand_vec4(vec4 dest) ; +test_rand_vec4(vec4 dest); + +vec4s +test_rand_vec4s(); float test_rand(void); diff --git a/test/src/test_quat.c b/test/src/test_quat.c index 0d64367..d0cc27c 100644 --- a/test/src/test_quat.c +++ b/test/src/test_quat.c @@ -44,9 +44,11 @@ test_quat(void **state) { test_assert_mat4_eq2(inRot, outRot, 0.000009); /* almost equal */ /* 4. test SSE mul and raw mul */ +#if defined( __SSE__ ) || defined( __SSE2__ ) test_quat_mul_raw(inQuat, outQuat, q3); glm_quat_mul_sse2(inQuat, outQuat, q4); test_assert_quat_eq(q3, q4); +#endif } /* 5. test lookat */ diff --git a/test/src/test_vec4.c b/test/src/test_vec4.c index 8e4fda5..5fe3be8 100644 --- a/test/src/test_vec4.c +++ b/test/src/test_vec4.c @@ -65,10 +65,10 @@ test_vec4_clamp(vec4 v, float minVal, float maxVal) { void test_vec4(void **state) { vec4 v, v1, v2, v3, v4; + vec4s vs1, vs2, vs3, vs4; int i; float d1, d2; - for (i = 0; i < 1000; i++) { /* 1. test SSE/SIMD dot product */ test_rand_vec4(v); @@ -175,4 +175,12 @@ test_vec4(void **state) { assert_true(v3[1] >= 0.0999 && v3[1] <= 0.80001); assert_true(v3[2] >= 0.0999 && v3[2] <= 0.80001); assert_true(v3[3] >= 0.0999 && v3[3] <= 0.80001); + + /* structs */ + vs1 = test_rand_vec4s(); + vs2 = test_rand_vec4s(); + + vs3 = glms_vec4_add(vs1, vs2); + vs4 = glms_vec4_maxv(vs1, vs3); + test_assert_vec4s_eq(vs3, vs4); } From 1aa54dc1109ea663b95984417baa0f4a3b851c9d Mon Sep 17 00:00:00 2001 From: acoto87 Date: Mon, 8 Apr 2019 21:06:01 -0500 Subject: [PATCH 07/56] - separating struct types into `types-struct.h` - vec3s implementation - fix style issues --- include/cglm/cglms.h | 2 + include/cglm/structs/vec3-ext.h | 100 ++++++++ include/cglm/structs/vec3.h | 398 ++++++++++++++++++++++++++++++++ include/cglm/structs/vec4-ext.h | 48 ++-- include/cglm/structs/vec4.h | 96 +++----- include/cglm/types-struct.h | 36 +++ include/cglm/types.h | 25 -- test/src/test_common.c | 14 ++ test/src/test_common.h | 6 + test/src/test_vec3.c | 9 + 10 files changed, 617 insertions(+), 117 deletions(-) create mode 100644 include/cglm/structs/vec3-ext.h create mode 100644 include/cglm/structs/vec3.h create mode 100644 include/cglm/types-struct.h diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h index 4dd471f..9f00dc8 100644 --- a/include/cglm/cglms.h +++ b/include/cglm/cglms.h @@ -12,6 +12,8 @@ extern "C" { #endif #include "cglm.h" +#include "types-struct.h" +#include "structs/vec3.h" #include "structs/vec4.h" #ifdef __cplusplus diff --git a/include/cglm/structs/vec3-ext.h b/include/cglm/structs/vec3-ext.h new file mode 100644 index 0000000..0449b3d --- /dev/null +++ b/include/cglm/structs/vec3-ext.h @@ -0,0 +1,100 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_vec3s_ext_h +#define cglm_vec3s_ext_h + +#include "../common.h" +#include "../types-struct.h" +#include "../util.h" +#include "../vec3-ext.h" + +CGLM_INLINE +vec3s +glms_vec3_broadcast(float val) { + vec3s r; + glm_vec3_broadcast(val, r.raw); + return r; +} + +CGLM_INLINE +bool +glms_vec3_eq(vec3s v, float val) { + return glm_vec3_eq(v.raw, val); +} + +CGLM_INLINE +bool +glms_vec3_eq_eps(vec3s v, float val) { + return glm_vec3_eq_eps(v.raw, val); +} + +CGLM_INLINE +bool +glms_vec3_eq_all(vec3s v) { + return glm_vec3_eq_all(v.raw); +} + +CGLM_INLINE +bool +glms_vec3_eqv(vec3s a, vec3s b) { + return glm_vec3_eqv(a.raw, b.raw); +} + +CGLM_INLINE +bool +glms_vec3_eqv_eps(vec3s a, vec3s b) { + return glm_vec3_eqv_eps(a.raw, b.raw); +} + +CGLM_INLINE +float +glms_vec3_max(vec3s v) { + return glm_vec3_max(v.raw); +} + +CGLM_INLINE +float +glms_vec3_min(vec3s v) { + return glm_vec3_min(v.raw); +} + +CGLM_INLINE +bool +glms_vec3_isnan(vec3s v) { + return glm_vec3_isnan(v.raw); +} + +CGLM_INLINE +bool +glms_vec3_isinf(vec3s v) { + return glm_vec3_isinf(v.raw); +} + +CGLM_INLINE +bool +glms_vec3_isvalid(vec3s v) { + return glm_vec3_isvalid(v.raw); +} + +CGLM_INLINE +vec3s +glms_vec3_sign(vec3s v) { + vec3s r; + glm_vec3_sign(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_sqrt(vec3s v) { + vec3s r; + glm_vec3_sqrt(v.raw, r.raw); + return r; +} + +#endif /* cglm_vec3s_ext_h */ diff --git a/include/cglm/structs/vec3.h b/include/cglm/structs/vec3.h new file mode 100644 index 0000000..ed77c4a --- /dev/null +++ b/include/cglm/structs/vec3.h @@ -0,0 +1,398 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_vec3s_h +#define cglm_vec3s_h + +#include "../common.h" +#include "../types-struct.h" +#include "../util.h" +#include "../vec3.h" +#include "vec3-ext.h" + +#define GLMS_VEC3_ONE_INIT {1.0f, 1.0f, 1.0f} +#define GLMS_VEC3_ZERO_INIT {0.0f, 0.0f, 0.0f} + +#define GLMS_VEC3_ONE ((vec3s)GLMS_VEC3_ONE_INIT) +#define GLMS_VEC3_ZERO ((vec3s)GLMS_VEC3_ZERO_INIT) + +#define GLMS_YUP ((vec3s){0.0f, 1.0f, 0.0f}) +#define GLMS_ZUP ((vec3s){0.0f, 0.0f, 1.0f}) +#define GLMS_XUP ((vec3s){1.0f, 0.0f, 0.0f}) + +CGLM_INLINE +vec3s +glms_vec3(vec4s v4) { + vec3s r; + glm_vec3(v4.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_copy(vec3s v) { + vec3s r; + glm_vec3_copy(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_zero() { + vec3s r; + glm_vec3_zero(r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_one() { + vec3s r; + glm_vec3_one(r.raw); + return r; +} + +CGLM_INLINE +float +glms_vec3_dot(vec3s a, vec3s b) { + return glm_vec3_dot(a.raw, b.raw); +} + +CGLM_INLINE +float +glms_vec3_norm2(vec3s v) { + glm_vec3_norm2(v.raw); +} + +CGLM_INLINE +float +glms_vec3_norm(vec3s v) { + glm_vec3_norm(v.raw); +} + +CGLM_INLINE +vec3s +glms_vec3_add(vec3s a, vec3s b) { + vec3s r; + glm_vec3_add(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_adds(vec3s a, float s) { + vec3s r; + glm_vec3_adds(a.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_sub(vec3s a, vec3s b) { + vec3s r; + glm_vec3_sub(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_subs(vec3s a, float s) { + vec3s r; + glm_vec3_subs(a.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_mul(vec3s a, vec3s b) { + vec3s r; + glm_vec3_mul(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_scale(vec3s v, float s) { + vec3s r; + glm_vec3_scale(v.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_scale_as(vec3s v, float s) { + vec3s r; + glm_vec3_scale_as(v.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_div(vec3s a, vec3s b) { + vec3s r; + glm_vec3_div(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_divs(vec3s a, float s) { + vec3s r; + glm_vec3_divs(a.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_addadd(vec3s a, vec3s b) { + vec3s r; + glm_vec3_addadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_subadd(vec3s a, vec3s b) { + vec3s r; + glm_vec3_subadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_muladd(vec3s a, vec3s b) { + vec3s r; + glm_vec3_muladd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_muladds(vec3s a, float s) { + vec3s r; + glm_vec3_muladds(a.raw, s, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_maxadd(vec3s a, vec3s b) { + vec3s r; + glm_vec3_maxadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_minadd(vec3s a, vec3s b) { + vec3s r; + glm_vec3_minadd(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_flipsign(vec3s v) { + glm_vec3_flipsign(v.raw); + return v; +} + +CGLM_INLINE +vec3s +glms_vec3_flipsign_to(vec3s v) { + vec3s r; + glm_vec3_flipsign_to(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_negate_to(vec3s v) { + vec3s r; + glm_vec3_negate_to(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_negate(vec3s v) { + glm_vec3_negate(v.raw); + return v; +} + +CGLM_INLINE +vec3s +glms_vec3_inv(vec3s v) { + glm_vec3_inv(v.raw); + return v; +} + +CGLM_INLINE +vec3s +glms_vec3_inv_to(vec3s v) { + vec3s r; + glm_vec3_inv_to(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_normalize(vec3s v) { + glm_vec3_normalize(v.raw); + return v; +} + +CGLM_INLINE +vec3s +glms_vec3_normalize_to(vec3s v) { + vec3s r; + glm_vec3_normalize_to(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_cross(vec3s a, vec3s b) { + vec3s r; + glm_vec3_cross(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_crossn(vec3s a, vec3s b) { + vec3s r; + glm_vec3_crossn(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +float +glms_vec3_distance(vec3s a, vec3s b) { + return glm_vec3_distance(a.raw, b.raw); +} + +CGLM_INLINE +float +glms_vec3_angle(vec3s a, vec3s b) { + return glm_vec3_angle(a.raw, b.raw); +} + +CGLM_INLINE +vec3s +glms_vec3_rotate(vec3s v, float angle, vec3s axis) { + glm_vec3_rotate(v.raw, angle, axis.raw); + return v; +} + +CGLM_INLINE +vec3s +glms_vec3_rotate_m4(mat4 m, vec3s v) { + vec3s r; + glm_vec3_rotate_m4(m, v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_rotate_m3(mat3 m, vec3s v) { + vec3s r; + glm_vec3_rotate_m3(m, v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_proj(vec3s a, vec3s b) { + vec3s r; + glm_vec3_proj(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_center(vec3s a, vec3s b) { + vec3s r; + glm_vec3_center(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +float +glms_vec3_distance2(vec3s a, vec3s b) { + return glm_vec3_distance2(a.raw, b.raw); +} + +CGLM_INLINE +vec3s +glms_vec3_maxv(vec3s a, vec3s b) { + vec3s r; + glm_vec3_maxv(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_minv(vec3s a, vec3s b) { + vec3s r; + glm_vec3_minv(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_ortho(vec3s v) { + vec3s r; + glm_vec3_ortho(v.raw, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_vec3_clamp(vec3s v, float minVal, float maxVal) { + glm_vec3_clamp(v.raw, minVal, maxVal); + return v; +} + +CGLM_INLINE +vec3s +glms_vec3_lerp(vec3s from, vec3s to, float t) { + vec3s r; + glm_vec3_lerp(from.raw, to.raw, t, r.raw); + return r; +} + +CGLM_INLINE +vec3s +glms_cross(vec3s a, vec3s b) { + vec3s r; + glm_cross(a.raw, b.raw, r.raw); + return r; +} + +CGLM_INLINE +float +glms_dot(vec3s a, vec3s b) { + return glm_dot(a.raw, b.raw); +} + +CGLM_INLINE +vec3s +glms_normalize(vec3s v) { + glm_normalize(v.raw); + return v; +} + +CGLM_INLINE +vec3s +glms_normalize_to(vec3s v) { + vec3s r; + glm_normalize_to(v.raw, r.raw); + return r; +} + +#endif /* cglm_vec3s_h */ diff --git a/include/cglm/structs/vec4-ext.h b/include/cglm/structs/vec4-ext.h index ea84e82..4fbb2d3 100644 --- a/include/cglm/structs/vec4-ext.h +++ b/include/cglm/structs/vec4-ext.h @@ -8,16 +8,14 @@ #ifndef cglm_vec4s_ext_h #define cglm_vec4s_ext_h -#include "common.h" -#include "vec3-ext.h" -#include -#include -#include +#include "../common.h" +#include "../types-struct.h" +#include "../util.h" +#include "../vec4-ext.h" CGLM_INLINE vec4s -glms_vec4_broadcast(float val, vec4 d) -{ +glms_vec4_broadcast(float val) { vec4s r; glm_vec4_broadcast(val, r.raw); return r; @@ -25,78 +23,67 @@ glms_vec4_broadcast(float val, vec4 d) CGLM_INLINE bool -glms_vec4_eq(vec4s v, float val) -{ +glms_vec4_eq(vec4s v, float val) { return glm_vec4_eq(v.raw, val); } CGLM_INLINE bool -glms_vec4_eq_eps(vec4 v, float val) -{ +glms_vec4_eq_eps(vec4s v, float val) { return glm_vec4_eq_eps(v.raw, val); } CGLM_INLINE bool -glms_vec4_eq_all(vec4s v) -{ +glms_vec4_eq_all(vec4s v) { return glm_vec4_eq_all(v.raw); } CGLM_INLINE bool -glms_vec4_eqv(vec4s a, vec4s b) -{ +glms_vec4_eqv(vec4s a, vec4s b) { return glm_vec4_eqv(a.raw, b.raw); } CGLM_INLINE bool -glms_vec4_eqv_eps(vec4s a, vec4s b) -{ +glms_vec4_eqv_eps(vec4s a, vec4s b) { return glm_vec4_eqv_eps(a.raw, b.raw); } CGLM_INLINE float -glms_vec4_max(vec4s v) -{ +glms_vec4_max(vec4s v) { return glm_vec4_max(v.raw); } CGLM_INLINE float -glms_vec4_min(vec4s v) -{ +glms_vec4_min(vec4s v) { return glm_vec4_min(v.raw); } CGLM_INLINE bool -glms_vec4_isnan(vec4s v) -{ +glms_vec4_isnan(vec4s v) { return glm_vec4_isnan(v.raw); } CGLM_INLINE bool -glms_vec4_isinf(vec4s v) -{ +glms_vec4_isinf(vec4s v) { return glm_vec4_isinf(v.raw); } CGLM_INLINE bool -glms_vec4_isvalid(vec4s v) -{ +glms_vec4_isvalid(vec4s v) { return glm_vec4_isvalid(v.raw); } CGLM_INLINE vec4s -glms_vec4_sign(vec4s v) -{ +glms_vec4_sign(vec4s v) { vec4s r; glm_vec4_sign(v.raw, r.raw); return r; @@ -104,8 +91,7 @@ glms_vec4_sign(vec4s v) CGLM_INLINE vec4s -glms_vec4_sqrt(vec4s v) -{ +glms_vec4_sqrt(vec4s v) { vec4s r; glm_vec4_sqrt(v.raw, r.raw); return r; diff --git a/include/cglm/structs/vec4.h b/include/cglm/structs/vec4.h index b68bb33..c0a79c3 100644 --- a/include/cglm/structs/vec4.h +++ b/include/cglm/structs/vec4.h @@ -12,7 +12,11 @@ extern "C" { #endif -#include "../cglm.h" +#include "../common.h" +#include "../types-struct.h" +#include "../util.h" +#include "../vec4.h" +#include "vec4-ext.h" #define GLMS_VEC4_ONE_INIT {1.0f, 1.0f, 1.0f, 1.0f} #define GLMS_VEC4_BLACK_INIT {0.0f, 0.0f, 0.0f, 1.0f} @@ -24,8 +28,7 @@ extern "C" { CGLM_INLINE vec4s -glms_vec4(vec3s v3, float last) -{ +glms_vec4(vec3s v3, float last) { vec4s r; glm_vec4(v3.raw, last, r.raw); return r; @@ -33,8 +36,7 @@ glms_vec4(vec3s v3, float last) CGLM_INLINE vec3s -glms_vec4_copy3(vec4s v) -{ +glms_vec4_copy3(vec4s v) { vec3s r; glm_vec4_copy3(v.raw, r.raw); return r; @@ -42,8 +44,7 @@ glms_vec4_copy3(vec4s v) CGLM_INLINE vec4s -glms_vec4_copy(vec4s v) -{ +glms_vec4_copy(vec4s v) { vec4s r; glm_vec4_copy(v.raw, r.raw); return r; @@ -51,8 +52,7 @@ glms_vec4_copy(vec4s v) CGLM_INLINE vec4s -glms_vec4_ucopy(vec4s v) -{ +glms_vec4_ucopy(vec4s v) { vec4s r; glm_vec4_ucopy(v.raw, r.raw); return r; @@ -61,29 +61,25 @@ glms_vec4_ucopy(vec4s v) CGLM_INLINE float -glms_vec4_dot(vec4s a, vec4s b) -{ +glms_vec4_dot(vec4s a, vec4s b) { return glm_vec4_dot(a.raw, b.raw); } CGLM_INLINE float -glms_vec4_norm2(vec4s v) -{ +glms_vec4_norm2(vec4s v) { return glm_vec4_norm2(v.raw); } CGLM_INLINE float -glms_vec4_norm(vec4s v) -{ +glms_vec4_norm(vec4s v) { return glm_vec4_norm(v.raw); } CGLM_INLINE vec4s -glms_vec4_add(vec4s a, vec4s b) -{ +glms_vec4_add(vec4s a, vec4s b) { vec4s r; glm_vec4_add(a.raw, b.raw, r.raw); return r; @@ -91,8 +87,7 @@ glms_vec4_add(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_adds(vec4s v, float s) -{ +glms_vec4_adds(vec4s v, float s) { vec4s r; glm_vec4_adds(v.raw, s, r.raw); return r; @@ -100,8 +95,7 @@ glms_vec4_adds(vec4s v, float s) CGLM_INLINE vec4s -glms_vec4_sub(vec4s a, vec4s b) -{ +glms_vec4_sub(vec4s a, vec4s b) { vec4s r; glm_vec4_sub(a.raw, b.raw, r.raw); return r; @@ -109,8 +103,7 @@ glms_vec4_sub(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_subs(vec4s v, float s) -{ +glms_vec4_subs(vec4s v, float s) { vec4s r; glm_vec4_subs(v.raw, s, r.raw); return r; @@ -118,8 +111,7 @@ glms_vec4_subs(vec4s v, float s) CGLM_INLINE vec4s -glms_vec4_mul(vec4s a, vec4s b) -{ +glms_vec4_mul(vec4s a, vec4s b) { vec4s r; glm_vec4_mul(a.raw, b.raw, r.raw); return r; @@ -127,8 +119,7 @@ glms_vec4_mul(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_scale(vec4s v, float s) -{ +glms_vec4_scale(vec4s v, float s) { vec4s r; glm_vec4_scale(v.raw, s, r.raw); return r; @@ -136,8 +127,7 @@ glms_vec4_scale(vec4s v, float s) CGLM_INLINE vec4s -glms_vec4_scale_as(vec4s v, float s) -{ +glms_vec4_scale_as(vec4s v, float s) { vec4s r; glm_vec4_scale_as(v.raw, s, r.raw); return r; @@ -145,8 +135,7 @@ glms_vec4_scale_as(vec4s v, float s) CGLM_INLINE vec4s -glms_vec4_div(vec4s a, vec4s b) -{ +glms_vec4_div(vec4s a, vec4s b) { vec4s r; glm_vec4_div(a.raw, b.raw, r.raw); return r; @@ -154,8 +143,7 @@ glms_vec4_div(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_divs(vec4s v, float s) -{ +glms_vec4_divs(vec4s v, float s) { vec4s r; glm_vec4_divs(v.raw, s, r.raw); return r; @@ -163,8 +151,7 @@ glms_vec4_divs(vec4s v, float s) CGLM_INLINE vec4s -glms_vec4_addadd(vec4s a, vec4s b) -{ +glms_vec4_addadd(vec4s a, vec4s b) { vec4s r; glm_vec4_addadd(a.raw, b.raw, r.raw); return r; @@ -172,8 +159,7 @@ glms_vec4_addadd(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_subadd(vec4s a, vec4s b) -{ +glms_vec4_subadd(vec4s a, vec4s b) { vec4s r; glm_vec4_subadd(a.raw, b.raw, r.raw); return r; @@ -181,8 +167,7 @@ glms_vec4_subadd(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_muladd(vec4s a, vec4s b) -{ +glms_vec4_muladd(vec4s a, vec4s b) { vec4s r; glm_vec4_muladd(a.raw, b.raw, r.raw); return r; @@ -190,8 +175,7 @@ glms_vec4_muladd(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_muladds(vec4s a, float s) -{ +glms_vec4_muladds(vec4s a, float s) { vec4s r; glm_vec4_muladds(a.raw, s, r.raw); return r; @@ -199,8 +183,7 @@ glms_vec4_muladds(vec4s a, float s) CGLM_INLINE vec4s -glms_vec4_maxadd(vec4s a, vec4s b) -{ +glms_vec4_maxadd(vec4s a, vec4s b) { vec4s r; glm_vec4_maxadd(a.raw, b.raw, r.raw); return r; @@ -208,8 +191,7 @@ glms_vec4_maxadd(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_minadd(vec4s a, vec4s b) -{ +glms_vec4_minadd(vec4s a, vec4s b) { vec4s r; glm_vec4_minadd(a.raw, b.raw, r.raw); return r; @@ -217,39 +199,34 @@ glms_vec4_minadd(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_negate(vec4s v) -{ +glms_vec4_negate(vec4s v) { glm_vec4_negate(v.raw); return v; } CGLM_INLINE vec4s -glms_vec4_inv(vec4s v) -{ +glms_vec4_inv(vec4s v) { glm_vec4_inv(v.raw); return v; } CGLM_INLINE vec4s -glms_vec4_normalize(vec4s v) -{ +glms_vec4_normalize(vec4s v) { glm_vec4_normalize(v.raw); return v; } CGLM_INLINE float -glms_vec4_distance(vec4s a, vec4s b) -{ +glms_vec4_distance(vec4s a, vec4s b) { return glm_vec4_distance(a.raw, b.raw); } CGLM_INLINE vec4s -glms_vec4_maxv(vec4s a, vec4s b) -{ +glms_vec4_maxv(vec4s a, vec4s b) { vec4s r; glm_vec4_maxv(a.raw, b.raw, r.raw); return r; @@ -257,8 +234,7 @@ glms_vec4_maxv(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_minv(vec4s a, vec4s b) -{ +glms_vec4_minv(vec4s a, vec4s b) { vec4s r; glm_vec4_minv(a.raw, b.raw, r.raw); return r; @@ -266,16 +242,14 @@ glms_vec4_minv(vec4s a, vec4s b) CGLM_INLINE vec4s -glms_vec4_clamp(vec4s v, float minVal, float maxVal) -{ +glms_vec4_clamp(vec4s v, float minVal, float maxVal) { glm_vec4_clamp(v.raw, minVal, maxVal); return v; } CGLM_INLINE vec4s -glms_vec4_lerp(vec4s from, vec4s to, float t) -{ +glms_vec4_lerp(vec4s from, vec4s to, float t) { vec4s r; glm_vec4_lerp(from.raw, to.raw, t, r.raw); return r; diff --git a/include/cglm/types-struct.h b/include/cglm/types-struct.h new file mode 100644 index 0000000..27e04fe --- /dev/null +++ b/include/cglm/types-struct.h @@ -0,0 +1,36 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_types_struct_h +#define cglm_types_struct_h + +#include "types.h" + +typedef union CGLM_ALIGN_IF(16) vec3s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float x; + float y; + float z; + }; +#endif + vec3 raw; +} vec3s; + +typedef union CGLM_ALIGN_IF(16) vec4s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float x; + float y; + float z; + float w; + }; +#endif + vec4 raw; +} vec4s; + +#endif /* cglm_types_struct_h */ diff --git a/include/cglm/types.h b/include/cglm/types.h index 69c2885..1190b73 100644 --- a/include/cglm/types.h +++ b/include/cglm/types.h @@ -32,7 +32,6 @@ # define CGLM_ALIGN_MAT CGLM_ALIGN(16) #endif -// array types typedef float vec2[2]; typedef float vec3[3]; typedef int ivec3[3]; @@ -46,30 +45,6 @@ typedef CGLM_ALIGN_IF(32) vec4 mat4[4]; typedef CGLM_ALIGN_IF(16) vec4 mat4[4]; #endif -// struct types -typedef union CGLM_ALIGN_IF(16) vec3s { -#ifndef CGLM_NO_ANONYMOUS_STRUCT - struct { - float x; - float y; - float z; - }; -#endif - vec3 raw; -} vec3s; - -typedef union CGLM_ALIGN_IF(16) vec4s { -#ifndef CGLM_NO_ANONYMOUS_STRUCT - struct { - float x; - float y; - float z; - float w; - }; -#endif - vec4 raw; -} vec4s; - #define GLM_E 2.71828182845904523536028747135266250 /* e */ #define GLM_LOG2E 1.44269504088896340735992468100189214 /* log2(e) */ #define GLM_LOG10E 0.434294481903251827651128918916605082 /* log10(e) */ diff --git a/test/src/test_common.c b/test/src/test_common.c index 94331f4..f835235 100644 --- a/test/src/test_common.c +++ b/test/src/test_common.c @@ -47,6 +47,14 @@ test_rand_vec3(vec3 dest) { dest[2] = drand48(); } +vec3s +test_rand_vec3s() +{ + vec3s r; + test_rand_vec3(r.raw); + return r; +} + void test_rand_vec4(vec4 dest) { srand((unsigned int)time(NULL)); @@ -127,6 +135,12 @@ test_assert_vec3_eq(vec3 v1, vec3 v2) { assert_true(fabsf(v1[2] - v2[2]) <= 0.000009); } +void +test_assert_vec3s_eq(vec3s v1, vec3s v2) +{ + test_assert_vec3_eq(v1.raw, v2.raw); +} + void test_assert_vec4_eq(vec4 v1, vec4 v2) { assert_true(fabsf(v1[0] - v2[0]) <= 0.000009); /* rounding errors */ diff --git a/test/src/test_common.h b/test/src/test_common.h index c6a2dc4..51d1826 100644 --- a/test/src/test_common.h +++ b/test/src/test_common.h @@ -44,6 +44,9 @@ test_assert_mat3_eq(mat3 m1, mat3 m2); void test_assert_vec3_eq(vec3 v1, vec3 v2); +void +test_assert_vec3s_eq(vec3s v1, vec3s v2); + void test_assert_vec4_eq(vec4 v1, vec4 v2); @@ -59,6 +62,9 @@ test_assert_quat_eq_abs(versor v1, versor v2); void test_rand_vec3(vec3 dest); +vec3s +test_rand_vec3s(); + void test_rand_vec4(vec4 dest); diff --git a/test/src/test_vec3.c b/test/src/test_vec3.c index 6cfc593..4f1f2d1 100644 --- a/test/src/test_vec3.c +++ b/test/src/test_vec3.c @@ -12,6 +12,7 @@ test_vec3(void **state) { mat3 rot1m3; mat4 rot1; vec3 v, v1, v2; + vec3s vs1, vs2, vs3, vs4; /* test zero */ glm_vec3_zero(v); @@ -75,4 +76,12 @@ test_vec3(void **state) { test_assert_vec3_eq(v1, v2); test_assert_vec3_eq(v1, GLM_ZUP); + + /* structs */ + vs1 = test_rand_vec3s(); + vs2 = test_rand_vec3s(); + + vs3 = glms_vec3_add(vs1, vs2); + vs4 = glms_vec3_maxv(vs1, vs3); + test_assert_vec3s_eq(vs3, vs4); } From 8f2f2c55728ef8cf657eb62ac976d64275e3d7ca Mon Sep 17 00:00:00 2001 From: Wasin Thonkaew Date: Fri, 19 Apr 2019 01:47:50 +0800 Subject: [PATCH 08/56] Fix to use armv7 compatible function for glm_vec4_distance Before it used armv8 only function thus it leads to build failed for Android with target of armv7 i.e. armeabi-v7a. This fixed that issue. --- include/cglm/vec4.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index b94cf61..2b62c1b 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -697,11 +697,7 @@ glm_vec4_distance(vec4 a, vec4 b) { return _mm_cvtss_f32(_mm_sqrt_ss(_mm_add_ss(x0, glmm_shuff1(x0, 0, 1, 0, 1)))); #elif defined(CGLM_NEON_FP) - float32x4_t v0; - float32_t r; - v0 = vsubq_f32(vld1q_f32(a), vld1q_f32(b)); - r = vaddvq_f32(vmulq_f32(v0, v0)); - return sqrtf(r); + return glmm_norm(vsubq_f32(glmm_load(a), glmm_load(b))); #else return sqrtf(glm_pow2(b[0] - a[0]) + glm_pow2(b[1] - a[1]) From 461a4009badb0afff795c5e693c0887d5c69b5c5 Mon Sep 17 00:00:00 2001 From: Wasin Thonkaew Date: Fri, 19 Apr 2019 02:07:57 +0800 Subject: [PATCH 09/56] refactor vec4 : glm_vec4_distance for SSE/SSE2 According to suggestion by recp at https://github.com/recp/cglm/issues/82#issuecomment-483051704. --- include/cglm/vec4.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index 2b62c1b..d053ed5 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -690,12 +690,7 @@ CGLM_INLINE float glm_vec4_distance(vec4 a, vec4 b) { #if defined( __SSE__ ) || defined( __SSE2__ ) - __m128 x0; - x0 = _mm_sub_ps(glmm_load(b), glmm_load(a)); - x0 = _mm_mul_ps(x0, x0); - x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2)); - return _mm_cvtss_f32(_mm_sqrt_ss(_mm_add_ss(x0, - glmm_shuff1(x0, 0, 1, 0, 1)))); + return glmm_norm(_mm_sub_ps(glmm_load(b), glmm_load(a))); #elif defined(CGLM_NEON_FP) return glmm_norm(vsubq_f32(glmm_load(a), glmm_load(b))); #else From 5b80e0e3c22af24c19c44c403b4476d2909c12e0 Mon Sep 17 00:00:00 2001 From: Wasin Thonkaew Date: Fri, 19 Apr 2019 03:04:00 +0800 Subject: [PATCH 10/56] test cases for glm_vec4_distance --- test/src/test_common.c | 1 + test/src/test_vec4.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/test/src/test_common.c b/test/src/test_common.c index d41d3cb..0afc235 100644 --- a/test/src/test_common.c +++ b/test/src/test_common.c @@ -5,6 +5,7 @@ #include "test_common.h" #include +#include #define m 4 #define n 4 diff --git a/test/src/test_vec4.c b/test/src/test_vec4.c index 8e4fda5..daf4e00 100644 --- a/test/src/test_vec4.c +++ b/test/src/test_vec4.c @@ -93,6 +93,13 @@ test_vec4(void **state) { /* 3. test SIMD norm2 */ test_rand_vec4(v); test_assert_eqf(test_vec4_norm2(v), glm_vec4_norm2(v)); + + /* 4. test SSE/SIMD distance */ + test_rand_vec4(v1); + test_rand_vec4(v2); + d1 = glm_vec4_distance(v1, v2); + d2 = sqrtf(powf(v1[0]-v2[0], 2.0f) + pow(v1[1]-v2[1], 2.0f) + pow(v1[2]-v2[2], 2.0f) + pow(v1[3]-v2[3], 2.0f)); + assert_true(fabsf(d1 - d2) <= 0.000009); } /* test zero */ From d85b5234a9703c81b823348fb44fddd21fafa13c Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 21 Apr 2019 00:19:17 +0300 Subject: [PATCH 11/56] ci: print test logs after failure --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index c2c0c84..9f2a546 100644 --- a/.travis.yml +++ b/.travis.yml @@ -57,3 +57,6 @@ after_success: --gcov-options '\-lp' --verbose; fi + +after_failure: + - cat ./test-suite.log From 73e6b65da08b210401e9e24f923f7627e7c94ceb Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sat, 27 Apr 2019 09:36:15 +0300 Subject: [PATCH 12/56] test: fix comparing floats in bezier tests --- test/src/test_bezier.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/src/test_bezier.c b/test/src/test_bezier.c index bd7c796..1c7bb11 100644 --- a/test/src/test_bezier.c +++ b/test/src/test_bezier.c @@ -51,8 +51,8 @@ test_bezier(void **state) { Bs_plain = test_bezier_plain(s, p0, c0, c1, p1); assert_true(glm_eq(Bs, Bs_plain)); - assert_true(glm_eq(smc, Bs_plain)); - assert_true(glm_eq(Bs, smc)); + test_assert_eqf(smc, Bs_plain); + test_assert_eqf(Bs, smc); /* test cubic hermite */ smc = glm_smc(s, GLM_HERMITE_MAT, (vec4){p0, p1, c0, c1}); From 6ed275734b4c6a6de595c6eccc2cc9c6fa4c70c6 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 28 Apr 2019 12:15:43 +0300 Subject: [PATCH 13/56] mark readonly parameters as const --- include/cglm/affine-mat.h | 4 +- include/cglm/affine.h | 36 +++++++-------- include/cglm/box.h | 37 ++++++++-------- include/cglm/cam.h | 18 ++++---- include/cglm/color.h | 2 +- include/cglm/curve.h | 2 +- include/cglm/euler.h | 20 ++++----- include/cglm/frustum.h | 16 +++---- include/cglm/mat4.h | 38 ++++++++-------- include/cglm/project.h | 6 +-- include/cglm/quat.h | 70 +++++++++++++++-------------- include/cglm/simd/avx/affine.h | 2 +- include/cglm/simd/avx/mat4.h | 2 +- include/cglm/simd/neon/mat4.h | 2 +- include/cglm/simd/sse2/affine.h | 4 +- include/cglm/simd/sse2/mat3.h | 2 +- include/cglm/simd/sse2/mat4.h | 12 ++--- include/cglm/simd/sse2/quat.h | 2 +- include/cglm/simd/x86.h | 4 +- include/cglm/sphere.h | 10 ++--- include/cglm/vec3-ext.h | 24 +++++----- include/cglm/vec3.h | 78 ++++++++++++++++----------------- include/cglm/vec4-ext.h | 24 +++++----- include/cglm/vec4.h | 56 +++++++++++------------ 24 files changed, 237 insertions(+), 234 deletions(-) diff --git a/include/cglm/affine-mat.h b/include/cglm/affine-mat.h index f58749b..9d78633 100644 --- a/include/cglm/affine-mat.h +++ b/include/cglm/affine-mat.h @@ -44,7 +44,7 @@ */ CGLM_INLINE void -glm_mul(mat4 m1, mat4 m2, mat4 dest) { +glm_mul(const mat4 m1, const mat4 m2, mat4 dest) { #ifdef __AVX__ glm_mul_avx(m1, m2, dest); #elif defined( __SSE__ ) || defined( __SSE2__ ) @@ -100,7 +100,7 @@ glm_mul(mat4 m1, mat4 m2, mat4 dest) { */ CGLM_INLINE void -glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) { +glm_mul_rot(const mat4 m1, const mat4 m2, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mul_rot_sse2(m1, m2, dest); #else diff --git a/include/cglm/affine.h b/include/cglm/affine.h index 84ead4b..af567b6 100644 --- a/include/cglm/affine.h +++ b/include/cglm/affine.h @@ -42,7 +42,7 @@ CGLM_INLINE void -glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest); +glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest); /*! * @brief translate existing transform matrix by v vector @@ -53,7 +53,7 @@ glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest); */ CGLM_INLINE void -glm_translate(mat4 m, vec3 v) { +glm_translate(mat4 m, const vec3 v) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(m[3], _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_load(m[0]), @@ -89,7 +89,7 @@ glm_translate(mat4 m, vec3 v) { */ CGLM_INLINE void -glm_translate_to(mat4 m, vec3 v, mat4 dest) { +glm_translate_to(const mat4 m, const vec3 v, mat4 dest) { glm_mat4_copy(m, dest); glm_translate(dest, v); } @@ -168,7 +168,7 @@ glm_translate_z(mat4 m, float z) { */ CGLM_INLINE void -glm_translate_make(mat4 m, vec3 v) { +glm_translate_make(mat4 m, const vec3 v) { glm_mat4_identity(m); glm_vec3_copy(v, m[3]); } @@ -183,7 +183,7 @@ glm_translate_make(mat4 m, vec3 v) { */ CGLM_INLINE void -glm_scale_to(mat4 m, vec3 v, mat4 dest) { +glm_scale_to(const mat4 m, const vec3 v, mat4 dest) { glm_vec4_scale(m[0], v[0], dest[0]); glm_vec4_scale(m[1], v[1], dest[1]); glm_vec4_scale(m[2], v[2], dest[2]); @@ -199,7 +199,7 @@ glm_scale_to(mat4 m, vec3 v, mat4 dest) { */ CGLM_INLINE void -glm_scale_make(mat4 m, vec3 v) { +glm_scale_make(mat4 m, const vec3 v) { glm_mat4_identity(m); m[0][0] = v[0]; m[1][1] = v[1]; @@ -215,7 +215,7 @@ glm_scale_make(mat4 m, vec3 v) { */ CGLM_INLINE void -glm_scale(mat4 m, vec3 v) { +glm_scale(mat4 m, const vec3 v) { glm_scale_to(m, v, m); } @@ -243,7 +243,7 @@ glm_scale_uni(mat4 m, float s) { */ CGLM_INLINE void -glm_rotate_x(mat4 m, float angle, mat4 dest) { +glm_rotate_x(const mat4 m, float angle, mat4 dest) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -268,7 +268,7 @@ glm_rotate_x(mat4 m, float angle, mat4 dest) { */ CGLM_INLINE void -glm_rotate_y(mat4 m, float angle, mat4 dest) { +glm_rotate_y(const mat4 m, float angle, mat4 dest) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -293,7 +293,7 @@ glm_rotate_y(mat4 m, float angle, mat4 dest) { */ CGLM_INLINE void -glm_rotate_z(mat4 m, float angle, mat4 dest) { +glm_rotate_z(const mat4 m, float angle, mat4 dest) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -319,7 +319,7 @@ glm_rotate_z(mat4 m, float angle, mat4 dest) { */ CGLM_INLINE void -glm_rotate_make(mat4 m, float angle, vec3 axis) { +glm_rotate_make(mat4 m, float angle, const vec3 axis) { CGLM_ALIGN(8) vec3 axisn, v, vs; float c; @@ -350,7 +350,7 @@ glm_rotate_make(mat4 m, float angle, vec3 axis) { */ CGLM_INLINE void -glm_rotate(mat4 m, float angle, vec3 axis) { +glm_rotate(mat4 m, float angle, const vec3 axis) { CGLM_ALIGN_MAT mat4 rot; glm_rotate_make(rot, angle, axis); glm_mul_rot(m, rot, m); @@ -367,7 +367,7 @@ glm_rotate(mat4 m, float angle, vec3 axis) { */ CGLM_INLINE void -glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { +glm_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -392,7 +392,7 @@ glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { */ CGLM_INLINE void -glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { +glm_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -410,7 +410,7 @@ glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { */ CGLM_INLINE void -glm_decompose_scalev(mat4 m, vec3 s) { +glm_decompose_scalev(const mat4 m, vec3 s) { s[0] = glm_vec3_norm(m[0]); s[1] = glm_vec3_norm(m[1]); s[2] = glm_vec3_norm(m[2]); @@ -426,7 +426,7 @@ glm_decompose_scalev(mat4 m, vec3 s) { */ CGLM_INLINE bool -glm_uniscaled(mat4 m) { +glm_uniscaled(const mat4 m) { CGLM_ALIGN(8) vec3 s; glm_decompose_scalev(m, s); return glm_vec3_eq_all(s); @@ -442,7 +442,7 @@ glm_uniscaled(mat4 m) { */ CGLM_INLINE void -glm_decompose_rs(mat4 m, mat4 r, vec3 s) { +glm_decompose_rs(const mat4 m, mat4 r, vec3 s) { CGLM_ALIGN(16) vec4 t = {0.0f, 0.0f, 0.0f, 1.0f}; CGLM_ALIGN(8) vec3 v; @@ -482,7 +482,7 @@ glm_decompose_rs(mat4 m, mat4 r, vec3 s) { */ CGLM_INLINE void -glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s) { +glm_decompose(const mat4 m, vec4 t, mat4 r, vec3 s) { glm_vec4_copy(m[3], t); glm_decompose_rs(m, r, s); } diff --git a/include/cglm/box.h b/include/cglm/box.h index 2250c2a..c218602 100644 --- a/include/cglm/box.h +++ b/include/cglm/box.h @@ -22,7 +22,7 @@ */ CGLM_INLINE void -glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { +glm_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) { vec3 v[2], xa, xb, ya, yb, za, zb; glm_vec3_scale(m[0], box[0][0], xa); @@ -62,7 +62,7 @@ glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { */ CGLM_INLINE void -glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { +glm_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) { dest[0][0] = glm_min(box1[0][0], box2[0][0]); dest[0][1] = glm_min(box1[0][1], box2[0][1]); dest[0][2] = glm_min(box1[0][2], box2[0][2]); @@ -85,7 +85,7 @@ glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { */ CGLM_INLINE void -glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { +glm_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) { dest[0][0] = glm_max(box[0][0], cropBox[0][0]); dest[0][1] = glm_max(box[0][1], cropBox[0][1]); dest[0][2] = glm_max(box[0][2], cropBox[0][2]); @@ -109,10 +109,10 @@ glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { */ CGLM_INLINE void -glm_aabb_crop_until(vec3 box[2], - vec3 cropBox[2], - vec3 clampBox[2], - vec3 dest[2]) { +glm_aabb_crop_until(const vec3 box[2], + const vec3 cropBox[2], + const vec3 clampBox[2], + vec3 dest[2]) { glm_aabb_crop(box, cropBox, dest); glm_aabb_merge(clampBox, dest, dest); } @@ -133,9 +133,10 @@ glm_aabb_crop_until(vec3 box[2], */ CGLM_INLINE bool -glm_aabb_frustum(vec3 box[2], vec4 planes[6]) { - float *p, dp; - int i; +glm_aabb_frustum(const vec3 box[2], const vec4 planes[6]) { + const float *p; + float dp; + int i; for (i = 0; i < 6; i++) { p = planes[i]; @@ -169,7 +170,7 @@ glm_aabb_invalidate(vec3 box[2]) { */ CGLM_INLINE bool -glm_aabb_isvalid(vec3 box[2]) { +glm_aabb_isvalid(const vec3 box[2]) { return glm_vec3_max(box[0]) != FLT_MAX && glm_vec3_min(box[1]) != -FLT_MAX; } @@ -181,7 +182,7 @@ glm_aabb_isvalid(vec3 box[2]) { */ CGLM_INLINE float -glm_aabb_size(vec3 box[2]) { +glm_aabb_size(const vec3 box[2]) { return glm_vec3_distance(box[0], box[1]); } @@ -192,7 +193,7 @@ glm_aabb_size(vec3 box[2]) { */ CGLM_INLINE float -glm_aabb_radius(vec3 box[2]) { +glm_aabb_radius(const vec3 box[2]) { return glm_aabb_size(box) * 0.5f; } @@ -204,7 +205,7 @@ glm_aabb_radius(vec3 box[2]) { */ CGLM_INLINE void -glm_aabb_center(vec3 box[2], vec3 dest) { +glm_aabb_center(const vec3 box[2], vec3 dest) { glm_vec3_center(box[0], box[1], dest); } @@ -216,7 +217,7 @@ glm_aabb_center(vec3 box[2], vec3 dest) { */ CGLM_INLINE bool -glm_aabb_aabb(vec3 box[2], vec3 other[2]) { +glm_aabb_aabb(const vec3 box[2], const vec3 other[2]) { return (box[0][0] <= other[1][0] && box[1][0] >= other[0][0]) && (box[0][1] <= other[1][1] && box[1][1] >= other[0][1]) && (box[0][2] <= other[1][2] && box[1][2] >= other[0][2]); @@ -233,7 +234,7 @@ glm_aabb_aabb(vec3 box[2], vec3 other[2]) { */ CGLM_INLINE bool -glm_aabb_sphere(vec3 box[2], vec4 s) { +glm_aabb_sphere(const vec3 box[2], const vec4 s) { float dmin; int a, b, c; @@ -256,7 +257,7 @@ glm_aabb_sphere(vec3 box[2], vec4 s) { */ CGLM_INLINE bool -glm_aabb_point(vec3 box[2], vec3 point) { +glm_aabb_point(const vec3 box[2], const vec3 point) { return (point[0] >= box[0][0] && point[0] <= box[1][0]) && (point[1] >= box[0][1] && point[1] <= box[1][1]) && (point[2] >= box[0][2] && point[2] <= box[1][2]); @@ -270,7 +271,7 @@ glm_aabb_point(vec3 box[2], vec3 point) { */ CGLM_INLINE bool -glm_aabb_contains(vec3 box[2], vec3 other[2]) { +glm_aabb_contains(const vec3 box[2], const vec3 other[2]) { return (box[0][0] <= other[0][0] && box[1][0] >= other[1][0]) && (box[0][1] <= other[0][1] && box[1][1] >= other[1][1]) && (box[0][2] <= other[0][2] && box[1][2] >= other[1][2]); diff --git a/include/cglm/cam.h b/include/cglm/cam.h index e77b989..0e48b16 100644 --- a/include/cglm/cam.h +++ b/include/cglm/cam.h @@ -147,7 +147,7 @@ glm_ortho(float left, */ CGLM_INLINE void -glm_ortho_aabb(vec3 box[2], mat4 dest) { +glm_ortho_aabb(const vec3 box[2], mat4 dest) { glm_ortho(box[0][0], box[1][0], box[0][1], box[1][1], -box[1][2], -box[0][2], @@ -165,7 +165,7 @@ glm_ortho_aabb(vec3 box[2], mat4 dest) { */ CGLM_INLINE void -glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { +glm_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) { glm_ortho(box[0][0] - padding, box[1][0] + padding, box[0][1] - padding, box[1][1] + padding, -(box[1][2] + padding), -(box[0][2] - padding), @@ -183,7 +183,7 @@ glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { */ CGLM_INLINE void -glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { +glm_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest) { glm_ortho(box[0][0], box[1][0], box[0][1], box[1][1], -(box[1][2] + padding), -(box[0][2] - padding), @@ -218,9 +218,7 @@ glm_ortho_default(float aspect, mat4 dest) { */ CGLM_INLINE void -glm_ortho_default_s(float aspect, - float size, - mat4 dest) { +glm_ortho_default_s(float aspect, float size, mat4 dest) { if (aspect >= 1.0f) { glm_ortho(-size * aspect, size * aspect, @@ -338,10 +336,10 @@ glm_perspective_resize(float aspect, mat4 proj) { */ CGLM_INLINE void -glm_lookat(vec3 eye, - vec3 center, - vec3 up, - mat4 dest) { +glm_lookat(const vec3 eye, + const vec3 center, + const vec3 up, + mat4 dest) { CGLM_ALIGN(8) vec3 f, u, s; glm_vec3_sub(center, eye, f); diff --git a/include/cglm/color.h b/include/cglm/color.h index 69566ad..27d77b8 100644 --- a/include/cglm/color.h +++ b/include/cglm/color.h @@ -18,7 +18,7 @@ */ CGLM_INLINE float -glm_luminance(vec3 rgb) { +glm_luminance(const vec3 rgb) { vec3 l = {0.212671f, 0.715160f, 0.072169f}; return glm_dot(rgb, l); } diff --git a/include/cglm/curve.h b/include/cglm/curve.h index 5033be5..bcc104f 100644 --- a/include/cglm/curve.h +++ b/include/cglm/curve.h @@ -31,7 +31,7 @@ */ CGLM_INLINE float -glm_smc(float s, mat4 m, vec4 c) { +glm_smc(float s, const mat4 m, const vec4 c) { vec4 vs; glm_vec4_cubic(s, vs); return glm_mat4_rmc(vs, m, c); diff --git a/include/cglm/euler.h b/include/cglm/euler.h index 1ff5f6d..df6c0bc 100644 --- a/include/cglm/euler.h +++ b/include/cglm/euler.h @@ -57,7 +57,7 @@ typedef enum glm_euler_sq { CGLM_INLINE glm_euler_sq -glm_euler_order(int ord[3]) { +glm_euler_order(const int ord[3]) { return (glm_euler_sq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4); } @@ -69,7 +69,7 @@ glm_euler_order(int ord[3]) { */ CGLM_INLINE void -glm_euler_angles(mat4 m, vec3 dest) { +glm_euler_angles(const mat4 m, vec3 dest) { float m00, m01, m10, m11, m20, m21, m22; float thetaX, thetaY, thetaZ; @@ -107,7 +107,7 @@ glm_euler_angles(mat4 m, vec3 dest) { */ CGLM_INLINE void -glm_euler_xyz(vec3 angles, mat4 dest) { +glm_euler_xyz(const vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, czsx, cxcz, sysz; @@ -145,7 +145,7 @@ glm_euler_xyz(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler(vec3 angles, mat4 dest) { +glm_euler(const vec3 angles, mat4 dest) { glm_euler_xyz(angles, dest); } @@ -157,7 +157,7 @@ glm_euler(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_xzy(vec3 angles, mat4 dest) { +glm_euler_xzy(const vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, sxsy, cysx, cxsy, cxcy; @@ -197,7 +197,7 @@ glm_euler_xzy(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_yxz(vec3 angles, mat4 dest) { +glm_euler_yxz(const vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, cycz, sysz, czsy, cysz; @@ -236,7 +236,7 @@ glm_euler_yxz(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_yzx(vec3 angles, mat4 dest) { +glm_euler_yzx(const vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, sxsy, cxcy, cysx, cxsy; @@ -275,7 +275,7 @@ glm_euler_yzx(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_zxy(vec3 angles, mat4 dest) { +glm_euler_zxy(const vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, cycz, sxsy, cysz; @@ -313,7 +313,7 @@ glm_euler_zxy(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_zyx(vec3 angles, mat4 dest) { +glm_euler_zyx(const vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, czsx, cxcz, sysz; @@ -352,7 +352,7 @@ glm_euler_zyx(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_by_order(vec3 angles, glm_euler_sq ord, mat4 dest) { +glm_euler_by_order(const vec3 angles, glm_euler_sq ord, mat4 dest) { float cx, cy, cz, sx, sy, sz; diff --git a/include/cglm/frustum.h b/include/cglm/frustum.h index 78b39d2..755fecd 100644 --- a/include/cglm/frustum.h +++ b/include/cglm/frustum.h @@ -69,7 +69,7 @@ */ CGLM_INLINE void -glm_frustum_planes(mat4 m, vec4 dest[6]) { +glm_frustum_planes(const mat4 m, vec4 dest[6]) { mat4 t; glm_mat4_transpose_to(m, t); @@ -114,7 +114,7 @@ glm_frustum_planes(mat4 m, vec4 dest[6]) { */ CGLM_INLINE void -glm_frustum_corners(mat4 invMat, vec4 dest[8]) { +glm_frustum_corners(const mat4 invMat, vec4 dest[8]) { vec4 c[8]; /* indexOf(nearCoord) = indexOf(farCoord) + 4 */ @@ -157,7 +157,7 @@ glm_frustum_corners(mat4 invMat, vec4 dest[8]) { */ CGLM_INLINE void -glm_frustum_center(vec4 corners[8], vec4 dest) { +glm_frustum_center(const vec4 corners[8], vec4 dest) { vec4 center; glm_vec4_copy(corners[0], center); @@ -182,7 +182,7 @@ glm_frustum_center(vec4 corners[8], vec4 dest) { */ CGLM_INLINE void -glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { +glm_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) { vec4 v; vec3 min, max; int i; @@ -220,10 +220,10 @@ glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { */ CGLM_INLINE void -glm_frustum_corners_at(vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]) { +glm_frustum_corners_at(const vec4 corners[8], + float splitDist, + float farDist, + vec4 planeCorners[4]) { vec4 corner; float dist, sc; diff --git a/include/cglm/mat4.h b/include/cglm/mat4.h index e6b916b..2a87fba 100644 --- a/include/cglm/mat4.h +++ b/include/cglm/mat4.h @@ -100,7 +100,7 @@ */ CGLM_INLINE void -glm_mat4_ucopy(mat4 mat, mat4 dest) { +glm_mat4_ucopy(const mat4 mat, mat4 dest) { dest[0][0] = mat[0][0]; dest[1][0] = mat[1][0]; dest[0][1] = mat[0][1]; dest[1][1] = mat[1][1]; dest[0][2] = mat[0][2]; dest[1][2] = mat[1][2]; @@ -120,7 +120,7 @@ glm_mat4_ucopy(mat4 mat, mat4 dest) { */ CGLM_INLINE void -glm_mat4_copy(mat4 mat, mat4 dest) { +glm_mat4_copy(const mat4 mat, mat4 dest) { #ifdef __AVX__ glmm_store256(dest[0], glmm_load256(mat[0])); glmm_store256(dest[2], glmm_load256(mat[2])); @@ -170,7 +170,7 @@ glm_mat4_identity(mat4 mat) { */ CGLM_INLINE void -glm_mat4_identity_array(mat4 * __restrict mat, size_t count) { +glm_mat4_identity_array(mat4 * const __restrict mat, size_t count) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; size_t i; @@ -199,7 +199,7 @@ glm_mat4_zero(mat4 mat) { */ CGLM_INLINE void -glm_mat4_pick3(mat4 mat, mat3 dest) { +glm_mat4_pick3(const mat4 mat, mat3 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -223,7 +223,7 @@ glm_mat4_pick3(mat4 mat, mat3 dest) { */ CGLM_INLINE void -glm_mat4_pick3t(mat4 mat, mat3 dest) { +glm_mat4_pick3t(const mat4 mat, mat3 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[1][0]; dest[0][2] = mat[2][0]; @@ -245,7 +245,7 @@ glm_mat4_pick3t(mat4 mat, mat3 dest) { */ CGLM_INLINE void -glm_mat4_ins3(mat3 mat, mat4 dest) { +glm_mat4_ins3(const mat3 mat, mat4 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -275,7 +275,7 @@ glm_mat4_ins3(mat3 mat, mat4 dest) { */ CGLM_INLINE void -glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { +glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) { #ifdef __AVX__ glm_mat4_mul_avx(m1, m2, dest); #elif defined( __SSE__ ) || defined( __SSE2__ ) @@ -333,7 +333,7 @@ glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { */ CGLM_INLINE void -glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { +glm_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) { uint32_t i; #ifdef DEBUG @@ -355,7 +355,7 @@ glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { */ CGLM_INLINE void -glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) { +glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_mulv_sse2(m, v, dest); #else @@ -377,7 +377,7 @@ glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) { */ CGLM_INLINE float -glm_mat4_trace(mat4 m) { +glm_mat4_trace(const mat4 m) { return m[0][0] + m[1][1] + m[2][2] + m[3][3]; } @@ -390,7 +390,7 @@ glm_mat4_trace(mat4 m) { */ CGLM_INLINE float -glm_mat4_trace3(mat4 m) { +glm_mat4_trace3(const mat4 m) { return m[0][0] + m[1][1] + m[2][2]; } @@ -402,7 +402,7 @@ glm_mat4_trace3(mat4 m) { */ CGLM_INLINE void -glm_mat4_quat(mat4 m, versor dest) { +glm_mat4_quat(const mat4 m, versor dest) { float trace, r, rinv; /* it seems using like m12 instead of m[1][2] causes extra instructions */ @@ -453,7 +453,7 @@ glm_mat4_quat(mat4 m, versor dest) { */ CGLM_INLINE void -glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { +glm_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) { vec4 res; glm_vec4(v, last, res); glm_mat4_mulv(m, res, res); @@ -470,7 +470,7 @@ glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { */ CGLM_INLINE void -glm_mat4_transpose_to(mat4 m, mat4 dest) { +glm_mat4_transpose_to(const mat4 m, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_transp_sse2(m, dest); #else @@ -553,7 +553,7 @@ glm_mat4_scale(mat4 m, float s) { */ CGLM_INLINE float -glm_mat4_det(mat4 mat) { +glm_mat4_det(const mat4 mat) { #if defined( __SSE__ ) || defined( __SSE2__ ) return glm_mat4_det_sse2(mat); #else @@ -586,7 +586,7 @@ glm_mat4_det(mat4 mat) { */ CGLM_INLINE void -glm_mat4_inv(mat4 mat, mat4 dest) { +glm_mat4_inv(const mat4 mat, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_inv_sse2(mat, dest); #else @@ -647,7 +647,7 @@ glm_mat4_inv(mat4 mat, mat4 dest) { */ CGLM_INLINE void -glm_mat4_inv_fast(mat4 mat, mat4 dest) { +glm_mat4_inv_fast(const mat4 mat, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_inv_fast_sse2(mat, dest); #else @@ -680,7 +680,7 @@ glm_mat4_swap_col(mat4 mat, int col1, int col2) { */ CGLM_INLINE void -glm_mat4_swap_row(mat4 mat, int row1, int row2) { +glm_mat4_swap_row(mat4 mat, const int row1, const int row2) { CGLM_ALIGN(16) vec4 tmp; tmp[0] = mat[0][row1]; tmp[1] = mat[1][row1]; @@ -714,7 +714,7 @@ glm_mat4_swap_row(mat4 mat, int row1, int row2) { */ CGLM_INLINE float -glm_mat4_rmc(vec4 r, mat4 m, vec4 c) { +glm_mat4_rmc(const vec4 r, const mat4 m, const vec4 c) { vec4 tmp; glm_mat4_mulv(m, c, tmp); return glm_vec4_dot(r, tmp); diff --git a/include/cglm/project.h b/include/cglm/project.h index 1336222..f62b001 100644 --- a/include/cglm/project.h +++ b/include/cglm/project.h @@ -41,7 +41,7 @@ */ CGLM_INLINE void -glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { +glm_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) { vec4 v; v[0] = 2.0f * (pos[0] - vp[0]) / vp[2] - 1.0f; @@ -80,7 +80,7 @@ glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { */ CGLM_INLINE void -glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { +glm_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { mat4 inv; glm_mat4_inv(m, inv); glm_unprojecti(pos, inv, vp, dest); @@ -100,7 +100,7 @@ glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { */ CGLM_INLINE void -glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { +glm_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { CGLM_ALIGN(16) vec4 pos4, vone = GLM_VEC4_ONE_INIT; glm_vec4(pos, 1.0f, pos4); diff --git a/include/cglm/quat.h b/include/cglm/quat.h index f5f29af..e6ef0f4 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -68,15 +68,15 @@ glm_mat4_identity(mat4 mat); CGLM_INLINE void -glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); +glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest); CGLM_INLINE void -glm_mul_rot(mat4 m1, mat4 m2, mat4 dest); +glm_mul_rot(const mat4 m1, const mat4 m2, mat4 dest); CGLM_INLINE void -glm_translate(mat4 m, vec3 v); +glm_translate(mat4 m, const vec3 v); /* * IMPORTANT: @@ -113,7 +113,7 @@ glm_quat_identity(versor q) { */ CGLM_INLINE void -glm_quat_identity_array(versor * __restrict q, size_t count) { +glm_quat_identity_array(versor * const __restrict q, size_t count) { CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT; size_t i; @@ -149,7 +149,7 @@ glm_quat_init(versor q, float x, float y, float z, float w) { */ CGLM_INLINE void -glm_quatv(versor q, float angle, vec3 axis) { +glm_quatv(versor q, float angle, const vec3 axis) { CGLM_ALIGN(8) vec3 k; float a, c, s; @@ -189,7 +189,7 @@ glm_quat(versor q, float angle, float x, float y, float z) { */ CGLM_INLINE void -glm_quat_copy(versor q, versor dest) { +glm_quat_copy(const versor q, versor dest) { glm_vec4_copy(q, dest); } @@ -200,7 +200,7 @@ glm_quat_copy(versor q, versor dest) { */ CGLM_INLINE float -glm_quat_norm(versor q) { +glm_quat_norm(const versor q) { return glm_vec4_norm(q); } @@ -212,7 +212,7 @@ glm_quat_norm(versor q) { */ CGLM_INLINE void -glm_quat_normalize_to(versor q, versor dest) { +glm_quat_normalize_to(const versor q, versor dest) { #if defined( __SSE2__ ) || defined( __SSE2__ ) __m128 xdot, x0; float dot; @@ -260,7 +260,7 @@ glm_quat_normalize(versor q) { */ CGLM_INLINE float -glm_quat_dot(versor p, versor q) { +glm_quat_dot(const versor p, const versor q) { return glm_vec4_dot(p, q); } @@ -272,7 +272,7 @@ glm_quat_dot(versor p, versor q) { */ CGLM_INLINE void -glm_quat_conjugate(versor q, versor dest) { +glm_quat_conjugate(const versor q, versor dest) { glm_vec4_negate_to(q, dest); dest[3] = -dest[3]; } @@ -285,7 +285,7 @@ glm_quat_conjugate(versor q, versor dest) { */ CGLM_INLINE void -glm_quat_inv(versor q, versor dest) { +glm_quat_inv(const versor q, versor dest) { CGLM_ALIGN(16) versor conj; glm_quat_conjugate(q, conj); glm_vec4_scale(conj, 1.0f / glm_vec4_norm2(q), dest); @@ -300,7 +300,7 @@ glm_quat_inv(versor q, versor dest) { */ CGLM_INLINE void -glm_quat_add(versor p, versor q, versor dest) { +glm_quat_add(const versor p, const versor q, versor dest) { glm_vec4_add(p, q, dest); } @@ -313,7 +313,7 @@ glm_quat_add(versor p, versor q, versor dest) { */ CGLM_INLINE void -glm_quat_sub(versor p, versor q, versor dest) { +glm_quat_sub(const versor p, const versor q, versor dest) { glm_vec4_sub(p, q, dest); } @@ -324,7 +324,7 @@ glm_quat_sub(versor p, versor q, versor dest) { */ CGLM_INLINE float -glm_quat_real(versor q) { +glm_quat_real(const versor q) { return q[3]; } @@ -336,7 +336,7 @@ glm_quat_real(versor q) { */ CGLM_INLINE void -glm_quat_imag(versor q, vec3 dest) { +glm_quat_imag(const versor q, vec3 dest) { dest[0] = q[0]; dest[1] = q[1]; dest[2] = q[2]; @@ -349,7 +349,7 @@ glm_quat_imag(versor q, vec3 dest) { */ CGLM_INLINE void -glm_quat_imagn(versor q, vec3 dest) { +glm_quat_imagn(const versor q, vec3 dest) { glm_normalize_to(q, dest); } @@ -360,7 +360,7 @@ glm_quat_imagn(versor q, vec3 dest) { */ CGLM_INLINE float -glm_quat_imaglen(versor q) { +glm_quat_imaglen(const versor q) { return glm_vec3_norm(q); } @@ -371,7 +371,7 @@ glm_quat_imaglen(versor q) { */ CGLM_INLINE float -glm_quat_angle(versor q) { +glm_quat_angle(const versor q) { /* sin(theta / 2) = length(x*x + y*y + z*z) cos(theta / 2) = w @@ -388,7 +388,7 @@ glm_quat_angle(versor q) { */ CGLM_INLINE void -glm_quat_axis(versor q, versor dest) { +glm_quat_axis(const versor q, versor dest) { glm_quat_imagn(q, dest); } @@ -406,7 +406,7 @@ glm_quat_axis(versor q, versor dest) { */ CGLM_INLINE void -glm_quat_mul(versor p, versor q, versor dest) { +glm_quat_mul(const versor p, const versor q, versor dest) { /* + (a1 b2 + b1 a2 + c1 d2 − d1 c2)i + (a1 c2 − b1 d2 + c1 a2 + d1 b2)j @@ -431,7 +431,7 @@ glm_quat_mul(versor p, versor q, versor dest) { */ CGLM_INLINE void -glm_quat_mat4(versor q, mat4 dest) { +glm_quat_mat4(const versor q, mat4 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -478,7 +478,7 @@ glm_quat_mat4(versor q, mat4 dest) { */ CGLM_INLINE void -glm_quat_mat4t(versor q, mat4 dest) { +glm_quat_mat4t(const versor q, mat4 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -525,7 +525,7 @@ glm_quat_mat4t(versor q, mat4 dest) { */ CGLM_INLINE void -glm_quat_mat3(versor q, mat3 dest) { +glm_quat_mat3(const versor q, mat3 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -564,7 +564,7 @@ glm_quat_mat3(versor q, mat3 dest) { */ CGLM_INLINE void -glm_quat_mat3t(versor q, mat3 dest) { +glm_quat_mat3t(const versor q, mat3 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -606,7 +606,7 @@ glm_quat_mat3t(versor q, mat3 dest) { */ CGLM_INLINE void -glm_quat_lerp(versor from, versor to, float t, versor dest) { +glm_quat_lerp(const versor from, const versor to, float t, versor dest) { glm_vec4_lerp(from, to, t, dest); } @@ -621,7 +621,7 @@ glm_quat_lerp(versor from, versor to, float t, versor dest) { */ CGLM_INLINE void -glm_quat_slerp(versor from, versor to, float t, versor dest) { +glm_quat_slerp(const versor from, const versor to, float t, versor dest) { CGLM_ALIGN(16) vec4 q1, q2; float cosTheta, sinTheta, angle; @@ -664,7 +664,7 @@ glm_quat_slerp(versor from, versor to, float t, versor dest) { */ CGLM_INLINE void -glm_quat_look(vec3 eye, versor ori, mat4 dest) { +glm_quat_look(const vec3 eye, const versor ori, mat4 dest) { /* orientation */ glm_quat_mat4t(ori, dest); @@ -683,7 +683,7 @@ glm_quat_look(vec3 eye, versor ori, mat4 dest) { */ CGLM_INLINE void -glm_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) { +glm_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) { CGLM_ALIGN(8) vec3 axis; float dot, angle; @@ -717,7 +717,11 @@ glm_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) { */ CGLM_INLINE void -glm_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) { +glm_quat_forp(const vec3 from, + const vec3 to, + const vec3 fwd, + const vec3 up, + versor dest) { CGLM_ALIGN(8) vec3 dir; glm_vec3_sub(to, from, dir); glm_quat_for(dir, fwd, up, dest); @@ -732,7 +736,7 @@ glm_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) { */ CGLM_INLINE void -glm_quat_rotatev(versor q, vec3 v, vec3 dest) { +glm_quat_rotatev(const versor q, const vec3 v, vec3 dest) { CGLM_ALIGN(16) versor p; CGLM_ALIGN(8) vec3 u, v1, v2; float s; @@ -760,7 +764,7 @@ glm_quat_rotatev(versor q, vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_quat_rotate(mat4 m, versor q, mat4 dest) { +glm_quat_rotate(const mat4 m, const versor q, mat4 dest) { CGLM_ALIGN_MAT mat4 rot; glm_quat_mat4(q, rot); glm_mul_rot(m, rot, dest); @@ -775,7 +779,7 @@ glm_quat_rotate(mat4 m, versor q, mat4 dest) { */ CGLM_INLINE void -glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) { +glm_quat_rotate_at(mat4 m, const versor q, const vec3 pivot) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -799,7 +803,7 @@ glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) { */ CGLM_INLINE void -glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { +glm_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); diff --git a/include/cglm/simd/avx/affine.h b/include/cglm/simd/avx/affine.h index b02ff0c..0d0454e 100644 --- a/include/cglm/simd/avx/affine.h +++ b/include/cglm/simd/avx/affine.h @@ -16,7 +16,7 @@ CGLM_INLINE void -glm_mul_avx(mat4 m1, mat4 m2, mat4 dest) { +glm_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9; diff --git a/include/cglm/simd/avx/mat4.h b/include/cglm/simd/avx/mat4.h index 944769b..a458d4c 100644 --- a/include/cglm/simd/avx/mat4.h +++ b/include/cglm/simd/avx/mat4.h @@ -16,7 +16,7 @@ CGLM_INLINE void -glm_mat4_mul_avx(mat4 m1, mat4 m2, mat4 dest) { +glm_mat4_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9; diff --git a/include/cglm/simd/neon/mat4.h b/include/cglm/simd/neon/mat4.h index 0623dc0..df342dc 100644 --- a/include/cglm/simd/neon/mat4.h +++ b/include/cglm/simd/neon/mat4.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_mat4_mul_neon(mat4 m1, mat4 m2, mat4 dest) { +glm_mat4_mul_neon(const mat4 m1, const mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ float32x4_t l0, l1, l2, l3, r, d0, d1, d2, d3; diff --git a/include/cglm/simd/sse2/affine.h b/include/cglm/simd/sse2/affine.h index 87db1b8..ae187b1 100644 --- a/include/cglm/simd/sse2/affine.h +++ b/include/cglm/simd/sse2/affine.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { +glm_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m128 l0, l1, l2, l3, r; @@ -51,7 +51,7 @@ glm_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { CGLM_INLINE void -glm_mul_rot_sse2(mat4 m1, mat4 m2, mat4 dest) { +glm_mul_rot_sse2(const mat4 m1, const mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m128 l0, l1, l2, l3, r; diff --git a/include/cglm/simd/sse2/mat3.h b/include/cglm/simd/sse2/mat3.h index 9c972ff..07cb5f4 100644 --- a/include/cglm/simd/sse2/mat3.h +++ b/include/cglm/simd/sse2/mat3.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_mat3_mul_sse2(mat3 m1, mat3 m2, mat3 dest) { +glm_mat3_mul_sse2(const mat3 m1, const mat3 m2, mat3 dest) { __m128 l0, l1, l2; __m128 r0, r1, r2; __m128 x0, x1, x2; diff --git a/include/cglm/simd/sse2/mat4.h b/include/cglm/simd/sse2/mat4.h index 7c87eb5..66fb75a 100644 --- a/include/cglm/simd/sse2/mat4.h +++ b/include/cglm/simd/sse2/mat4.h @@ -28,7 +28,7 @@ glm_mat4_scale_sse2(mat4 m, float s) { CGLM_INLINE void -glm_mat4_transp_sse2(mat4 m, mat4 dest) { +glm_mat4_transp_sse2(const mat4 m, mat4 dest) { __m128 r0, r1, r2, r3; r0 = glmm_load(m[0]); @@ -46,7 +46,7 @@ glm_mat4_transp_sse2(mat4 m, mat4 dest) { CGLM_INLINE void -glm_mat4_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { +glm_mat4_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m128 l0, l1, l2, l3, r; @@ -85,7 +85,7 @@ glm_mat4_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { CGLM_INLINE void -glm_mat4_mulv_sse2(mat4 m, vec4 v, vec4 dest) { +glm_mat4_mulv_sse2(const mat4 m, const vec4 v, vec4 dest) { __m128 x0, x1, x2; x0 = glmm_load(v); @@ -100,7 +100,7 @@ glm_mat4_mulv_sse2(mat4 m, vec4 v, vec4 dest) { CGLM_INLINE float -glm_mat4_det_sse2(mat4 mat) { +glm_mat4_det_sse2(const mat4 mat) { __m128 r0, r1, r2, r3, x0, x1, x2; /* 127 <- 0, [square] det(A) = det(At) */ @@ -155,7 +155,7 @@ glm_mat4_det_sse2(mat4 mat) { CGLM_INLINE void -glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { +glm_mat4_inv_fast_sse2(const mat4 mat, mat4 dest) { __m128 r0, r1, r2, r3, v0, v1, v2, v3, t0, t1, t2, t3, t4, t5, @@ -279,7 +279,7 @@ glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { CGLM_INLINE void -glm_mat4_inv_sse2(mat4 mat, mat4 dest) { +glm_mat4_inv_sse2(const mat4 mat, mat4 dest) { __m128 r0, r1, r2, r3, v0, v1, v2, v3, t0, t1, t2, t3, t4, t5, diff --git a/include/cglm/simd/sse2/quat.h b/include/cglm/simd/sse2/quat.h index 0173f94..08ebb70 100644 --- a/include/cglm/simd/sse2/quat.h +++ b/include/cglm/simd/sse2/quat.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_quat_mul_sse2(versor p, versor q, versor dest) { +glm_quat_mul_sse2(const versor p, const versor q, versor dest) { /* + (a1 b2 + b1 a2 + c1 d2 − d1 c2)i + (a1 c2 − b1 d2 + c1 a2 + d1 b2)j diff --git a/include/cglm/simd/x86.h b/include/cglm/simd/x86.h index 99d2b8a..b926511 100644 --- a/include/cglm/simd/x86.h +++ b/include/cglm/simd/x86.h @@ -103,7 +103,7 @@ glmm_vdot(__m128 a, __m128 b) { static inline float -glmm_dot(__m128 a, __m128 b) { +glmm_dot(const __m128 a, const __m128 b) { return _mm_cvtss_f32(glmm_vdots(a, b)); } @@ -115,7 +115,7 @@ glmm_norm(__m128 a) { static inline __m128 -glmm_load3(float v[3]) { +glmm_load3(const float v[3]) { __m128i xy; __m128 z; diff --git a/include/cglm/sphere.h b/include/cglm/sphere.h index 334b83a..7653096 100644 --- a/include/cglm/sphere.h +++ b/include/cglm/sphere.h @@ -27,7 +27,7 @@ */ CGLM_INLINE float -glm_sphere_radii(vec4 s) { +glm_sphere_radii(const vec4 s) { return s[3]; } @@ -40,7 +40,7 @@ glm_sphere_radii(vec4 s) { */ CGLM_INLINE void -glm_sphere_transform(vec4 s, mat4 m, vec4 dest) { +glm_sphere_transform(const vec4 s, const mat4 m, vec4 dest) { glm_mat4_mulv3(m, s, 1.0f, dest); dest[3] = s[3]; } @@ -57,7 +57,7 @@ glm_sphere_transform(vec4 s, mat4 m, vec4 dest) { */ CGLM_INLINE void -glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { +glm_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) { float dist, radii; dist = glm_vec3_distance(s1, s2); @@ -78,7 +78,7 @@ glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { */ CGLM_INLINE bool -glm_sphere_sphere(vec4 s1, vec4 s2) { +glm_sphere_sphere(const vec4 s1, const vec4 s2) { return glm_vec3_distance2(s1, s2) <= glm_pow2(s1[3] + s2[3]); } @@ -90,7 +90,7 @@ glm_sphere_sphere(vec4 s1, vec4 s2) { */ CGLM_INLINE bool -glm_sphere_point(vec4 s, vec3 point) { +glm_sphere_point(const vec4 s, const vec3 point) { float rr; rr = s[3] * s[3]; return glm_vec3_distance2(point, s) <= rr; diff --git a/include/cglm/vec3-ext.h b/include/cglm/vec3-ext.h index f1cc462..d82455f 100644 --- a/include/cglm/vec3-ext.h +++ b/include/cglm/vec3-ext.h @@ -52,7 +52,7 @@ glm_vec3_broadcast(float val, vec3 d) { */ CGLM_INLINE bool -glm_vec3_eq(vec3 v, float val) { +glm_vec3_eq(const vec3 v, float val) { return v[0] == val && v[0] == v[1] && v[0] == v[2]; } @@ -64,7 +64,7 @@ glm_vec3_eq(vec3 v, float val) { */ CGLM_INLINE bool -glm_vec3_eq_eps(vec3 v, float val) { +glm_vec3_eq_eps(const vec3 v, float val) { return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON && fabsf(v[2] - val) <= FLT_EPSILON; @@ -77,7 +77,7 @@ glm_vec3_eq_eps(vec3 v, float val) { */ CGLM_INLINE bool -glm_vec3_eq_all(vec3 v) { +glm_vec3_eq_all(const vec3 v) { return v[0] == v[1] && v[0] == v[2]; } @@ -89,7 +89,7 @@ glm_vec3_eq_all(vec3 v) { */ CGLM_INLINE bool -glm_vec3_eqv(vec3 a, vec3 b) { +glm_vec3_eqv(const vec3 a, const vec3 b) { return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]; @@ -103,7 +103,7 @@ glm_vec3_eqv(vec3 a, vec3 b) { */ CGLM_INLINE bool -glm_vec3_eqv_eps(vec3 a, vec3 b) { +glm_vec3_eqv_eps(const vec3 a, const vec3 b) { return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON && fabsf(a[2] - b[2]) <= FLT_EPSILON; @@ -116,7 +116,7 @@ glm_vec3_eqv_eps(vec3 a, vec3 b) { */ CGLM_INLINE float -glm_vec3_max(vec3 v) { +glm_vec3_max(const vec3 v) { float max; max = v[0]; @@ -135,7 +135,7 @@ glm_vec3_max(vec3 v) { */ CGLM_INLINE float -glm_vec3_min(vec3 v) { +glm_vec3_min(const vec3 v) { float min; min = v[0]; @@ -155,7 +155,7 @@ glm_vec3_min(vec3 v) { */ CGLM_INLINE bool -glm_vec3_isnan(vec3 v) { +glm_vec3_isnan(const vec3 v) { return isnan(v[0]) || isnan(v[1]) || isnan(v[2]); } @@ -167,7 +167,7 @@ glm_vec3_isnan(vec3 v) { */ CGLM_INLINE bool -glm_vec3_isinf(vec3 v) { +glm_vec3_isinf(const vec3 v) { return isinf(v[0]) || isinf(v[1]) || isinf(v[2]); } @@ -179,7 +179,7 @@ glm_vec3_isinf(vec3 v) { */ CGLM_INLINE bool -glm_vec3_isvalid(vec3 v) { +glm_vec3_isvalid(const vec3 v) { return !glm_vec3_isnan(v) && !glm_vec3_isinf(v); } @@ -192,7 +192,7 @@ glm_vec3_isvalid(vec3 v) { */ CGLM_INLINE void -glm_vec3_sign(vec3 v, vec3 dest) { +glm_vec3_sign(const vec3 v, vec3 dest) { dest[0] = glm_signf(v[0]); dest[1] = glm_signf(v[1]); dest[2] = glm_signf(v[2]); @@ -206,7 +206,7 @@ glm_vec3_sign(vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_sqrt(vec3 v, vec3 dest) { +glm_vec3_sqrt(const vec3 v, vec3 dest) { dest[0] = sqrtf(v[0]); dest[1] = sqrtf(v[1]); dest[2] = sqrtf(v[2]); diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index e67cc2f..b503b6e 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -111,7 +111,7 @@ */ CGLM_INLINE void -glm_vec3(vec4 v4, vec3 dest) { +glm_vec3(const vec4 v4, vec3 dest) { dest[0] = v4[0]; dest[1] = v4[1]; dest[2] = v4[2]; @@ -125,7 +125,7 @@ glm_vec3(vec4 v4, vec3 dest) { */ CGLM_INLINE void -glm_vec3_copy(vec3 a, vec3 dest) { +glm_vec3_copy(const vec3 a, vec3 dest) { dest[0] = a[0]; dest[1] = a[1]; dest[2] = a[2]; @@ -163,7 +163,7 @@ glm_vec3_one(vec3 v) { */ CGLM_INLINE float -glm_vec3_dot(vec3 a, vec3 b) { +glm_vec3_dot(const vec3 a, const vec3 b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } @@ -180,7 +180,7 @@ glm_vec3_dot(vec3 a, vec3 b) { */ CGLM_INLINE float -glm_vec3_norm2(vec3 v) { +glm_vec3_norm2(const vec3 v) { return glm_vec3_dot(v, v); } @@ -193,7 +193,7 @@ glm_vec3_norm2(vec3 v) { */ CGLM_INLINE float -glm_vec3_norm(vec3 v) { +glm_vec3_norm(const vec3 v) { return sqrtf(glm_vec3_norm2(v)); } @@ -206,7 +206,7 @@ glm_vec3_norm(vec3 v) { */ CGLM_INLINE void -glm_vec3_add(vec3 a, vec3 b, vec3 dest) { +glm_vec3_add(const vec3 a, const vec3 b, vec3 dest) { dest[0] = a[0] + b[0]; dest[1] = a[1] + b[1]; dest[2] = a[2] + b[2]; @@ -221,7 +221,7 @@ glm_vec3_add(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_adds(vec3 v, float s, vec3 dest) { +glm_vec3_adds(const vec3 v, float s, vec3 dest) { dest[0] = v[0] + s; dest[1] = v[1] + s; dest[2] = v[2] + s; @@ -236,7 +236,7 @@ glm_vec3_adds(vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_sub(vec3 a, vec3 b, vec3 dest) { +glm_vec3_sub(const vec3 a, const vec3 b, vec3 dest) { dest[0] = a[0] - b[0]; dest[1] = a[1] - b[1]; dest[2] = a[2] - b[2]; @@ -251,7 +251,7 @@ glm_vec3_sub(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_subs(vec3 v, float s, vec3 dest) { +glm_vec3_subs(const vec3 v, float s, vec3 dest) { dest[0] = v[0] - s; dest[1] = v[1] - s; dest[2] = v[2] - s; @@ -266,7 +266,7 @@ glm_vec3_subs(vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_mul(vec3 a, vec3 b, vec3 dest) { +glm_vec3_mul(const vec3 a, const vec3 b, vec3 dest) { dest[0] = a[0] * b[0]; dest[1] = a[1] * b[1]; dest[2] = a[2] * b[2]; @@ -281,7 +281,7 @@ glm_vec3_mul(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_scale(vec3 v, float s, vec3 dest) { +glm_vec3_scale(const vec3 v, float s, vec3 dest) { dest[0] = v[0] * s; dest[1] = v[1] * s; dest[2] = v[2] * s; @@ -296,7 +296,7 @@ glm_vec3_scale(vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_scale_as(vec3 v, float s, vec3 dest) { +glm_vec3_scale_as(const vec3 v, float s, vec3 dest) { float norm; norm = glm_vec3_norm(v); @@ -317,7 +317,7 @@ glm_vec3_scale_as(vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_div(vec3 a, vec3 b, vec3 dest) { +glm_vec3_div(const vec3 a, const vec3 b, vec3 dest) { dest[0] = a[0] / b[0]; dest[1] = a[1] / b[1]; dest[2] = a[2] / b[2]; @@ -332,7 +332,7 @@ glm_vec3_div(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_divs(vec3 v, float s, vec3 dest) { +glm_vec3_divs(const vec3 v, float s, vec3 dest) { dest[0] = v[0] / s; dest[1] = v[1] / s; dest[2] = v[2] / s; @@ -349,7 +349,7 @@ glm_vec3_divs(vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) { dest[0] += a[0] + b[0]; dest[1] += a[1] + b[1]; dest[2] += a[2] + b[2]; @@ -366,7 +366,7 @@ glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) { dest[0] += a[0] - b[0]; dest[1] += a[1] - b[1]; dest[2] += a[2] - b[2]; @@ -383,7 +383,7 @@ glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) { dest[0] += a[0] * b[0]; dest[1] += a[1] * b[1]; dest[2] += a[2] * b[2]; @@ -400,7 +400,7 @@ glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_muladds(vec3 a, float s, vec3 dest) { +glm_vec3_muladds(const vec3 a, float s, vec3 dest) { dest[0] += a[0] * s; dest[1] += a[1] * s; dest[2] += a[2] * s; @@ -417,7 +417,7 @@ glm_vec3_muladds(vec3 a, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) { dest[0] += glm_max(a[0], b[0]); dest[1] += glm_max(a[1], b[1]); dest[2] += glm_max(a[2], b[2]); @@ -434,7 +434,7 @@ glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) { +glm_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) { dest[0] += glm_min(a[0], b[0]); dest[1] += glm_min(a[1], b[1]); dest[2] += glm_min(a[2], b[2]); @@ -448,7 +448,7 @@ glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_negate_to(vec3 v, vec3 dest) { +glm_vec3_negate_to(const vec3 v, vec3 dest) { dest[0] = -v[0]; dest[1] = -v[1]; dest[2] = -v[2]; @@ -493,7 +493,7 @@ glm_vec3_normalize(vec3 v) { */ CGLM_INLINE void -glm_vec3_normalize_to(vec3 v, vec3 dest) { +glm_vec3_normalize_to(const vec3 v, vec3 dest) { float norm; norm = glm_vec3_norm(v); @@ -515,7 +515,7 @@ glm_vec3_normalize_to(vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_cross(vec3 a, vec3 b, vec3 dest) { +glm_vec3_cross(const vec3 a, const vec3 b, vec3 dest) { /* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */ dest[0] = a[1] * b[2] - a[2] * b[1]; dest[1] = a[2] * b[0] - a[0] * b[2]; @@ -531,7 +531,7 @@ glm_vec3_cross(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) { +glm_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_cross(a, b, dest); glm_vec3_normalize(dest); } @@ -546,7 +546,7 @@ glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE float -glm_vec3_angle(vec3 a, vec3 b) { +glm_vec3_angle(const vec3 a, const vec3 b) { float norm, dot; /* maybe compiler generate approximation instruction (rcp) */ @@ -570,7 +570,7 @@ glm_vec3_angle(vec3 a, vec3 b) { */ CGLM_INLINE void -glm_vec3_rotate(vec3 v, float angle, vec3 axis) { +glm_vec3_rotate(vec3 v, float angle, const vec3 axis) { vec3 v1, v2, k; float c, s; @@ -608,7 +608,7 @@ glm_vec3_rotate(vec3 v, float angle, vec3 axis) { */ CGLM_INLINE void -glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { +glm_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) { vec4 x, y, z, res; glm_vec4_normalize_to(m[0], x); @@ -631,7 +631,7 @@ glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { +glm_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) { vec4 res, x, y, z; glm_vec4(m[0], 0.0f, x); @@ -658,7 +658,7 @@ glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_proj(vec3 a, vec3 b, vec3 dest) { +glm_vec3_proj(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_scale(b, glm_vec3_dot(a, b) / glm_vec3_norm2(b), dest); @@ -673,7 +673,7 @@ glm_vec3_proj(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_center(vec3 a, vec3 b, vec3 dest) { +glm_vec3_center(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_add(a, b, dest); glm_vec3_scale(dest, 0.5f, dest); } @@ -687,7 +687,7 @@ glm_vec3_center(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE float -glm_vec3_distance2(vec3 a, vec3 b) { +glm_vec3_distance2(const vec3 a, const vec3 b) { return glm_pow2(b[0] - a[0]) + glm_pow2(b[1] - a[1]) + glm_pow2(b[2] - a[2]); @@ -702,7 +702,7 @@ glm_vec3_distance2(vec3 a, vec3 b) { */ CGLM_INLINE float -glm_vec3_distance(vec3 a, vec3 b) { +glm_vec3_distance(const vec3 a, const vec3 b) { return sqrtf(glm_vec3_distance2(a, b)); } @@ -715,7 +715,7 @@ glm_vec3_distance(vec3 a, vec3 b) { */ CGLM_INLINE void -glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) { +glm_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) { dest[0] = glm_max(a[0], b[0]); dest[1] = glm_max(a[1], b[1]); dest[2] = glm_max(a[2], b[2]); @@ -730,7 +730,7 @@ glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_minv(vec3 a, vec3 b, vec3 dest) { +glm_vec3_minv(const vec3 a, const vec3 b, vec3 dest) { dest[0] = glm_min(a[0], b[0]); dest[1] = glm_min(a[1], b[1]); dest[2] = glm_min(a[2], b[2]); @@ -744,7 +744,7 @@ glm_vec3_minv(vec3 a, vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_ortho(vec3 v, vec3 dest) { +glm_vec3_ortho(const vec3 v, vec3 dest) { dest[0] = v[1] - v[2]; dest[1] = v[2] - v[0]; dest[2] = v[0] - v[1]; @@ -777,7 +777,7 @@ glm_vec3_clamp(vec3 v, float minVal, float maxVal) { */ CGLM_INLINE void -glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { +glm_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) { vec3 s, v; /* from + s * (to - from) */ @@ -798,7 +798,7 @@ glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { */ CGLM_INLINE void -glm_cross(vec3 a, vec3 b, vec3 d) { +glm_cross(const vec3 a, const vec3 b, vec3 d) { glm_vec3_cross(a, b, d); } @@ -814,7 +814,7 @@ glm_cross(vec3 a, vec3 b, vec3 d) { */ CGLM_INLINE float -glm_dot(vec3 a, vec3 b) { +glm_dot(const vec3 a, const vec3 b) { return glm_vec3_dot(a, b); } @@ -841,7 +841,7 @@ glm_normalize(vec3 v) { */ CGLM_INLINE void -glm_normalize_to(vec3 v, vec3 dest) { +glm_normalize_to(const vec3 v, vec3 dest) { glm_vec3_normalize_to(v, dest); } diff --git a/include/cglm/vec4-ext.h b/include/cglm/vec4-ext.h index c545a14..7998a7d 100644 --- a/include/cglm/vec4-ext.h +++ b/include/cglm/vec4-ext.h @@ -56,7 +56,7 @@ glm_vec4_broadcast(float val, vec4 d) { */ CGLM_INLINE bool -glm_vec4_eq(vec4 v, float val) { +glm_vec4_eq(const vec4 v, float val) { return v[0] == val && v[0] == v[1] && v[0] == v[2] @@ -71,7 +71,7 @@ glm_vec4_eq(vec4 v, float val) { */ CGLM_INLINE bool -glm_vec4_eq_eps(vec4 v, float val) { +glm_vec4_eq_eps(const vec4 v, float val) { return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON && fabsf(v[2] - val) <= FLT_EPSILON @@ -85,7 +85,7 @@ glm_vec4_eq_eps(vec4 v, float val) { */ CGLM_INLINE bool -glm_vec4_eq_all(vec4 v) { +glm_vec4_eq_all(const vec4 v) { return v[0] == v[1] && v[0] == v[2] && v[0] == v[3]; @@ -99,7 +99,7 @@ glm_vec4_eq_all(vec4 v) { */ CGLM_INLINE bool -glm_vec4_eqv(vec4 a, vec4 b) { +glm_vec4_eqv(const vec4 a, const vec4 b) { return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] @@ -114,7 +114,7 @@ glm_vec4_eqv(vec4 a, vec4 b) { */ CGLM_INLINE bool -glm_vec4_eqv_eps(vec4 a, vec4 b) { +glm_vec4_eqv_eps(const vec4 a, const vec4 b) { return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON && fabsf(a[2] - b[2]) <= FLT_EPSILON @@ -128,7 +128,7 @@ glm_vec4_eqv_eps(vec4 a, vec4 b) { */ CGLM_INLINE float -glm_vec4_max(vec4 v) { +glm_vec4_max(const vec4 v) { float max; max = glm_vec3_max(v); @@ -145,7 +145,7 @@ glm_vec4_max(vec4 v) { */ CGLM_INLINE float -glm_vec4_min(vec4 v) { +glm_vec4_min(const vec4 v) { float min; min = glm_vec3_min(v); @@ -163,7 +163,7 @@ glm_vec4_min(vec4 v) { */ CGLM_INLINE bool -glm_vec4_isnan(vec4 v) { +glm_vec4_isnan(const vec4 v) { return isnan(v[0]) || isnan(v[1]) || isnan(v[2]) || isnan(v[3]); } @@ -175,7 +175,7 @@ glm_vec4_isnan(vec4 v) { */ CGLM_INLINE bool -glm_vec4_isinf(vec4 v) { +glm_vec4_isinf(const vec4 v) { return isinf(v[0]) || isinf(v[1]) || isinf(v[2]) || isinf(v[3]); } @@ -187,7 +187,7 @@ glm_vec4_isinf(vec4 v) { */ CGLM_INLINE bool -glm_vec4_isvalid(vec4 v) { +glm_vec4_isvalid(const vec4 v) { return !glm_vec4_isnan(v) && !glm_vec4_isinf(v); } @@ -200,7 +200,7 @@ glm_vec4_isvalid(vec4 v) { */ CGLM_INLINE void -glm_vec4_sign(vec4 v, vec4 dest) { +glm_vec4_sign(const vec4 v, vec4 dest) { #if defined( __SSE2__ ) || defined( __SSE2__ ) __m128 x0, x1, x2, x3, x4; @@ -228,7 +228,7 @@ glm_vec4_sign(vec4 v, vec4 dest) { */ CGLM_INLINE void -glm_vec4_sqrt(vec4 v, vec4 dest) { +glm_vec4_sqrt(const vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sqrt_ps(glmm_load(v))); #else diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index d053ed5..3ed31e4 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -90,7 +90,7 @@ */ CGLM_INLINE void -glm_vec4(vec3 v3, float last, vec4 dest) { +glm_vec4(const vec3 v3, float last, vec4 dest) { dest[0] = v3[0]; dest[1] = v3[1]; dest[2] = v3[2]; @@ -105,7 +105,7 @@ glm_vec4(vec3 v3, float last, vec4 dest) { */ CGLM_INLINE void -glm_vec4_copy3(vec4 a, vec3 dest) { +glm_vec4_copy3(const vec4 a, vec3 dest) { dest[0] = a[0]; dest[1] = a[1]; dest[2] = a[2]; @@ -119,7 +119,7 @@ glm_vec4_copy3(vec4 a, vec3 dest) { */ CGLM_INLINE void -glm_vec4_copy(vec4 v, vec4 dest) { +glm_vec4_copy(const vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, glmm_load(v)); #elif defined(CGLM_NEON_FP) @@ -142,7 +142,7 @@ glm_vec4_copy(vec4 v, vec4 dest) { */ CGLM_INLINE void -glm_vec4_ucopy(vec4 v, vec4 dest) { +glm_vec4_ucopy(const vec4 v, vec4 dest) { dest[0] = v[0]; dest[1] = v[1]; dest[2] = v[2]; @@ -199,7 +199,7 @@ glm_vec4_one(vec4 v) { */ CGLM_INLINE float -glm_vec4_dot(vec4 a, vec4 b) { +glm_vec4_dot(const vec4 a, const vec4 b) { #if defined(CGLM_SIMD) return glmm_dot(glmm_load(a), glmm_load(b)); #else @@ -220,7 +220,7 @@ glm_vec4_dot(vec4 a, vec4 b) { */ CGLM_INLINE float -glm_vec4_norm2(vec4 v) { +glm_vec4_norm2(const vec4 v) { return glm_vec4_dot(v, v); } @@ -233,7 +233,7 @@ glm_vec4_norm2(vec4 v) { */ CGLM_INLINE float -glm_vec4_norm(vec4 v) { +glm_vec4_norm(const vec4 v) { #if defined(CGLM_SIMD) return glmm_norm(glmm_load(v)); #else @@ -250,7 +250,7 @@ glm_vec4_norm(vec4 v) { */ CGLM_INLINE void -glm_vec4_add(vec4 a, vec4 b, vec4 dest) { +glm_vec4_add(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -272,7 +272,7 @@ glm_vec4_add(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_adds(vec4 v, float s, vec4 dest) { +glm_vec4_adds(const vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -294,7 +294,7 @@ glm_vec4_adds(vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_sub(vec4 a, vec4 b, vec4 dest) { +glm_vec4_sub(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sub_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -316,7 +316,7 @@ glm_vec4_sub(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_subs(vec4 v, float s, vec4 dest) { +glm_vec4_subs(const vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sub_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -338,7 +338,7 @@ glm_vec4_subs(vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_mul(vec4 a, vec4 b, vec4 dest) { +glm_vec4_mul(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_mul_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -360,7 +360,7 @@ glm_vec4_mul(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_scale(vec4 v, float s, vec4 dest) { +glm_vec4_scale(const vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_mul_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -382,7 +382,7 @@ glm_vec4_scale(vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_scale_as(vec4 v, float s, vec4 dest) { +glm_vec4_scale_as(const vec4 v, float s, vec4 dest) { float norm; norm = glm_vec4_norm(v); @@ -403,7 +403,7 @@ glm_vec4_scale_as(vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_div(vec4 a, vec4 b, vec4 dest) { +glm_vec4_div(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_div_ps(glmm_load(a), glmm_load(b))); #else @@ -423,7 +423,7 @@ glm_vec4_div(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_divs(vec4 v, float s, vec4 dest) { +glm_vec4_divs(const vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_div_ps(glmm_load(v), _mm_set1_ps(s))); #else @@ -442,7 +442,7 @@ glm_vec4_divs(vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_add_ps(glmm_load(a), @@ -470,7 +470,7 @@ glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_sub_ps(glmm_load(a), @@ -498,7 +498,7 @@ glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_mul_ps(glmm_load(a), @@ -526,7 +526,7 @@ glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_muladds(vec4 a, float s, vec4 dest) { +glm_vec4_muladds(const vec4 a, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_mul_ps(glmm_load(a), @@ -554,7 +554,7 @@ glm_vec4_muladds(vec4 a, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_max_ps(glmm_load(a), @@ -582,7 +582,7 @@ glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) { +glm_vec4_minadd(const vec4 a,const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_min_ps(glmm_load(a), @@ -607,7 +607,7 @@ glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_negate_to(vec4 v, vec4 dest) { +glm_vec4_negate_to(const vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_xor_ps(glmm_load(v), _mm_set1_ps(-0.0f))); #elif defined(CGLM_NEON_FP) @@ -639,7 +639,7 @@ glm_vec4_negate(vec4 v) { */ CGLM_INLINE void -glm_vec4_normalize_to(vec4 v, vec4 dest) { +glm_vec4_normalize_to(const vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) __m128 xdot, x0; float dot; @@ -688,7 +688,7 @@ glm_vec4_normalize(vec4 v) { */ CGLM_INLINE float -glm_vec4_distance(vec4 a, vec4 b) { +glm_vec4_distance(const vec4 a, const vec4 b) { #if defined( __SSE__ ) || defined( __SSE2__ ) return glmm_norm(_mm_sub_ps(glmm_load(b), glmm_load(a))); #elif defined(CGLM_NEON_FP) @@ -710,7 +710,7 @@ glm_vec4_distance(vec4 a, vec4 b) { */ CGLM_INLINE void -glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) { +glm_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_max_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -732,7 +732,7 @@ glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_minv(vec4 a, vec4 b, vec4 dest) { +glm_vec4_minv(const vec4 a, const vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_min_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -781,7 +781,7 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) { */ CGLM_INLINE void -glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { +glm_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) { vec4 s, v; /* from + s * (to - from) */ From 6e501ef1f66498d4f4e89de4a7d7d86491e9c41e Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 28 Apr 2019 19:15:55 +0300 Subject: [PATCH 14/56] build: don't link libcmocka if not exists --- post-build.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/post-build.sh b/post-build.sh index 9861ac4..dfe92cc 100644 --- a/post-build.sh +++ b/post-build.sh @@ -10,10 +10,15 @@ cd $(dirname "$0") mkdir -p .libs +libmocka_folder=$(pwd)/test/lib/cmocka/build/src/ + if [ "$(uname)" = "Darwin" ]; then - ln -sf $(pwd)/test/lib/cmocka/build/src/libcmocka.0.dylib \ - .libs/libcmocka.0.dylib; + libcmocka=libcmocka.0.dylib else - ln -sf $(pwd)/test/lib/cmocka/build/src/libcmocka.so.0 \ - .libs/libcmocka.so.0; + libcmocka=libcmocka.so.0 +fi + +libcmocka_fullpath="$libmocka_folder$libcmocka" +if [ ! -f libcmocka ]; then + ln -sf libcmocka .libs/$libcmocka; fi From 010e887946a1e294739117a8474050626cc3821d Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 28 Apr 2019 19:21:13 +0300 Subject: [PATCH 15/56] build: don't link libcmocka if not exists --- post-build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/post-build.sh b/post-build.sh index dfe92cc..880f7aa 100644 --- a/post-build.sh +++ b/post-build.sh @@ -19,6 +19,6 @@ else fi libcmocka_fullpath="$libmocka_folder$libcmocka" -if [ ! -f libcmocka ]; then - ln -sf libcmocka .libs/$libcmocka; +if [ ! -f libcmocka_fullpath ]; then + ln -sf libcmocka_fullpath .libs/$libcmocka; fi From a5f1ed32afe55144e2cfe14cc8a1b2be3afeaa55 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 28 Apr 2019 19:24:09 +0300 Subject: [PATCH 16/56] build: don't link libcmocka if not exists --- post-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/post-build.sh b/post-build.sh index 880f7aa..2374189 100644 --- a/post-build.sh +++ b/post-build.sh @@ -20,5 +20,5 @@ fi libcmocka_fullpath="$libmocka_folder$libcmocka" if [ ! -f libcmocka_fullpath ]; then - ln -sf libcmocka_fullpath .libs/$libcmocka; + ln -sf $libcmocka_fullpath .libs/$libcmocka; fi From 120ae9ae99f9e27c5956e9969b88ff2c8be6ae2c Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 28 Apr 2019 19:43:58 +0300 Subject: [PATCH 17/56] buil: fix linking cmocka --- post-build.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/post-build.sh b/post-build.sh index 2374189..6fa6e7a 100644 --- a/post-build.sh +++ b/post-build.sh @@ -8,7 +8,7 @@ cd $(dirname "$0") -mkdir -p .libs +mkdir -p "$(pwd)/.libs" libmocka_folder=$(pwd)/test/lib/cmocka/build/src/ @@ -18,7 +18,7 @@ else libcmocka=libcmocka.so.0 fi -libcmocka_fullpath="$libmocka_folder$libcmocka" -if [ ! -f libcmocka_fullpath ]; then - ln -sf $libcmocka_fullpath .libs/$libcmocka; +libcmocka_path="$libmocka_folder$libcmocka" +if [ -f "$libcmocka_path" ]; then + ln -sf "$libcmocka_path" "$(pwd)/.libs/$libcmocka"; fi From 392565f9206c7b9b6ad2d452f17fe9b5bb44fafe Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 28 Apr 2019 21:48:19 +0300 Subject: [PATCH 18/56] mark readonly parameters as const (continue) --- include/cglm/call/affine.h | 38 +++++++------- include/cglm/call/box.h | 32 ++++++------ include/cglm/call/cam.h | 38 +++++++------- include/cglm/call/curve.h | 2 +- include/cglm/call/euler.h | 18 +++---- include/cglm/call/frustum.h | 16 +++--- include/cglm/call/io.h | 20 ++++---- include/cglm/call/mat3.h | 20 ++++---- include/cglm/call/mat4.h | 38 +++++++------- include/cglm/call/project.h | 6 +-- include/cglm/call/quat.h | 64 ++++++++++++------------ include/cglm/call/sphere.h | 10 ++-- include/cglm/call/vec3.h | 98 ++++++++++++++++++------------------- include/cglm/call/vec4.h | 82 +++++++++++++++---------------- include/cglm/cam.h | 24 ++++----- include/cglm/io.h | 28 +++++------ include/cglm/mat3.h | 20 ++++---- src/affine.c | 38 +++++++------- src/box.c | 32 ++++++------ src/cam.c | 44 ++++++++--------- src/curve.c | 2 +- src/euler.c | 18 +++---- src/frustum.c | 16 +++--- src/io.c | 20 ++++---- src/mat3.c | 20 ++++---- src/mat4.c | 38 +++++++------- src/project.c | 6 +-- src/quat.c | 64 ++++++++++++------------ src/sphere.c | 10 ++-- src/vec3.c | 98 ++++++++++++++++++------------------- src/vec4.c | 82 +++++++++++++++---------------- 31 files changed, 525 insertions(+), 517 deletions(-) diff --git a/include/cglm/call/affine.h b/include/cglm/call/affine.h index c11405b..ec50bc4 100644 --- a/include/cglm/call/affine.h +++ b/include/cglm/call/affine.h @@ -15,15 +15,15 @@ extern "C" { CGLM_EXPORT void -glmc_translate_make(mat4 m, vec3 v); +glmc_translate_make(mat4 m, const vec3 v); CGLM_EXPORT void -glmc_translate_to(mat4 m, vec3 v, mat4 dest); +glmc_translate_to(const mat4 m, const vec3 v, mat4 dest); CGLM_EXPORT void -glmc_translate(mat4 m, vec3 v); +glmc_translate(mat4 m, const vec3 v); CGLM_EXPORT void @@ -39,15 +39,15 @@ glmc_translate_z(mat4 m, float to); CGLM_EXPORT void -glmc_scale_make(mat4 m, vec3 v); +glmc_scale_make(mat4 m, const vec3 v); CGLM_EXPORT void -glmc_scale_to(mat4 m, vec3 v, mat4 dest); +glmc_scale_to(const mat4 m, const vec3 v, mat4 dest); CGLM_EXPORT void -glmc_scale(mat4 m, vec3 v); +glmc_scale(mat4 m, const vec3 v); CGLM_EXPORT void @@ -55,57 +55,57 @@ glmc_scale_uni(mat4 m, float s); CGLM_EXPORT void -glmc_rotate_x(mat4 m, float rad, mat4 dest); +glmc_rotate_x(const mat4 m, float rad, mat4 dest); CGLM_EXPORT void -glmc_rotate_y(mat4 m, float rad, mat4 dest); +glmc_rotate_y(const mat4 m, float rad, mat4 dest); CGLM_EXPORT void -glmc_rotate_z(mat4 m, float rad, mat4 dest); +glmc_rotate_z(const mat4 m, float rad, mat4 dest); CGLM_EXPORT void -glmc_rotate_make(mat4 m, float angle, vec3 axis); +glmc_rotate_make(mat4 m, float angle, const vec3 axis); CGLM_EXPORT void -glmc_rotate(mat4 m, float angle, vec3 axis); +glmc_rotate(mat4 m, float angle, const vec3 axis); CGLM_EXPORT void -glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis); +glmc_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis); CGLM_EXPORT void -glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis); +glmc_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis); CGLM_EXPORT void -glmc_decompose_scalev(mat4 m, vec3 s); +glmc_decompose_scalev(const mat4 m, vec3 s); CGLM_EXPORT bool -glmc_uniscaled(mat4 m); +glmc_uniscaled(const mat4 m); CGLM_EXPORT void -glmc_decompose_rs(mat4 m, mat4 r, vec3 s); +glmc_decompose_rs(const mat4 m, mat4 r, vec3 s); CGLM_EXPORT void -glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s); +glmc_decompose(const mat4 m, vec4 t, mat4 r, vec3 s); /* affine-mat */ CGLM_EXPORT void -glmc_mul(mat4 m1, mat4 m2, mat4 dest); +glmc_mul(const mat4 m1, const mat4 m2, mat4 dest); CGLM_EXPORT void -glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest); +glmc_mul_rot(const mat4 m1, const mat4 m2, mat4 dest); CGLM_EXPORT void diff --git a/include/cglm/call/box.h b/include/cglm/call/box.h index afb7558..fe4ab90 100644 --- a/include/cglm/call/box.h +++ b/include/cglm/call/box.h @@ -15,26 +15,26 @@ extern "C" { CGLM_EXPORT void -glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]); +glmc_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]); CGLM_EXPORT void -glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]); +glmc_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]); CGLM_EXPORT void -glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]); +glmc_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]); CGLM_EXPORT void -glmc_aabb_crop_until(vec3 box[2], - vec3 cropBox[2], - vec3 clampBox[2], - vec3 dest[2]); +glmc_aabb_crop_until(const vec3 box[2], + const vec3 cropBox[2], + const vec3 clampBox[2], + vec3 dest[2]); CGLM_EXPORT bool -glmc_aabb_frustum(vec3 box[2], vec4 planes[6]); +glmc_aabb_frustum(const vec3 box[2], vec4 planes[6]); CGLM_EXPORT void @@ -42,35 +42,35 @@ glmc_aabb_invalidate(vec3 box[2]); CGLM_EXPORT bool -glmc_aabb_isvalid(vec3 box[2]); +glmc_aabb_isvalid(const vec3 box[2]); CGLM_EXPORT float -glmc_aabb_size(vec3 box[2]); +glmc_aabb_size(const vec3 box[2]); CGLM_EXPORT float -glmc_aabb_radius(vec3 box[2]); +glmc_aabb_radius(const vec3 box[2]); CGLM_EXPORT void -glmc_aabb_center(vec3 box[2], vec3 dest); +glmc_aabb_center(const vec3 box[2], vec3 dest); CGLM_EXPORT bool -glmc_aabb_aabb(vec3 box[2], vec3 other[2]); +glmc_aabb_aabb(const vec3 box[2], const vec3 other[2]); CGLM_EXPORT bool -glmc_aabb_point(vec3 box[2], vec3 point); +glmc_aabb_point(const vec3 box[2], const vec3 point); CGLM_EXPORT bool -glmc_aabb_contains(vec3 box[2], vec3 other[2]); +glmc_aabb_contains(const vec3 box[2], const vec3 other[2]); CGLM_EXPORT bool -glmc_aabb_sphere(vec3 box[2], vec4 s); +glmc_aabb_sphere(const vec3 box[2], const vec4 s); #ifdef __cplusplus } diff --git a/include/cglm/call/cam.h b/include/cglm/call/cam.h index 017b6fc..9b42b74 100644 --- a/include/cglm/call/cam.h +++ b/include/cglm/call/cam.h @@ -21,7 +21,7 @@ glmc_frustum(float left, float top, float nearVal, float farVal, - mat4 dest); + mat4 dest); CGLM_EXPORT void @@ -31,19 +31,19 @@ glmc_ortho(float left, float top, float nearVal, float farVal, - mat4 dest); + mat4 dest); CGLM_EXPORT void -glmc_ortho_aabb(vec3 box[2], mat4 dest); +glmc_ortho_aabb(const vec3 box[2], mat4 dest); CGLM_EXPORT void -glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest); +glmc_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest); CGLM_EXPORT void -glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest); +glmc_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest); CGLM_EXPORT void @@ -59,7 +59,7 @@ glmc_perspective(float fovy, float aspect, float nearVal, float farVal, - mat4 dest); + mat4 dest); CGLM_EXPORT void @@ -75,19 +75,19 @@ glmc_perspective_resize(float aspect, mat4 proj); CGLM_EXPORT void -glmc_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest); +glmc_lookat(const vec3 eye, const vec3 center, const vec3 up, mat4 dest); CGLM_EXPORT void -glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest); +glmc_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest); CGLM_EXPORT void -glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest); +glmc_look_anyup(const vec3 eye, const vec3 dir, mat4 dest); CGLM_EXPORT void -glmc_persp_decomp(mat4 proj, +glmc_persp_decomp(const mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, @@ -97,45 +97,45 @@ glmc_persp_decomp(mat4 proj, CGLM_EXPORT void -glmc_persp_decompv(mat4 proj, float dest[6]); +glmc_persp_decompv(const mat4 proj, float dest[6]); CGLM_EXPORT void -glmc_persp_decomp_x(mat4 proj, +glmc_persp_decomp_x(const mat4 proj, float * __restrict left, float * __restrict right); CGLM_EXPORT void -glmc_persp_decomp_y(mat4 proj, +glmc_persp_decomp_y(const mat4 proj, float * __restrict top, float * __restrict bottom); CGLM_EXPORT void -glmc_persp_decomp_z(mat4 proj, +glmc_persp_decomp_z(const mat4 proj, float * __restrict nearVal, float * __restrict farVal); CGLM_EXPORT void -glmc_persp_decomp_far(mat4 proj, float * __restrict farVal); +glmc_persp_decomp_far(const mat4 proj, float * __restrict farVal); CGLM_EXPORT void -glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal); +glmc_persp_decomp_near(const mat4 proj, float * __restrict nearVal); CGLM_EXPORT float -glmc_persp_fovy(mat4 proj); +glmc_persp_fovy(const mat4 proj); CGLM_EXPORT float -glmc_persp_aspect(mat4 proj); +glmc_persp_aspect(const mat4 proj); CGLM_EXPORT void -glmc_persp_sizes(mat4 proj, float fovy, vec4 dest); +glmc_persp_sizes(const mat4 proj, float fovy, vec4 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/curve.h b/include/cglm/call/curve.h index 061fdb9..07610f3 100644 --- a/include/cglm/call/curve.h +++ b/include/cglm/call/curve.h @@ -15,7 +15,7 @@ extern "C" { CGLM_EXPORT float -glmc_smc(float s, mat4 m, vec4 c); +glmc_smc(float s, const mat4 m, const vec4 c); #ifdef __cplusplus } diff --git a/include/cglm/call/euler.h b/include/cglm/call/euler.h index 9b85485..71746bf 100644 --- a/include/cglm/call/euler.h +++ b/include/cglm/call/euler.h @@ -15,39 +15,39 @@ extern "C" { CGLM_EXPORT void -glmc_euler_angles(mat4 m, vec3 dest); +glmc_euler_angles(const mat4 m, vec3 dest); CGLM_EXPORT void -glmc_euler(vec3 angles, mat4 dest); +glmc_euler(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_xyz(vec3 angles, mat4 dest); +glmc_euler_xyz(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_zyx(vec3 angles, mat4 dest); +glmc_euler_zyx(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_zxy(vec3 angles, mat4 dest); +glmc_euler_zxy(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_xzy(vec3 angles, mat4 dest); +glmc_euler_xzy(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_yzx(vec3 angles, mat4 dest); +glmc_euler_yzx(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_yxz(vec3 angles, mat4 dest); +glmc_euler_yxz(const vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest); +glmc_euler_by_order(const vec3 angles, glm_euler_sq axis, mat4 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/frustum.h b/include/cglm/call/frustum.h index 6b4facb..be97fc3 100644 --- a/include/cglm/call/frustum.h +++ b/include/cglm/call/frustum.h @@ -15,26 +15,26 @@ extern "C" { CGLM_EXPORT void -glmc_frustum_planes(mat4 m, vec4 dest[6]); +glmc_frustum_planes(const mat4 m, vec4 dest[6]); CGLM_EXPORT void -glmc_frustum_corners(mat4 invMat, vec4 dest[8]); +glmc_frustum_corners(const mat4 invMat, vec4 dest[8]); CGLM_EXPORT void -glmc_frustum_center(vec4 corners[8], vec4 dest); +glmc_frustum_center(const vec4 corners[8], vec4 dest); CGLM_EXPORT void -glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]); +glmc_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]); CGLM_EXPORT void -glmc_frustum_corners_at(vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]); +glmc_frustum_corners_at(const vec4 corners[8], + float splitDist, + float farDist, + vec4 planeCorners[4]); #ifdef __cplusplus } #endif diff --git a/include/cglm/call/io.h b/include/cglm/call/io.h index b6c50f6..421e719 100644 --- a/include/cglm/call/io.h +++ b/include/cglm/call/io.h @@ -15,28 +15,28 @@ extern "C" { CGLM_EXPORT void -glmc_mat4_print(mat4 matrix, - FILE * __restrict ostream); +glmc_mat4_print(const mat4 matrix, + FILE * const __restrict ostream); CGLM_EXPORT void -glmc_mat3_print(mat3 matrix, - FILE * __restrict ostream); +glmc_mat3_print(const mat3 matrix, + FILE * const __restrict ostream); CGLM_EXPORT void -glmc_vec4_print(vec4 vec, - FILE * __restrict ostream); +glmc_vec4_print(const vec4 vec, + FILE * const __restrict ostream); CGLM_EXPORT void -glmc_vec3_print(vec3 vec, - FILE * __restrict ostream); +glmc_vec3_print(const vec3 vec, + FILE * const __restrict ostream); CGLM_EXPORT void -glmc_versor_print(versor vec, - FILE * __restrict ostream); +glmc_versor_print(const versor vec, + FILE * const __restrict ostream); #ifdef __cplusplus } diff --git a/include/cglm/call/mat3.h b/include/cglm/call/mat3.h index fbd8270..68d5535 100644 --- a/include/cglm/call/mat3.h +++ b/include/cglm/call/mat3.h @@ -18,7 +18,7 @@ extern "C" { CGLM_EXPORT void -glmc_mat3_copy(mat3 mat, mat3 dest); +glmc_mat3_copy(const mat3 mat, mat3 dest); CGLM_EXPORT void @@ -26,15 +26,15 @@ glmc_mat3_identity(mat3 mat); CGLM_EXPORT void -glmc_mat3_identity_array(mat3 * __restrict mat, size_t count); +glmc_mat3_identity_array(mat3 * const __restrict mat, size_t count); CGLM_EXPORT void -glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest); +glmc_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest); CGLM_EXPORT void -glmc_mat3_transpose_to(mat3 m, mat3 dest); +glmc_mat3_transpose_to(const mat3 m, mat3 dest); CGLM_EXPORT void @@ -42,15 +42,15 @@ glmc_mat3_transpose(mat3 m); CGLM_EXPORT void -glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest); +glmc_mat3_mulv(const mat3 m, const vec3 v, vec3 dest); CGLM_EXPORT float -glmc_mat3_trace(mat3 m); +glmc_mat3_trace(const mat3 m); CGLM_EXPORT void -glmc_mat3_quat(mat3 m, versor dest); +glmc_mat3_quat(const mat3 m, versor dest); CGLM_EXPORT void @@ -58,11 +58,11 @@ glmc_mat3_scale(mat3 m, float s); CGLM_EXPORT float -glmc_mat3_det(mat3 mat); +glmc_mat3_det(const mat3 mat); CGLM_EXPORT void -glmc_mat3_inv(mat3 mat, mat3 dest); +glmc_mat3_inv(const mat3 mat, mat3 dest); CGLM_EXPORT void @@ -74,7 +74,7 @@ glmc_mat3_swap_row(mat3 mat, int row1, int row2); CGLM_EXPORT float -glmc_mat3_rmc(vec3 r, mat3 m, vec3 c); +glmc_mat3_rmc(const vec3 r, const mat3 m, const vec3 c); #ifdef __cplusplus } diff --git a/include/cglm/call/mat4.h b/include/cglm/call/mat4.h index 54fbcbe..43e4cec 100644 --- a/include/cglm/call/mat4.h +++ b/include/cglm/call/mat4.h @@ -19,11 +19,11 @@ extern "C" { CGLM_EXPORT void -glmc_mat4_ucopy(mat4 mat, mat4 dest); +glmc_mat4_ucopy(const mat4 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_copy(mat4 mat, mat4 dest); +glmc_mat4_copy(const mat4 mat, mat4 dest); CGLM_EXPORT void @@ -31,51 +31,51 @@ glmc_mat4_identity(mat4 mat); CGLM_EXPORT void -glmc_mat4_identity_array(mat4 * __restrict mat, size_t count); +glmc_mat4_identity_array(mat4 * const __restrict mat, size_t count); CGLM_EXPORT void -glmc_mat4_pick3(mat4 mat, mat3 dest); +glmc_mat4_pick3(const mat4 mat, mat3 dest); CGLM_EXPORT void -glmc_mat4_pick3t(mat4 mat, mat3 dest); +glmc_mat4_pick3t(const mat4 mat, mat3 dest); CGLM_EXPORT void -glmc_mat4_ins3(mat3 mat, mat4 dest); +glmc_mat4_ins3(const mat3 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest); +glmc_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest); CGLM_EXPORT void -glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest); +glmc_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest); CGLM_EXPORT void -glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest); +glmc_mat4_mulv(const mat4 m, const vec4 v, vec4 dest); CGLM_EXPORT void -glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest); +glmc_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest); CGLM_EXPORT float -glmc_mat4_trace(mat4 m); +glmc_mat4_trace(const mat4 m); CGLM_EXPORT float -glmc_mat4_trace3(mat4 m); +glmc_mat4_trace3(const mat4 m); CGLM_EXPORT void -glmc_mat4_quat(mat4 m, versor dest); +glmc_mat4_quat(const mat4 m, versor dest); CGLM_EXPORT void -glmc_mat4_transpose_to(mat4 m, mat4 dest); +glmc_mat4_transpose_to(const mat4 m, mat4 dest); CGLM_EXPORT void @@ -91,19 +91,19 @@ glmc_mat4_scale(mat4 m, float s); CGLM_EXPORT float -glmc_mat4_det(mat4 mat); +glmc_mat4_det(const mat4 mat); CGLM_EXPORT void -glmc_mat4_inv(mat4 mat, mat4 dest); +glmc_mat4_inv(const mat4 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_inv_precise(mat4 mat, mat4 dest); +glmc_mat4_inv_precise(const mat4 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_inv_fast(mat4 mat, mat4 dest); +glmc_mat4_inv_fast(const mat4 mat, mat4 dest); CGLM_EXPORT void @@ -115,7 +115,7 @@ glmc_mat4_swap_row(mat4 mat, int row1, int row2); CGLM_EXPORT float -glmc_mat4_rmc(vec4 r, mat4 m, vec4 c); +glmc_mat4_rmc(const vec4 r, const mat4 m, const vec4 c); #ifdef __cplusplus } diff --git a/include/cglm/call/project.h b/include/cglm/call/project.h index 35ac087..92c25e1 100644 --- a/include/cglm/call/project.h +++ b/include/cglm/call/project.h @@ -15,15 +15,15 @@ extern "C" { CGLM_EXPORT void -glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest); +glmc_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest); CGLM_EXPORT void -glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest); +glmc_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest); CGLM_EXPORT void -glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest); +glmc_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/quat.h b/include/cglm/call/quat.h index 2778a58..03d8381 100644 --- a/include/cglm/call/quat.h +++ b/include/cglm/call/quat.h @@ -19,7 +19,7 @@ glmc_quat_identity(versor q); CGLM_EXPORT void -glmc_quat_identity_array(versor * __restrict q, size_t count); +glmc_quat_identity_array(versor * const __restrict q, size_t count); CGLM_EXPORT void @@ -31,19 +31,19 @@ glmc_quat(versor q, float angle, float x, float y, float z); CGLM_EXPORT void -glmc_quatv(versor q, float angle, vec3 axis); +glmc_quatv(versor q, float angle, const vec3 axis); CGLM_EXPORT void -glmc_quat_copy(versor q, versor dest); +glmc_quat_copy(const versor q, versor dest); CGLM_EXPORT float -glmc_quat_norm(versor q); +glmc_quat_norm(const versor q); CGLM_EXPORT void -glmc_quat_normalize_to(versor q, versor dest); +glmc_quat_normalize_to(const versor q, versor dest); CGLM_EXPORT void @@ -51,103 +51,107 @@ glmc_quat_normalize(versor q); CGLM_EXPORT float -glmc_quat_dot(versor p, versor q); +glmc_quat_dot(const versor p, const versor q); CGLM_EXPORT void -glmc_quat_conjugate(versor q, versor dest); +glmc_quat_conjugate(const versor q, versor dest); CGLM_EXPORT void -glmc_quat_inv(versor q, versor dest); +glmc_quat_inv(const versor q, versor dest); CGLM_EXPORT void -glmc_quat_add(versor p, versor q, versor dest); +glmc_quat_add(const versor p, const versor q, versor dest); CGLM_EXPORT void -glmc_quat_sub(versor p, versor q, versor dest); +glmc_quat_sub(const versor p, const versor q, versor dest); CGLM_EXPORT float -glmc_quat_real(versor q); +glmc_quat_real(const versor q); CGLM_EXPORT void -glmc_quat_imag(versor q, vec3 dest); +glmc_quat_imag(const versor q, vec3 dest); CGLM_EXPORT void -glmc_quat_imagn(versor q, vec3 dest); +glmc_quat_imagn(const versor q, vec3 dest); CGLM_EXPORT float -glmc_quat_imaglen(versor q); +glmc_quat_imaglen(const versor q); CGLM_EXPORT float -glmc_quat_angle(versor q); +glmc_quat_angle(const versor q); CGLM_EXPORT void -glmc_quat_axis(versor q, versor dest); +glmc_quat_axis(const versor q, versor dest); CGLM_EXPORT void -glmc_quat_mul(versor p, versor q, versor dest); +glmc_quat_mul(const versor p, const versor q, versor dest); CGLM_EXPORT void -glmc_quat_mat4(versor q, mat4 dest); +glmc_quat_mat4(const versor q, mat4 dest); CGLM_EXPORT void -glmc_quat_mat4t(versor q, mat4 dest); +glmc_quat_mat4t(const versor q, mat4 dest); CGLM_EXPORT void -glmc_quat_mat3(versor q, mat3 dest); +glmc_quat_mat3(const versor q, mat3 dest); CGLM_EXPORT void -glmc_quat_mat3t(versor q, mat3 dest); +glmc_quat_mat3t(const versor q, mat3 dest); CGLM_EXPORT void -glmc_quat_lerp(versor from, versor to, float t, versor dest); +glmc_quat_lerp(const versor from, const versor to, float t, versor dest); CGLM_EXPORT void -glmc_quat_slerp(versor q, versor r, float t, versor dest); +glmc_quat_slerp(const versor q, const versor r, float t, versor dest); CGLM_EXPORT void -glmc_quat_look(vec3 eye, versor ori, mat4 dest); +glmc_quat_look(const vec3 eye, const versor ori, mat4 dest); CGLM_EXPORT void -glmc_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest); +glmc_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest); CGLM_EXPORT void -glmc_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest); +glmc_quat_forp(const vec3 from, + const vec3 to, + const vec3 fwd, + const vec3 up, + versor dest); CGLM_EXPORT void -glmc_quat_rotatev(versor from, vec3 to, vec3 dest); +glmc_quat_rotatev(const versor from, const vec3 to, vec3 dest); CGLM_EXPORT void -glmc_quat_rotate(mat4 m, versor q, mat4 dest); +glmc_quat_rotate(const mat4 m, const versor q, mat4 dest); CGLM_EXPORT void -glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot); +glmc_quat_rotate_at(mat4 model, const versor q, const vec3 pivot); CGLM_EXPORT void -glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot); +glmc_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot); #ifdef __cplusplus } diff --git a/include/cglm/call/sphere.h b/include/cglm/call/sphere.h index 9b96546..7b4d0d7 100644 --- a/include/cglm/call/sphere.h +++ b/include/cglm/call/sphere.h @@ -15,23 +15,23 @@ extern "C" { CGLM_EXPORT float -glmc_sphere_radii(vec4 s); +glmc_sphere_radii(const vec4 s); CGLM_EXPORT void -glmc_sphere_transform(vec4 s, mat4 m, vec4 dest); +glmc_sphere_transform(const vec4 s, const mat4 m, vec4 dest); CGLM_EXPORT void -glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest); +glmc_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest); CGLM_EXPORT bool -glmc_sphere_sphere(vec4 s1, vec4 s2); +glmc_sphere_sphere(const vec4 s1, const vec4 s2); CGLM_EXPORT bool -glmc_sphere_point(vec4 s, vec3 point); +glmc_sphere_point(const vec4 s, const vec3 point); #ifdef __cplusplus } diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h index 9763403..cc7c78e 100644 --- a/include/cglm/call/vec3.h +++ b/include/cglm/call/vec3.h @@ -22,11 +22,11 @@ extern "C" { CGLM_EXPORT void -glmc_vec3(vec4 v4, vec3 dest); +glmc_vec3(const vec4 v4, vec3 dest); CGLM_EXPORT void -glmc_vec3_copy(vec3 a, vec3 dest); +glmc_vec3_copy(const vec3 a, vec3 dest); CGLM_EXPORT void @@ -38,27 +38,27 @@ glmc_vec3_one(vec3 v); CGLM_EXPORT float -glmc_vec3_dot(vec3 a, vec3 b); +glmc_vec3_dot(const vec3 a, const vec3 b); CGLM_EXPORT void -glmc_vec3_cross(vec3 a, vec3 b, vec3 dest); +glmc_vec3_cross(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest); +glmc_vec3_crossn(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT float -glmc_vec3_norm(vec3 v); +glmc_vec3_norm(const vec3 v); CGLM_EXPORT float -glmc_vec3_norm2(vec3 v); +glmc_vec3_norm2(const vec3 v); CGLM_EXPORT void -glmc_vec3_normalize_to(vec3 v, vec3 dest); +glmc_vec3_normalize_to(const vec3 v, vec3 dest); CGLM_EXPORT void @@ -66,63 +66,63 @@ glmc_vec3_normalize(vec3 v); CGLM_EXPORT void -glmc_vec3_add(vec3 a, vec3 b, vec3 dest); +glmc_vec3_add(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_adds(vec3 v, float s, vec3 dest); +glmc_vec3_adds(const vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_sub(vec3 a, vec3 b, vec3 dest); +glmc_vec3_sub(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_subs(vec3 v, float s, vec3 dest); +glmc_vec3_subs(const vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_mul(vec3 a, vec3 b, vec3 d); +glmc_vec3_mul(const vec3 a, const vec3 b, vec3 d); CGLM_EXPORT void -glmc_vec3_scale(vec3 v, float s, vec3 dest); +glmc_vec3_scale(const vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_scale_as(vec3 v, float s, vec3 dest); +glmc_vec3_scale_as(const vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_div(vec3 a, vec3 b, vec3 dest); +glmc_vec3_div(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_divs(vec3 a, float s, vec3 dest); +glmc_vec3_divs(const vec3 a, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest); +glmc_vec3_addadd(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest); +glmc_vec3_subadd(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest); +glmc_vec3_muladd(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_muladds(vec3 a, float s, vec3 dest); +glmc_vec3_muladds(const vec3 a, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest); +glmc_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest); +glmc_vec3_minadd(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void @@ -130,47 +130,47 @@ glmc_vec3_negate(vec3 v); CGLM_EXPORT void -glmc_vec3_negate_to(vec3 v, vec3 dest); +glmc_vec3_negate_to(const vec3 v, vec3 dest); CGLM_EXPORT float -glmc_vec3_angle(vec3 a, vec3 b); +glmc_vec3_angle(const vec3 a, const vec3 b); CGLM_EXPORT void -glmc_vec3_rotate(vec3 v, float angle, vec3 axis); +glmc_vec3_rotate(vec3 v, float angle, const vec3 axis); CGLM_EXPORT void -glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest); +glmc_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest); +glmc_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_proj(vec3 a, vec3 b, vec3 dest); +glmc_vec3_proj(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_center(vec3 a, vec3 b, vec3 dest); +glmc_vec3_center(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT float -glmc_vec3_distance2(vec3 a, vec3 b); +glmc_vec3_distance2(const vec3 a, const vec3 b); CGLM_EXPORT float -glmc_vec3_distance(vec3 a, vec3 b); +glmc_vec3_distance(const vec3 a, const vec3 b); CGLM_EXPORT void -glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest); +glmc_vec3_maxv(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_minv(vec3 a, vec3 b, vec3 dest); +glmc_vec3_minv(const vec3 a, const vec3 b, vec3 dest); CGLM_EXPORT void @@ -178,17 +178,17 @@ glmc_vec3_clamp(vec3 v, float minVal, float maxVal); CGLM_EXPORT void -glmc_vec3_ortho(vec3 v, vec3 dest); +glmc_vec3_ortho(const vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest); +glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest); /* ext */ CGLM_EXPORT void -glmc_vec3_mulv(vec3 a, vec3 b, vec3 d); +glmc_vec3_mulv(const vec3 a, const vec3 b, vec3 d); CGLM_EXPORT void @@ -196,51 +196,51 @@ glmc_vec3_broadcast(float val, vec3 d); CGLM_EXPORT bool -glmc_vec3_eq(vec3 v, float val); +glmc_vec3_eq(const vec3 v, float val); CGLM_EXPORT bool -glmc_vec3_eq_eps(vec3 v, float val); +glmc_vec3_eq_eps(const vec3 v, float val); CGLM_EXPORT bool -glmc_vec3_eq_all(vec3 v); +glmc_vec3_eq_all(const vec3 v); CGLM_EXPORT bool -glmc_vec3_eqv(vec3 a, vec3 b); +glmc_vec3_eqv(const vec3 a, const vec3 b); CGLM_EXPORT bool -glmc_vec3_eqv_eps(vec3 a, vec3 b); +glmc_vec3_eqv_eps(const vec3 a, const vec3 b); CGLM_EXPORT float -glmc_vec3_max(vec3 v); +glmc_vec3_max(const vec3 v); CGLM_EXPORT float -glmc_vec3_min(vec3 v); +glmc_vec3_min(const vec3 v); CGLM_EXPORT bool -glmc_vec3_isnan(vec3 v); +glmc_vec3_isnan(const vec3 v); CGLM_EXPORT bool -glmc_vec3_isinf(vec3 v); +glmc_vec3_isinf(const vec3 v); CGLM_EXPORT bool -glmc_vec3_isvalid(vec3 v); +glmc_vec3_isvalid(const vec3 v); CGLM_EXPORT void -glmc_vec3_sign(vec3 v, vec3 dest); +glmc_vec3_sign(const vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_sqrt(vec3 v, vec3 dest); +glmc_vec3_sqrt(const vec3 v, vec3 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/vec4.h b/include/cglm/call/vec4.h index 936bb52..c862ce6 100644 --- a/include/cglm/call/vec4.h +++ b/include/cglm/call/vec4.h @@ -23,7 +23,7 @@ extern "C" { CGLM_EXPORT void -glmc_vec4(vec3 v3, float last, vec4 dest); +glmc_vec4(const vec3 v3, float last, vec4 dest); CGLM_EXPORT void @@ -35,31 +35,31 @@ glmc_vec4_one(vec4 v); CGLM_EXPORT void -glmc_vec4_copy3(vec4 v, vec3 dest); +glmc_vec4_copy3(const vec4 v, vec3 dest); CGLM_EXPORT void -glmc_vec4_copy(vec4 v, vec4 dest); +glmc_vec4_copy(const vec4 v, vec4 dest); CGLM_EXPORT void -glmc_vec4_ucopy(vec4 v, vec4 dest); +glmc_vec4_ucopy(const vec4 v, vec4 dest); CGLM_EXPORT float -glmc_vec4_dot(vec4 a, vec4 b); +glmc_vec4_dot(const vec4 a, const vec4 b); CGLM_EXPORT float -glmc_vec4_norm(vec4 v); +glmc_vec4_norm(const vec4 v); CGLM_EXPORT float -glmc_vec4_norm2(vec4 v); +glmc_vec4_norm2(const vec4 v); CGLM_EXPORT void -glmc_vec4_normalize_to(vec4 v, vec4 dest); +glmc_vec4_normalize_to(const vec4 v, vec4 dest); CGLM_EXPORT void @@ -67,63 +67,63 @@ glmc_vec4_normalize(vec4 v); CGLM_EXPORT void -glmc_vec4_add(vec4 a, vec4 b, vec4 dest); +glmc_vec4_add(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_adds(vec4 v, float s, vec4 dest); +glmc_vec4_adds(const vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_sub(vec4 a, vec4 b, vec4 dest); +glmc_vec4_sub(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_subs(vec4 v, float s, vec4 dest); +glmc_vec4_subs(const vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_mul(vec4 a, vec4 b, vec4 d); +glmc_vec4_mul(const vec4 a, const vec4 b, vec4 d); CGLM_EXPORT void -glmc_vec4_scale(vec4 v, float s, vec4 dest); +glmc_vec4_scale(const vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_scale_as(vec3 v, float s, vec3 dest); +glmc_vec4_scale_as(const vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec4_div(vec4 a, vec4 b, vec4 dest); +glmc_vec4_div(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_divs(vec4 v, float s, vec4 dest); +glmc_vec4_divs(const vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest); +glmc_vec4_addadd(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest); +glmc_vec4_subadd(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest); +glmc_vec4_muladd(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_muladds(vec4 a, float s, vec4 dest); +glmc_vec4_muladds(const vec4 a, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest); +glmc_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest); +glmc_vec4_minadd(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void @@ -131,19 +131,19 @@ glmc_vec4_negate(vec4 v); CGLM_EXPORT void -glmc_vec4_negate_to(vec4 v, vec4 dest); +glmc_vec4_negate_to(const vec4 v, vec4 dest); CGLM_EXPORT float -glmc_vec4_distance(vec4 a, vec4 b); +glmc_vec4_distance(const vec4 a, const vec4 b); CGLM_EXPORT void -glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest); +glmc_vec4_maxv(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_minv(vec4 a, vec4 b, vec4 dest); +glmc_vec4_minv(const vec4 a, const vec4 b, vec4 dest); CGLM_EXPORT void @@ -151,7 +151,7 @@ glmc_vec4_clamp(vec4 v, float minVal, float maxVal); CGLM_EXPORT void -glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest); +glmc_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest); CGLM_EXPORT void @@ -161,7 +161,7 @@ glmc_vec4_cubic(float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_mulv(vec4 a, vec4 b, vec4 d); +glmc_vec4_mulv(const vec4 a, const vec4 b, vec4 d); CGLM_EXPORT void @@ -169,51 +169,51 @@ glmc_vec4_broadcast(float val, vec4 d); CGLM_EXPORT bool -glmc_vec4_eq(vec4 v, float val); +glmc_vec4_eq(const vec4 v, float val); CGLM_EXPORT bool -glmc_vec4_eq_eps(vec4 v, float val); +glmc_vec4_eq_eps(const vec4 v, float val); CGLM_EXPORT bool -glmc_vec4_eq_all(vec4 v); +glmc_vec4_eq_all(const vec4 v); CGLM_EXPORT bool -glmc_vec4_eqv(vec4 a, vec4 b); +glmc_vec4_eqv(const vec4 a, const vec4 b); CGLM_EXPORT bool -glmc_vec4_eqv_eps(vec4 a, vec4 b); +glmc_vec4_eqv_eps(const vec4 a, const vec4 b); CGLM_EXPORT float -glmc_vec4_max(vec4 v); +glmc_vec4_max(const vec4 v); CGLM_EXPORT float -glmc_vec4_min(vec4 v); +glmc_vec4_min(const vec4 v); CGLM_EXPORT bool -glmc_vec4_isnan(vec4 v); +glmc_vec4_isnan(const vec4 v); CGLM_EXPORT bool -glmc_vec4_isinf(vec4 v); +glmc_vec4_isinf(const vec4 v); CGLM_EXPORT bool -glmc_vec4_isvalid(vec4 v); +glmc_vec4_isvalid(const vec4 v); CGLM_EXPORT void -glmc_vec4_sign(vec4 v, vec4 dest); +glmc_vec4_sign(const vec4 v, vec4 dest); CGLM_EXPORT void -glmc_vec4_sqrt(vec4 v, vec4 dest); +glmc_vec4_sqrt(const vec4 v, vec4 dest); #ifdef __cplusplus } diff --git a/include/cglm/cam.h b/include/cglm/cam.h index 0e48b16..2255cf6 100644 --- a/include/cglm/cam.h +++ b/include/cglm/cam.h @@ -380,7 +380,7 @@ glm_lookat(const vec3 eye, */ CGLM_INLINE void -glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { +glm_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) { CGLM_ALIGN(8) vec3 target; glm_vec3_add(eye, dir, target); glm_lookat(eye, target, up, dest); @@ -398,7 +398,7 @@ glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { */ CGLM_INLINE void -glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) { +glm_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) { CGLM_ALIGN(8) vec3 up; glm_vec3_ortho(dir, up); glm_look(eye, dir, up, dest); @@ -417,7 +417,7 @@ glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) { */ CGLM_INLINE void -glm_persp_decomp(mat4 proj, +glm_persp_decomp(const mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, @@ -457,7 +457,7 @@ glm_persp_decomp(mat4 proj, */ CGLM_INLINE void -glm_persp_decompv(mat4 proj, float dest[6]) { +glm_persp_decompv(const mat4 proj, float dest[6]) { glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2], &dest[3], &dest[4], &dest[5]); } @@ -472,7 +472,7 @@ glm_persp_decompv(mat4 proj, float dest[6]) { */ CGLM_INLINE void -glm_persp_decomp_x(mat4 proj, +glm_persp_decomp_x(const mat4 proj, float * __restrict left, float * __restrict right) { float nearVal, m20, m00; @@ -495,7 +495,7 @@ glm_persp_decomp_x(mat4 proj, */ CGLM_INLINE void -glm_persp_decomp_y(mat4 proj, +glm_persp_decomp_y(const mat4 proj, float * __restrict top, float * __restrict bottom) { float nearVal, m21, m11; @@ -518,7 +518,7 @@ glm_persp_decomp_y(mat4 proj, */ CGLM_INLINE void -glm_persp_decomp_z(mat4 proj, +glm_persp_decomp_z(const mat4 proj, float * __restrict nearVal, float * __restrict farVal) { float m32, m22; @@ -538,7 +538,7 @@ glm_persp_decomp_z(mat4 proj, */ CGLM_INLINE void -glm_persp_decomp_far(mat4 proj, float * __restrict farVal) { +glm_persp_decomp_far(const mat4 proj, float * __restrict farVal) { *farVal = proj[3][2] / (proj[2][2] + 1.0f); } @@ -550,7 +550,7 @@ glm_persp_decomp_far(mat4 proj, float * __restrict farVal) { */ CGLM_INLINE void -glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) { +glm_persp_decomp_near(const mat4 proj, float * __restrict nearVal) { *nearVal = proj[3][2] / (proj[2][2] - 1.0f); } @@ -564,7 +564,7 @@ glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) { */ CGLM_INLINE float -glm_persp_fovy(mat4 proj) { +glm_persp_fovy(const mat4 proj) { return 2.0f * atanf(1.0f / proj[1][1]); } @@ -575,7 +575,7 @@ glm_persp_fovy(mat4 proj) { */ CGLM_INLINE float -glm_persp_aspect(mat4 proj) { +glm_persp_aspect(const mat4 proj) { return proj[1][1] / proj[0][0]; } @@ -588,7 +588,7 @@ glm_persp_aspect(mat4 proj) { */ CGLM_INLINE void -glm_persp_sizes(mat4 proj, float fovy, vec4 dest) { +glm_persp_sizes(const mat4 proj, float fovy, vec4 dest) { float t, a, nearVal, farVal; t = 2.0f * tanf(fovy * 0.5f); diff --git a/include/cglm/io.h b/include/cglm/io.h index ac0bfeb..e51f03c 100644 --- a/include/cglm/io.h +++ b/include/cglm/io.h @@ -25,8 +25,8 @@ CGLM_INLINE void -glm_mat4_print(mat4 matrix, - FILE * __restrict ostream) { +glm_mat4_print(const mat4 matrix, + FILE * const __restrict ostream) { int i; int j; @@ -55,8 +55,8 @@ glm_mat4_print(mat4 matrix, CGLM_INLINE void -glm_mat3_print(mat3 matrix, - FILE * __restrict ostream) { +glm_mat3_print(const mat3 matrix, + FILE * const __restrict ostream) { int i; int j; @@ -85,8 +85,8 @@ glm_mat3_print(mat3 matrix, CGLM_INLINE void -glm_vec4_print(vec4 vec, - FILE * __restrict ostream) { +glm_vec4_print(const vec4 vec, + FILE * const __restrict ostream) { int i; #define m 4 @@ -107,8 +107,8 @@ glm_vec4_print(vec4 vec, CGLM_INLINE void -glm_vec3_print(vec3 vec, - FILE * __restrict ostream) { +glm_vec3_print(const vec3 vec, + FILE * const __restrict ostream) { int i; #define m 3 @@ -129,8 +129,8 @@ glm_vec3_print(vec3 vec, CGLM_INLINE void -glm_ivec3_print(ivec3 vec, - FILE * __restrict ostream) { +glm_ivec3_print(const ivec3 vec, + FILE * const __restrict ostream) { int i; #define m 3 @@ -151,8 +151,8 @@ glm_ivec3_print(ivec3 vec, CGLM_INLINE void -glm_versor_print(versor vec, - FILE * __restrict ostream) { +glm_versor_print(const versor vec, + FILE * const __restrict ostream) { int i; #define m 4 @@ -173,9 +173,9 @@ glm_versor_print(versor vec, CGLM_INLINE void -glm_aabb_print(vec3 bbox[2], +glm_aabb_print(const vec3 bbox[2], const char * __restrict tag, - FILE * __restrict ostream) { + FILE * const __restrict ostream) { int i, j; #define m 3 diff --git a/include/cglm/mat3.h b/include/cglm/mat3.h index 3126064..f1597fd 100644 --- a/include/cglm/mat3.h +++ b/include/cglm/mat3.h @@ -65,7 +65,7 @@ */ CGLM_INLINE void -glm_mat3_copy(mat3 mat, mat3 dest) { +glm_mat3_copy(const mat3 mat, mat3 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -110,7 +110,7 @@ glm_mat3_identity(mat3 mat) { */ CGLM_INLINE void -glm_mat3_identity_array(mat3 * __restrict mat, size_t count) { +glm_mat3_identity_array(mat3 * const __restrict mat, size_t count) { CGLM_ALIGN_MAT mat3 t = GLM_MAT3_IDENTITY_INIT; size_t i; @@ -147,7 +147,7 @@ glm_mat3_zero(mat3 mat) { */ CGLM_INLINE void -glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { +glm_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat3_mul_sse2(m1, m2, dest); #else @@ -181,7 +181,7 @@ glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { */ CGLM_INLINE void -glm_mat3_transpose_to(mat3 m, mat3 dest) { +glm_mat3_transpose_to(const mat3 m, mat3 dest) { dest[0][0] = m[0][0]; dest[0][1] = m[1][0]; dest[0][2] = m[2][0]; @@ -227,7 +227,7 @@ glm_mat3_transpose(mat3 m) { */ CGLM_INLINE void -glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) { +glm_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) { dest[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2]; dest[1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2]; dest[2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2]; @@ -242,7 +242,7 @@ glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) { */ CGLM_INLINE float -glm_mat3_trace(mat3 m) { +glm_mat3_trace(const mat3 m) { return m[0][0] + m[1][1] + m[2][2]; } @@ -254,7 +254,7 @@ glm_mat3_trace(mat3 m) { */ CGLM_INLINE void -glm_mat3_quat(mat3 m, versor dest) { +glm_mat3_quat(const mat3 m, versor dest) { float trace, r, rinv; /* it seems using like m12 instead of m[1][2] causes extra instructions */ @@ -320,7 +320,7 @@ glm_mat3_scale(mat3 m, float s) { */ CGLM_INLINE float -glm_mat3_det(mat3 mat) { +glm_mat3_det(const mat3 mat) { float a = mat[0][0], b = mat[0][1], c = mat[0][2], d = mat[1][0], e = mat[1][1], f = mat[1][2], g = mat[2][0], h = mat[2][1], i = mat[2][2]; @@ -336,7 +336,7 @@ glm_mat3_det(mat3 mat) { */ CGLM_INLINE void -glm_mat3_inv(mat3 mat, mat3 dest) { +glm_mat3_inv(const mat3 mat, mat3 dest) { float det; float a = mat[0][0], b = mat[0][1], c = mat[0][2], d = mat[1][0], e = mat[1][1], f = mat[1][2], @@ -413,7 +413,7 @@ glm_mat3_swap_row(mat3 mat, int row1, int row2) { */ CGLM_INLINE float -glm_mat3_rmc(vec3 r, mat3 m, vec3 c) { +glm_mat3_rmc(const vec3 r, const mat3 m, const vec3 c) { vec3 tmp; glm_mat3_mulv(m, c, tmp); return glm_vec3_dot(r, tmp); diff --git a/src/affine.c b/src/affine.c index a818bd1..6388c19 100644 --- a/src/affine.c +++ b/src/affine.c @@ -10,19 +10,19 @@ CGLM_EXPORT void -glmc_translate_make(mat4 m, vec3 v) { +glmc_translate_make(mat4 m, const vec3 v) { glm_translate_make(m, v); } CGLM_EXPORT void -glmc_translate_to(mat4 m, vec3 v, mat4 dest) { +glmc_translate_to(const mat4 m, const vec3 v, mat4 dest) { glm_translate_to(m, v, dest); } CGLM_EXPORT void -glmc_translate(mat4 m, vec3 v) { +glmc_translate(mat4 m, const vec3 v) { glm_translate(m, v); } @@ -46,19 +46,19 @@ glmc_translate_z(mat4 m, float to) { CGLM_EXPORT void -glmc_scale_make(mat4 m, vec3 v) { +glmc_scale_make(mat4 m, const vec3 v) { glm_scale_make(m, v); } CGLM_EXPORT void -glmc_scale_to(mat4 m, vec3 v, mat4 dest) { +glmc_scale_to(const mat4 m, const vec3 v, mat4 dest) { glm_scale_to(m, v, dest); } CGLM_EXPORT void -glmc_scale(mat4 m, vec3 v) { +glmc_scale(mat4 m, const vec3 v) { glm_scale(m, v); } @@ -70,79 +70,79 @@ glmc_scale_uni(mat4 m, float s) { CGLM_EXPORT void -glmc_rotate_x(mat4 m, float rad, mat4 dest) { +glmc_rotate_x(const mat4 m, float rad, mat4 dest) { glm_rotate_x(m, rad, dest); } CGLM_EXPORT void -glmc_rotate_y(mat4 m, float rad, mat4 dest) { +glmc_rotate_y(const mat4 m, float rad, mat4 dest) { glm_rotate_y(m, rad, dest); } CGLM_EXPORT void -glmc_rotate_z(mat4 m, float rad, mat4 dest) { +glmc_rotate_z(const mat4 m, float rad, mat4 dest) { glm_rotate_z(m, rad, dest); } CGLM_EXPORT void -glmc_rotate_make(mat4 m, float angle, vec3 axis) { +glmc_rotate_make(mat4 m, float angle, const vec3 axis) { glm_rotate_make(m, angle, axis); } CGLM_EXPORT void -glmc_rotate(mat4 m, float angle, vec3 axis) { +glmc_rotate(mat4 m, float angle, const vec3 axis) { glm_rotate(m, angle, axis); } CGLM_EXPORT void -glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { +glmc_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) { glm_rotate_at(m, pivot, angle, axis); } CGLM_EXPORT void -glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { +glmc_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) { glm_rotate_atm(m, pivot, angle, axis); } CGLM_EXPORT void -glmc_decompose_scalev(mat4 m, vec3 s) { +glmc_decompose_scalev(const mat4 m, vec3 s) { glm_decompose_scalev(m, s); } CGLM_EXPORT bool -glmc_uniscaled(mat4 m) { +glmc_uniscaled(const mat4 m) { return glm_uniscaled(m); } CGLM_EXPORT void -glmc_decompose_rs(mat4 m, mat4 r, vec3 s) { +glmc_decompose_rs(const mat4 m, mat4 r, vec3 s) { glm_decompose_rs(m, r, s); } CGLM_EXPORT void -glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s) { +glmc_decompose(const mat4 m, vec4 t, mat4 r, vec3 s) { glm_decompose(m, t, r, s); } CGLM_EXPORT void -glmc_mul(mat4 m1, mat4 m2, mat4 dest) { +glmc_mul(const mat4 m1, const mat4 m2, mat4 dest) { glm_mul(m1, m2, dest); } CGLM_EXPORT void -glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest) { +glmc_mul_rot(const mat4 m1, const mat4 m2, mat4 dest) { glm_mul_rot(m1, m2, dest); } diff --git a/src/box.c b/src/box.c index fd639ea..4c7022b 100644 --- a/src/box.c +++ b/src/box.c @@ -10,34 +10,34 @@ CGLM_EXPORT void -glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { +glmc_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) { glm_aabb_transform(box, m, dest); } CGLM_EXPORT void -glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { +glmc_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) { glm_aabb_merge(box1, box2, dest); } CGLM_EXPORT void -glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { +glmc_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) { glm_aabb_crop(box, cropBox, dest); } CGLM_EXPORT void -glmc_aabb_crop_until(vec3 box[2], - vec3 cropBox[2], - vec3 clampBox[2], - vec3 dest[2]) { +glmc_aabb_crop_until(const vec3 box[2], + const vec3 cropBox[2], + const vec3 clampBox[2], + vec3 dest[2]) { glm_aabb_crop_until(box, cropBox, clampBox, dest); } CGLM_EXPORT bool -glmc_aabb_frustum(vec3 box[2], vec4 planes[6]) { +glmc_aabb_frustum(const vec3 box[2], vec4 planes[6]) { return glm_aabb_frustum(box, planes); } @@ -49,48 +49,48 @@ glmc_aabb_invalidate(vec3 box[2]) { CGLM_EXPORT bool -glmc_aabb_isvalid(vec3 box[2]) { +glmc_aabb_isvalid(const vec3 box[2]) { return glm_aabb_isvalid(box); } CGLM_EXPORT float -glmc_aabb_size(vec3 box[2]) { +glmc_aabb_size(const vec3 box[2]) { return glm_aabb_size(box); } CGLM_EXPORT float -glmc_aabb_radius(vec3 box[2]) { +glmc_aabb_radius(const vec3 box[2]) { return glm_aabb_radius(box); } CGLM_EXPORT void -glmc_aabb_center(vec3 box[2], vec3 dest) { +glmc_aabb_center(const vec3 box[2], vec3 dest) { glm_aabb_center(box, dest); } CGLM_EXPORT bool -glmc_aabb_aabb(vec3 box[2], vec3 other[2]) { +glmc_aabb_aabb(const vec3 box[2], const vec3 other[2]) { return glm_aabb_aabb(box, other); } CGLM_EXPORT bool -glmc_aabb_point(vec3 box[2], vec3 point) { +glmc_aabb_point(const vec3 box[2], const vec3 point) { return glm_aabb_point(box, point); } CGLM_EXPORT bool -glmc_aabb_contains(vec3 box[2], vec3 other[2]) { +glmc_aabb_contains(const vec3 box[2], const vec3 other[2]) { return glm_aabb_contains(box, other); } CGLM_EXPORT bool -glmc_aabb_sphere(vec3 box[2], vec4 s) { +glmc_aabb_sphere(const vec3 box[2], const vec4 s) { return glm_aabb_sphere(box, s); } diff --git a/src/cam.c b/src/cam.c index 39ac210..2ad4cdd 100644 --- a/src/cam.c +++ b/src/cam.c @@ -16,7 +16,7 @@ glmc_frustum(float left, float top, float nearVal, float farVal, - mat4 dest) { + mat4 dest) { glm_frustum(left, right, bottom, @@ -34,7 +34,7 @@ glmc_ortho(float left, float top, float nearVal, float farVal, - mat4 dest) { + mat4 dest) { glm_ortho(left, right, bottom, @@ -46,19 +46,19 @@ glmc_ortho(float left, CGLM_EXPORT void -glmc_ortho_aabb(vec3 box[2], mat4 dest) { +glmc_ortho_aabb(const vec3 box[2], mat4 dest) { glm_ortho_aabb(box, dest); } CGLM_EXPORT void -glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { +glmc_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) { glm_ortho_aabb_p(box, padding, dest); } CGLM_EXPORT void -glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { +glmc_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest) { glm_ortho_aabb_pz(box, padding, dest); } @@ -80,7 +80,7 @@ glmc_perspective(float fovy, float aspect, float nearVal, float farVal, - mat4 dest) { + mat4 dest) { glm_perspective(fovy, aspect, nearVal, @@ -108,28 +108,28 @@ glmc_perspective_resize(float aspect, mat4 proj) { CGLM_EXPORT void -glmc_lookat(vec3 eye, - vec3 center, - vec3 up, - mat4 dest) { +glmc_lookat(const vec3 eye, + const vec3 center, + const vec3 up, + mat4 dest) { glm_lookat(eye, center, up, dest); } CGLM_EXPORT void -glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { +glmc_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) { glm_look(eye, dir, up, dest); } CGLM_EXPORT void -glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest) { +glmc_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) { glm_look_anyup(eye, dir, dest); } CGLM_EXPORT void -glmc_persp_decomp(mat4 proj, +glmc_persp_decomp(const mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, @@ -141,13 +141,13 @@ glmc_persp_decomp(mat4 proj, CGLM_EXPORT void -glmc_persp_decompv(mat4 proj, float dest[6]) { +glmc_persp_decompv(const mat4 proj, float dest[6]) { glm_persp_decompv(proj, dest); } CGLM_EXPORT void -glmc_persp_decomp_x(mat4 proj, +glmc_persp_decomp_x(const mat4 proj, float * __restrict left, float * __restrict right) { glm_persp_decomp_x(proj, left, right); @@ -155,7 +155,7 @@ glmc_persp_decomp_x(mat4 proj, CGLM_EXPORT void -glmc_persp_decomp_y(mat4 proj, +glmc_persp_decomp_y(const mat4 proj, float * __restrict top, float * __restrict bottom) { glm_persp_decomp_y(proj, top, bottom); @@ -163,7 +163,7 @@ glmc_persp_decomp_y(mat4 proj, CGLM_EXPORT void -glmc_persp_decomp_z(mat4 proj, +glmc_persp_decomp_z(const mat4 proj, float * __restrict nearVal, float * __restrict farVal) { glm_persp_decomp_z(proj, nearVal, farVal); @@ -171,30 +171,30 @@ glmc_persp_decomp_z(mat4 proj, CGLM_EXPORT void -glmc_persp_decomp_far(mat4 proj, float * __restrict farVal) { +glmc_persp_decomp_far(const mat4 proj, float * __restrict farVal) { glm_persp_decomp_far(proj, farVal); } CGLM_EXPORT void -glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal) { +glmc_persp_decomp_near(const mat4 proj, float * __restrict nearVal) { glm_persp_decomp_near(proj, nearVal); } CGLM_EXPORT float -glmc_persp_fovy(mat4 proj) { +glmc_persp_fovy(const mat4 proj) { return glm_persp_fovy(proj); } CGLM_EXPORT float -glmc_persp_aspect(mat4 proj) { +glmc_persp_aspect(const mat4 proj) { return glm_persp_aspect(proj); } CGLM_EXPORT void -glmc_persp_sizes(mat4 proj, float fovy, vec4 dest) { +glmc_persp_sizes(const mat4 proj, float fovy, vec4 dest) { glm_persp_sizes(proj, fovy, dest); } diff --git a/src/curve.c b/src/curve.c index 74d4702..88d735e 100644 --- a/src/curve.c +++ b/src/curve.c @@ -10,6 +10,6 @@ CGLM_EXPORT float -glmc_smc(float s, mat4 m, vec4 c) { +glmc_smc(float s, const mat4 m, const vec4 c) { return glm_smc(s, m, c); } diff --git a/src/euler.c b/src/euler.c index 44d6edb..92126ca 100644 --- a/src/euler.c +++ b/src/euler.c @@ -10,54 +10,54 @@ CGLM_EXPORT void -glmc_euler_angles(mat4 m, vec3 dest) { +glmc_euler_angles(const mat4 m, vec3 dest) { glm_euler_angles(m, dest); } CGLM_EXPORT void -glmc_euler(vec3 angles, mat4 dest) { +glmc_euler(const vec3 angles, mat4 dest) { glm_euler(angles, dest); } CGLM_EXPORT void -glmc_euler_xyz(vec3 angles, mat4 dest) { +glmc_euler_xyz(const vec3 angles, mat4 dest) { glm_euler_xyz(angles, dest); } CGLM_EXPORT void -glmc_euler_zyx(vec3 angles, mat4 dest) { +glmc_euler_zyx(const vec3 angles, mat4 dest) { glm_euler_zyx(angles, dest); } CGLM_EXPORT void -glmc_euler_zxy(vec3 angles, mat4 dest) { +glmc_euler_zxy(const vec3 angles, mat4 dest) { glm_euler_zxy(angles, dest); } CGLM_EXPORT void -glmc_euler_xzy(vec3 angles, mat4 dest) { +glmc_euler_xzy(const vec3 angles, mat4 dest) { glm_euler_xzy(angles, dest); } CGLM_EXPORT void -glmc_euler_yzx(vec3 angles, mat4 dest) { +glmc_euler_yzx(const vec3 angles, mat4 dest) { glm_euler_yzx(angles, dest); } CGLM_EXPORT void -glmc_euler_yxz(vec3 angles, mat4 dest) { +glmc_euler_yxz(const vec3 angles, mat4 dest) { glm_euler_yxz(angles, dest); } CGLM_EXPORT void -glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest) { +glmc_euler_by_order(const vec3 angles, glm_euler_sq axis, mat4 dest) { glm_euler_by_order(angles, axis, dest); } diff --git a/src/frustum.c b/src/frustum.c index 312c3d3..5e896f4 100644 --- a/src/frustum.c +++ b/src/frustum.c @@ -10,33 +10,33 @@ CGLM_EXPORT void -glmc_frustum_planes(mat4 m, vec4 dest[6]) { +glmc_frustum_planes(const mat4 m, vec4 dest[6]) { glm_frustum_planes(m, dest); } CGLM_EXPORT void -glmc_frustum_corners(mat4 invMat, vec4 dest[8]) { +glmc_frustum_corners(const mat4 invMat, vec4 dest[8]) { glm_frustum_corners(invMat, dest); } CGLM_EXPORT void -glmc_frustum_center(vec4 corners[8], vec4 dest) { +glmc_frustum_center(const vec4 corners[8], vec4 dest) { glm_frustum_center(corners, dest); } CGLM_EXPORT void -glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { +glmc_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) { glm_frustum_box(corners, m, box); } CGLM_EXPORT void -glmc_frustum_corners_at(vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]) { +glmc_frustum_corners_at(const vec4 corners[8], + float splitDist, + float farDist, + vec4 planeCorners[4]) { glm_frustum_corners_at(corners, splitDist, farDist, planeCorners); } diff --git a/src/io.c b/src/io.c index fb2b5a9..9e1c15f 100644 --- a/src/io.c +++ b/src/io.c @@ -10,35 +10,35 @@ CGLM_EXPORT void -glmc_mat4_print(mat4 matrix, - FILE * __restrict ostream) { +glmc_mat4_print(const mat4 matrix, + FILE * const __restrict ostream) { glm_mat4_print(matrix, ostream); } CGLM_EXPORT void -glmc_mat3_print(mat3 matrix, - FILE * __restrict ostream) { +glmc_mat3_print(const mat3 matrix, + FILE * const __restrict ostream) { glm_mat3_print(matrix, ostream); } CGLM_EXPORT void -glmc_vec4_print(vec4 vec, - FILE * __restrict ostream) { +glmc_vec4_print(const vec4 vec, + FILE * const __restrict ostream) { glm_vec4_print(vec, ostream); } CGLM_EXPORT void -glmc_vec3_print(vec3 vec, - FILE * __restrict ostream) { +glmc_vec3_print(const vec3 vec, + FILE * const __restrict ostream) { glm_vec3_print(vec, ostream); } CGLM_EXPORT void -glmc_versor_print(versor vec, - FILE * __restrict ostream) { +glmc_versor_print(const versor vec, + FILE * const __restrict ostream) { glm_versor_print(vec, ostream); } diff --git a/src/mat3.c b/src/mat3.c index 337f1f1..a99f583 100644 --- a/src/mat3.c +++ b/src/mat3.c @@ -10,7 +10,7 @@ CGLM_EXPORT void -glmc_mat3_copy(mat3 mat, mat3 dest) { +glmc_mat3_copy(const mat3 mat, mat3 dest) { glm_mat3_copy(mat, dest); } @@ -22,19 +22,19 @@ glmc_mat3_identity(mat3 mat) { CGLM_EXPORT void -glmc_mat3_identity_array(mat3 * __restrict mat, size_t count) { +glmc_mat3_identity_array(mat3 * const __restrict mat, size_t count) { glm_mat3_identity_array(mat, count); } CGLM_EXPORT void -glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { +glmc_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) { glm_mat3_mul(m1, m2, dest); } CGLM_EXPORT void -glmc_mat3_transpose_to(mat3 m, mat3 dest) { +glmc_mat3_transpose_to(const mat3 m, mat3 dest) { glm_mat3_transpose_to(m, dest); } @@ -46,19 +46,19 @@ glmc_mat3_transpose(mat3 m) { CGLM_EXPORT void -glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest) { +glmc_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) { glm_mat3_mulv(m, v, dest); } CGLM_EXPORT float -glmc_mat3_trace(mat3 m) { +glmc_mat3_trace(const mat3 m) { return glm_mat3_trace(m); } CGLM_EXPORT void -glmc_mat3_quat(mat3 m, versor dest) { +glmc_mat3_quat(const mat3 m, versor dest) { glm_mat3_quat(m, dest); } @@ -70,13 +70,13 @@ glmc_mat3_scale(mat3 m, float s) { CGLM_EXPORT float -glmc_mat3_det(mat3 mat) { +glmc_mat3_det(const mat3 mat) { return glm_mat3_det(mat); } CGLM_EXPORT void -glmc_mat3_inv(mat3 mat, mat3 dest) { +glmc_mat3_inv(const mat3 mat, mat3 dest) { glm_mat3_inv(mat, dest); } @@ -94,6 +94,6 @@ glmc_mat3_swap_row(mat3 mat, int row1, int row2) { CGLM_EXPORT float -glmc_mat3_rmc(vec3 r, mat3 m, vec3 c) { +glmc_mat3_rmc(const vec3 r, const mat3 m, const vec3 c) { return glm_mat3_rmc(r, m, c); } diff --git a/src/mat4.c b/src/mat4.c index c648a6e..08c1257 100644 --- a/src/mat4.c +++ b/src/mat4.c @@ -10,13 +10,13 @@ CGLM_EXPORT void -glmc_mat4_ucopy(mat4 mat, mat4 dest) { +glmc_mat4_ucopy(const mat4 mat, mat4 dest) { glm_mat4_copy(mat, dest); } CGLM_EXPORT void -glmc_mat4_copy(mat4 mat, mat4 dest) { +glmc_mat4_copy(const mat4 mat, mat4 dest) { glm_mat4_copy(mat, dest); } @@ -28,73 +28,73 @@ glmc_mat4_identity(mat4 mat) { CGLM_EXPORT void -glmc_mat4_identity_array(mat4 * __restrict mat, size_t count) { +glmc_mat4_identity_array(mat4 * const __restrict mat, size_t count) { glm_mat4_identity_array(mat, count); } CGLM_EXPORT void -glmc_mat4_pick3(mat4 mat, mat3 dest) { +glmc_mat4_pick3(const mat4 mat, mat3 dest) { glm_mat4_pick3(mat, dest); } CGLM_EXPORT void -glmc_mat4_pick3t(mat4 mat, mat3 dest) { +glmc_mat4_pick3t(const mat4 mat, mat3 dest) { glm_mat4_pick3t(mat, dest); } CGLM_EXPORT void -glmc_mat4_ins3(mat3 mat, mat4 dest) { +glmc_mat4_ins3(const mat3 mat, mat4 dest) { glm_mat4_ins3(mat, dest); } CGLM_EXPORT void -glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { +glmc_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) { glm_mat4_mul(m1, m2, dest); } CGLM_EXPORT void -glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { +glmc_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) { glm_mat4_mulN(matrices, len, dest); } CGLM_EXPORT void -glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest) { +glmc_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) { glm_mat4_mulv(m, v, dest); } CGLM_EXPORT void -glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { +glmc_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) { glm_mat4_mulv3(m, v, last, dest); } CGLM_EXPORT float -glmc_mat4_trace(mat4 m) { +glmc_mat4_trace(const mat4 m) { return glm_mat4_trace(m); } CGLM_EXPORT float -glmc_mat4_trace3(mat4 m) { +glmc_mat4_trace3(const mat4 m) { return glm_mat4_trace3(m); } CGLM_EXPORT void -glmc_mat4_quat(mat4 m, versor dest) { +glmc_mat4_quat(const mat4 m, versor dest) { glm_mat4_quat(m, dest); } CGLM_EXPORT void -glmc_mat4_transpose_to(mat4 m, mat4 dest) { +glmc_mat4_transpose_to(const mat4 m, mat4 dest) { glm_mat4_transpose_to(m, dest); } @@ -118,25 +118,25 @@ glmc_mat4_scale(mat4 m, float s) { CGLM_EXPORT float -glmc_mat4_det(mat4 mat) { +glmc_mat4_det(const mat4 mat) { return glm_mat4_det(mat); } CGLM_EXPORT void -glmc_mat4_inv(mat4 mat, mat4 dest) { +glmc_mat4_inv(const mat4 mat, mat4 dest) { glm_mat4_inv(mat, dest); } CGLM_EXPORT void -glmc_mat4_inv_precise(mat4 mat, mat4 dest) { +glmc_mat4_inv_precise(const mat4 mat, mat4 dest) { glm_mat4_inv_precise(mat, dest); } CGLM_EXPORT void -glmc_mat4_inv_fast(mat4 mat, mat4 dest) { +glmc_mat4_inv_fast(const mat4 mat, mat4 dest) { glm_mat4_inv_fast(mat, dest); } @@ -154,6 +154,6 @@ glmc_mat4_swap_row(mat4 mat, int row1, int row2) { CGLM_EXPORT float -glmc_mat4_rmc(vec4 r, mat4 m, vec4 c) { +glmc_mat4_rmc(const vec4 r, const mat4 m, const vec4 c) { return glm_mat4_rmc(r, m, c); } diff --git a/src/project.c b/src/project.c index 91c7128..ec7f33d 100644 --- a/src/project.c +++ b/src/project.c @@ -10,18 +10,18 @@ CGLM_EXPORT void -glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { +glmc_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) { glm_unprojecti(pos, invMat, vp, dest); } CGLM_EXPORT void -glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { +glmc_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { glm_unproject(pos, m, vp, dest); } CGLM_EXPORT void -glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { +glmc_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { glm_project(pos, m, vp, dest); } diff --git a/src/quat.c b/src/quat.c index 32674a7..7a642a8 100644 --- a/src/quat.c +++ b/src/quat.c @@ -16,7 +16,7 @@ glmc_quat_identity(versor q) { CGLM_EXPORT void -glmc_quat_identity_array(versor * __restrict q, size_t count) { +glmc_quat_identity_array(versor * const __restrict q, size_t count) { glm_quat_identity_array(q, count); } @@ -34,25 +34,25 @@ glmc_quat(versor q, float angle, float x, float y, float z) { CGLM_EXPORT void -glmc_quatv(versor q, float angle, vec3 axis) { +glmc_quatv(versor q, float angle, const vec3 axis) { glm_quatv(q, angle, axis); } CGLM_EXPORT void -glmc_quat_copy(versor q, versor dest) { +glmc_quat_copy(const versor q, versor dest) { glm_quat_copy(q, dest); } CGLM_EXPORT float -glmc_quat_norm(versor q) { +glmc_quat_norm(const versor q) { return glm_quat_norm(q); } CGLM_EXPORT void -glmc_quat_normalize_to(versor q, versor dest) { +glmc_quat_normalize_to(const versor q, versor dest) { glm_quat_normalize_to(q, dest); } @@ -64,150 +64,154 @@ glmc_quat_normalize(versor q) { CGLM_EXPORT float -glmc_quat_dot(versor p, versor q) { +glmc_quat_dot(const versor p, const versor q) { return glm_quat_dot(p, q); } CGLM_EXPORT void -glmc_quat_conjugate(versor q, versor dest) { +glmc_quat_conjugate(const versor q, versor dest) { glm_quat_conjugate(q, dest); } CGLM_EXPORT void -glmc_quat_inv(versor q, versor dest) { +glmc_quat_inv(const versor q, versor dest) { glm_quat_inv(q, dest); } CGLM_EXPORT void -glmc_quat_add(versor p, versor q, versor dest) { +glmc_quat_add(const versor p, const versor q, versor dest) { glm_quat_add(p, q, dest); } CGLM_EXPORT void -glmc_quat_sub(versor p, versor q, versor dest) { +glmc_quat_sub(const versor p, const versor q, versor dest) { glm_quat_sub(p, q, dest); } CGLM_EXPORT float -glmc_quat_real(versor q) { +glmc_quat_real(const versor q) { return glm_quat_real(q); } CGLM_EXPORT void -glmc_quat_imag(versor q, vec3 dest) { +glmc_quat_imag(const versor q, vec3 dest) { glm_quat_imag(q, dest); } CGLM_EXPORT void -glmc_quat_imagn(versor q, vec3 dest) { +glmc_quat_imagn(const versor q, vec3 dest) { glm_quat_imagn(q, dest); } CGLM_EXPORT float -glmc_quat_imaglen(versor q) { +glmc_quat_imaglen(const versor q) { return glm_quat_imaglen(q); } CGLM_EXPORT float -glmc_quat_angle(versor q) { +glmc_quat_angle(const versor q) { return glm_quat_angle(q); } CGLM_EXPORT void -glmc_quat_axis(versor q, versor dest) { +glmc_quat_axis(const versor q, versor dest) { glm_quat_axis(q, dest); } CGLM_EXPORT void -glmc_quat_mul(versor p, versor q, versor dest) { +glmc_quat_mul(const versor p, const versor q, versor dest) { glm_quat_mul(p, q, dest); } CGLM_EXPORT void -glmc_quat_mat4(versor q, mat4 dest) { +glmc_quat_mat4(const versor q, mat4 dest) { glm_quat_mat4(q, dest); } CGLM_EXPORT void -glmc_quat_mat4t(versor q, mat4 dest) { +glmc_quat_mat4t(const versor q, mat4 dest) { glm_quat_mat4t(q, dest); } CGLM_EXPORT void -glmc_quat_mat3(versor q, mat3 dest) { +glmc_quat_mat3(const versor q, mat3 dest) { glm_quat_mat3(q, dest); } CGLM_EXPORT void -glmc_quat_mat3t(versor q, mat3 dest) { +glmc_quat_mat3t(const versor q, mat3 dest) { glm_quat_mat3t(q, dest); } CGLM_EXPORT void -glmc_quat_lerp(versor from, versor to, float t, versor dest) { +glmc_quat_lerp(const versor from, const versor to, float t, versor dest) { glm_quat_lerp(from, to, t, dest); } CGLM_EXPORT void -glmc_quat_slerp(versor from, versor to, float t, versor dest) { +glmc_quat_slerp(const versor from, const versor to, float t, versor dest) { glm_quat_slerp(from, to, t, dest); } CGLM_EXPORT void -glmc_quat_look(vec3 eye, versor ori, mat4 dest) { +glmc_quat_look(const vec3 eye, const versor ori, mat4 dest) { glm_quat_look(eye, ori, dest); } CGLM_EXPORT void -glmc_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) { +glmc_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) { glm_quat_for(dir, fwd, up, dest); } CGLM_EXPORT void -glmc_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) { +glmc_quat_forp(const vec3 from, + const vec3 to, + const vec3 fwd, + const vec3 up, + versor dest) { glm_quat_forp(from, to, fwd, up, dest); } CGLM_EXPORT void -glmc_quat_rotatev(versor q, vec3 v, vec3 dest) { +glmc_quat_rotatev(const versor q, const vec3 v, vec3 dest) { glm_quat_rotatev(q, v, dest); } CGLM_EXPORT void -glmc_quat_rotate(mat4 m, versor q, mat4 dest) { +glmc_quat_rotate(const mat4 m, const versor q, mat4 dest) { glm_quat_rotate(m, q, dest); } CGLM_EXPORT void -glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot) { +glmc_quat_rotate_at(mat4 model, const versor q, const vec3 pivot) { glm_quat_rotate_at(model, q, pivot); } CGLM_EXPORT void -glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { +glmc_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot) { glm_quat_rotate_atm(m, q, pivot); } diff --git a/src/sphere.c b/src/sphere.c index 003ef87..1026ed4 100644 --- a/src/sphere.c +++ b/src/sphere.c @@ -10,30 +10,30 @@ CGLM_EXPORT float -glmc_sphere_radii(vec4 s) { +glmc_sphere_radii(const vec4 s) { return glm_sphere_radii(s); } CGLM_EXPORT void -glmc_sphere_transform(vec4 s, mat4 m, vec4 dest) { +glmc_sphere_transform(const vec4 s, const mat4 m, vec4 dest) { glm_sphere_transform(s, m, dest); } CGLM_EXPORT void -glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { +glmc_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) { glm_sphere_merge(s1, s2, dest); } CGLM_EXPORT bool -glmc_sphere_sphere(vec4 s1, vec4 s2) { +glmc_sphere_sphere(const vec4 s1, const vec4 s2) { return glm_sphere_sphere(s1, s2); } CGLM_EXPORT bool -glmc_sphere_point(vec4 s, vec3 point) { +glmc_sphere_point(const vec4 s, const vec3 point) { return glm_sphere_point(s, point); } diff --git a/src/vec3.c b/src/vec3.c index 14edaf6..afc5bbe 100644 --- a/src/vec3.c +++ b/src/vec3.c @@ -10,13 +10,13 @@ CGLM_EXPORT void -glmc_vec3(vec4 v4, vec3 dest) { +glmc_vec3(const vec4 v4, vec3 dest) { glm_vec3(v4, dest); } CGLM_EXPORT void -glmc_vec3_copy(vec3 a, vec3 dest) { +glmc_vec3_copy(const vec3 a, vec3 dest) { glm_vec3_copy(a, dest); } @@ -34,31 +34,31 @@ glmc_vec3_one(vec3 v) { CGLM_EXPORT float -glmc_vec3_dot(vec3 a, vec3 b) { +glmc_vec3_dot(const vec3 a, const vec3 b) { return glm_vec3_dot(a, b); } CGLM_EXPORT void -glmc_vec3_cross(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_cross(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_cross(a, b, dest); } CGLM_EXPORT void -glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_crossn(a, b, dest); } CGLM_EXPORT float -glmc_vec3_norm(vec3 v) { +glmc_vec3_norm(const vec3 v) { return glm_vec3_norm(v); } CGLM_EXPORT void -glmc_vec3_normalize_to(vec3 v, vec3 dest) { +glmc_vec3_normalize_to(const vec3 v, vec3 dest) { glm_vec3_normalize_to(v, dest); } @@ -70,97 +70,97 @@ glmc_vec3_normalize(vec3 v) { CGLM_EXPORT float -glmc_vec3_norm2(vec3 v) { +glmc_vec3_norm2(const vec3 v) { return glm_vec3_norm2(v); } CGLM_EXPORT void -glmc_vec3_add(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_add(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_add(a, b, dest); } CGLM_EXPORT void -glmc_vec3_adds(vec3 v, float s, vec3 dest) { +glmc_vec3_adds(const vec3 v, float s, vec3 dest) { glm_vec3_adds(v, s, dest); } CGLM_EXPORT void -glmc_vec3_sub(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_sub(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_sub(a, b, dest); } CGLM_EXPORT void -glmc_vec3_subs(vec3 v, float s, vec3 dest) { +glmc_vec3_subs(const vec3 v, float s, vec3 dest) { glm_vec3_subs(v, s, dest); } CGLM_EXPORT void -glmc_vec3_mul(vec3 a, vec3 b, vec3 d) { +glmc_vec3_mul(const vec3 a, const vec3 b, vec3 d) { glm_vec3_mul(a, b, d); } CGLM_EXPORT void -glmc_vec3_scale(vec3 v, float s, vec3 dest) { +glmc_vec3_scale(const vec3 v, float s, vec3 dest) { glm_vec3_scale(v, s, dest); } CGLM_EXPORT void -glmc_vec3_scale_as(vec3 v, float s, vec3 dest) { +glmc_vec3_scale_as(const vec3 v, float s, vec3 dest) { glm_vec3_scale_as(v, s, dest); } CGLM_EXPORT void -glmc_vec3_div(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_div(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_div(a, b, dest); } CGLM_EXPORT void -glmc_vec3_divs(vec3 a, float s, vec3 dest) { +glmc_vec3_divs(const vec3 a, float s, vec3 dest) { glm_vec3_divs(a, s, dest); } CGLM_EXPORT void -glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_addadd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_subadd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_muladd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_muladds(vec3 a, float s, vec3 dest) { +glmc_vec3_muladds(const vec3 a, float s, vec3 dest) { glm_vec3_muladds(a, s, dest); } CGLM_EXPORT void -glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_maxadd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_minadd(a, b, dest); } @@ -172,67 +172,67 @@ glmc_vec3_negate(vec3 v) { CGLM_EXPORT void -glmc_vec3_negate_to(vec3 v, vec3 dest) { +glmc_vec3_negate_to(const vec3 v, vec3 dest) { glm_vec3_negate_to(v, dest); } CGLM_EXPORT float -glmc_vec3_angle(vec3 a, vec3 b) { +glmc_vec3_angle(const vec3 a, const vec3 b) { return glm_vec3_angle(a, b); } CGLM_EXPORT void -glmc_vec3_rotate(vec3 v, float angle, vec3 axis) { +glmc_vec3_rotate(vec3 v, float angle, const vec3 axis) { glm_vec3_rotate(v, angle, axis); } CGLM_EXPORT void -glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { +glmc_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) { glm_vec3_rotate_m4(m, v, dest); } CGLM_EXPORT void -glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { +glmc_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) { glm_vec3_rotate_m3(m, v, dest); } CGLM_EXPORT void -glmc_vec3_proj(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_proj(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_proj(a, b, dest); } CGLM_EXPORT void -glmc_vec3_center(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_center(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_center(a, b, dest); } CGLM_EXPORT float -glmc_vec3_distance2(vec3 a, vec3 b) { +glmc_vec3_distance2(const vec3 a, const vec3 b) { return glm_vec3_distance2(a, b); } CGLM_EXPORT float -glmc_vec3_distance(vec3 a, vec3 b) { +glmc_vec3_distance(const vec3 a, const vec3 b) { return glm_vec3_distance(a, b); } CGLM_EXPORT void -glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_minv(a, b, dest); } CGLM_EXPORT void -glmc_vec3_minv(vec3 a, vec3 b, vec3 dest) { +glmc_vec3_minv(const vec3 a, const vec3 b, vec3 dest) { glm_vec3_maxv(a, b, dest); } @@ -244,13 +244,13 @@ glmc_vec3_clamp(vec3 v, float minVal, float maxVal) { CGLM_EXPORT void -glmc_vec3_ortho(vec3 v, vec3 dest) { +glmc_vec3_ortho(const vec3 v, vec3 dest) { glm_vec3_ortho(v, dest); } CGLM_EXPORT void -glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { +glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) { glm_vec3_lerp(from, to, t, dest); } @@ -258,7 +258,7 @@ glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { CGLM_EXPORT void -glmc_vec3_mulv(vec3 a, vec3 b, vec3 d) { +glmc_vec3_mulv(const vec3 a, const vec3 b, vec3 d) { glm_vec3_mulv(a, b, d); } @@ -270,72 +270,72 @@ glmc_vec3_broadcast(float val, vec3 d) { CGLM_EXPORT bool -glmc_vec3_eq(vec3 v, float val) { +glmc_vec3_eq(const vec3 v, float val) { return glm_vec3_eq(v, val); } CGLM_EXPORT bool -glmc_vec3_eq_eps(vec3 v, float val) { +glmc_vec3_eq_eps(const vec3 v, float val) { return glm_vec3_eq_eps(v, val); } CGLM_EXPORT bool -glmc_vec3_eq_all(vec3 v) { +glmc_vec3_eq_all(const vec3 v) { return glm_vec3_eq_all(v); } CGLM_EXPORT bool -glmc_vec3_eqv(vec3 a, vec3 b) { +glmc_vec3_eqv(const vec3 a, const vec3 b) { return glm_vec3_eqv(a, b); } CGLM_EXPORT bool -glmc_vec3_eqv_eps(vec3 a, vec3 b) { +glmc_vec3_eqv_eps(const vec3 a, const vec3 b) { return glm_vec3_eqv_eps(a, b); } CGLM_EXPORT float -glmc_vec3_max(vec3 v) { +glmc_vec3_max(const vec3 v) { return glm_vec3_max(v); } CGLM_EXPORT float -glmc_vec3_min(vec3 v) { +glmc_vec3_min(const vec3 v) { return glm_vec3_min(v); } CGLM_EXPORT bool -glmc_vec3_isnan(vec3 v) { +glmc_vec3_isnan(const vec3 v) { return glm_vec3_isnan(v); } CGLM_EXPORT bool -glmc_vec3_isinf(vec3 v) { +glmc_vec3_isinf(const vec3 v) { return glm_vec3_isinf(v); } CGLM_EXPORT bool -glmc_vec3_isvalid(vec3 v) { +glmc_vec3_isvalid(const vec3 v) { return glm_vec3_isvalid(v); } CGLM_EXPORT void -glmc_vec3_sign(vec3 v, vec3 dest) { +glmc_vec3_sign(const vec3 v, vec3 dest) { glm_vec3_sign(v, dest); } CGLM_EXPORT void -glmc_vec3_sqrt(vec3 v, vec3 dest) { +glmc_vec3_sqrt(const vec3 v, vec3 dest) { glm_vec3_sqrt(v, dest); } diff --git a/src/vec4.c b/src/vec4.c index 0bb6a6e..932f4ff 100644 --- a/src/vec4.c +++ b/src/vec4.c @@ -10,7 +10,7 @@ CGLM_EXPORT void -glmc_vec4(vec3 v3, float last, vec4 dest) { +glmc_vec4(const vec3 v3, float last, vec4 dest) { glm_vec4(v3, last, dest); } @@ -28,37 +28,37 @@ glmc_vec4_one(vec4 v) { CGLM_EXPORT void -glmc_vec4_copy3(vec4 v, vec3 dest) { +glmc_vec4_copy3(const vec4 v, vec3 dest) { glm_vec4_copy3(v, dest); } CGLM_EXPORT void -glmc_vec4_copy(vec4 v, vec4 dest) { +glmc_vec4_copy(const vec4 v, vec4 dest) { glm_vec4_copy(v, dest); } CGLM_EXPORT void -glmc_vec4_ucopy(vec4 v, vec4 dest) { +glmc_vec4_ucopy(const vec4 v, vec4 dest) { glm_vec4_ucopy(v, dest); } CGLM_EXPORT float -glmc_vec4_dot(vec4 a, vec4 b) { +glmc_vec4_dot(const vec4 a, const vec4 b) { return glm_vec4_dot(a, b); } CGLM_EXPORT float -glmc_vec4_norm(vec4 v) { +glmc_vec4_norm(const vec4 v) { return glm_vec4_norm(v); } CGLM_EXPORT void -glmc_vec4_normalize_to(vec4 v, vec4 dest) { +glmc_vec4_normalize_to(const vec4 v, vec4 dest) { glm_vec4_normalize_to(v, dest); } @@ -70,97 +70,97 @@ glmc_vec4_normalize(vec4 v) { CGLM_EXPORT float -glmc_vec4_norm2(vec4 v) { +glmc_vec4_norm2(const vec4 v) { return glm_vec4_norm2(v); } CGLM_EXPORT void -glmc_vec4_add(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_add(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_add(a, b, dest); } CGLM_EXPORT void -glmc_vec4_adds(vec4 v, float s, vec4 dest) { +glmc_vec4_adds(const vec4 v, float s, vec4 dest) { glm_vec4_adds(v, s, dest); } CGLM_EXPORT void -glmc_vec4_sub(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_sub(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_sub(a, b, dest); } CGLM_EXPORT void -glmc_vec4_subs(vec4 v, float s, vec4 dest) { +glmc_vec4_subs(const vec4 v, float s, vec4 dest) { glm_vec4_subs(v, s, dest); } CGLM_EXPORT void -glmc_vec4_mul(vec4 a, vec4 b, vec4 d) { +glmc_vec4_mul(const vec4 a, const vec4 b, vec4 d) { glm_vec4_mul(a, b, d); } CGLM_EXPORT void -glmc_vec4_scale(vec4 v, float s, vec4 dest) { +glmc_vec4_scale(const vec4 v, float s, vec4 dest) { glm_vec4_scale(v, s, dest); } CGLM_EXPORT void -glmc_vec4_scale_as(vec4 v, float s, vec4 dest) { +glmc_vec4_scale_as(const vec4 v, float s, vec4 dest) { glm_vec4_scale_as(v, s, dest); } CGLM_EXPORT void -glmc_vec4_div(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_div(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_div(a, b, dest); } CGLM_EXPORT void -glmc_vec4_divs(vec4 v, float s, vec4 dest) { +glmc_vec4_divs(const vec4 v, float s, vec4 dest) { glm_vec4_divs(v, s, dest); } CGLM_EXPORT void -glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_addadd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_subadd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_muladd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_muladds(vec4 a, float s, vec4 dest) { +glmc_vec4_muladds(const vec4 a, float s, vec4 dest) { glm_vec4_muladds(a, s, dest); } CGLM_EXPORT void -glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_maxadd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_minadd(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_minadd(a, b, dest); } @@ -172,25 +172,25 @@ glmc_vec4_negate(vec4 v) { CGLM_EXPORT void -glmc_vec4_negate_to(vec4 v, vec4 dest) { +glmc_vec4_negate_to(const vec4 v, vec4 dest) { glm_vec4_negate_to(v, dest); } CGLM_EXPORT float -glmc_vec4_distance(vec4 a, vec4 b) { +glmc_vec4_distance(const vec4 a, const vec4 b) { return glm_vec4_distance(a, b); } CGLM_EXPORT void -glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_minv(a, b, dest); } CGLM_EXPORT void -glmc_vec4_minv(vec4 a, vec4 b, vec4 dest) { +glmc_vec4_minv(const vec4 a, const vec4 b, vec4 dest) { glm_vec4_maxv(a, b, dest); } @@ -202,7 +202,7 @@ glmc_vec4_clamp(vec4 v, float minVal, float maxVal) { CGLM_EXPORT void -glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { +glmc_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) { glm_vec4_lerp(from, to, t, dest); } @@ -216,7 +216,7 @@ glmc_vec4_cubic(float s, vec4 dest) { CGLM_EXPORT void -glmc_vec4_mulv(vec4 a, vec4 b, vec4 d) { +glmc_vec4_mulv(const vec4 a, const vec4 b, vec4 d) { glm_vec4_mulv(a, b, d); } @@ -228,72 +228,72 @@ glmc_vec4_broadcast(float val, vec4 d) { CGLM_EXPORT bool -glmc_vec4_eq(vec4 v, float val) { +glmc_vec4_eq(const vec4 v, float val) { return glm_vec4_eq(v, val); } CGLM_EXPORT bool -glmc_vec4_eq_eps(vec4 v, float val) { +glmc_vec4_eq_eps(const vec4 v, float val) { return glm_vec4_eq_eps(v, val); } CGLM_EXPORT bool -glmc_vec4_eq_all(vec4 v) { +glmc_vec4_eq_all(const vec4 v) { return glm_vec4_eq_all(v); } CGLM_EXPORT bool -glmc_vec4_eqv(vec4 a, vec4 b) { +glmc_vec4_eqv(const vec4 a, const vec4 b) { return glm_vec4_eqv(a, b); } CGLM_EXPORT bool -glmc_vec4_eqv_eps(vec4 a, vec4 b) { +glmc_vec4_eqv_eps(const vec4 a, const vec4 b) { return glm_vec4_eqv_eps(a, b); } CGLM_EXPORT float -glmc_vec4_max(vec4 v) { +glmc_vec4_max(const vec4 v) { return glm_vec4_max(v); } CGLM_EXPORT float -glmc_vec4_min(vec4 v) { +glmc_vec4_min(const vec4 v) { return glm_vec4_min(v); } CGLM_EXPORT bool -glmc_vec4_isnan(vec4 v) { +glmc_vec4_isnan(const vec4 v) { return glm_vec4_isnan(v); } CGLM_EXPORT bool -glmc_vec4_isinf(vec4 v) { +glmc_vec4_isinf(const vec4 v) { return glm_vec4_isinf(v); } CGLM_EXPORT bool -glmc_vec4_isvalid(vec4 v) { +glmc_vec4_isvalid(const vec4 v) { return glm_vec4_isvalid(v); } CGLM_EXPORT void -glmc_vec4_sign(vec4 v, vec4 dest) { +glmc_vec4_sign(const vec4 v, vec4 dest) { glm_vec4_sign(v, dest); } CGLM_EXPORT void -glmc_vec4_sqrt(vec4 v, vec4 dest) { +glmc_vec4_sqrt(const vec4 v, vec4 dest) { glm_vec4_sqrt(v, dest); } From bb8ff257521f7169645458df3891164e77bdddc8 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Tue, 30 Apr 2019 08:19:07 +0300 Subject: [PATCH 19/56] Revert "mark readonly parameters as const" --- include/cglm/affine-mat.h | 4 +- include/cglm/affine.h | 36 ++++++------ include/cglm/box.h | 37 ++++++------- include/cglm/call/affine.h | 38 ++++++------- include/cglm/call/box.h | 32 +++++------ include/cglm/call/cam.h | 38 ++++++------- include/cglm/call/curve.h | 2 +- include/cglm/call/euler.h | 18 +++--- include/cglm/call/frustum.h | 16 +++--- include/cglm/call/io.h | 20 +++---- include/cglm/call/mat3.h | 20 +++---- include/cglm/call/mat4.h | 38 ++++++------- include/cglm/call/project.h | 6 +- include/cglm/call/quat.h | 64 ++++++++++----------- include/cglm/call/sphere.h | 10 ++-- include/cglm/call/vec3.h | 98 ++++++++++++++++----------------- include/cglm/call/vec4.h | 82 +++++++++++++-------------- include/cglm/cam.h | 42 +++++++------- include/cglm/color.h | 2 +- include/cglm/curve.h | 2 +- include/cglm/euler.h | 20 +++---- include/cglm/frustum.h | 16 +++--- include/cglm/io.h | 28 +++++----- include/cglm/mat3.h | 20 +++---- include/cglm/mat4.h | 38 ++++++------- include/cglm/project.h | 6 +- include/cglm/quat.h | 70 +++++++++++------------ include/cglm/simd/avx/affine.h | 2 +- include/cglm/simd/avx/mat4.h | 2 +- include/cglm/simd/neon/mat4.h | 2 +- include/cglm/simd/sse2/affine.h | 4 +- include/cglm/simd/sse2/mat3.h | 2 +- include/cglm/simd/sse2/mat4.h | 12 ++-- include/cglm/simd/sse2/quat.h | 2 +- include/cglm/simd/x86.h | 4 +- include/cglm/sphere.h | 10 ++-- include/cglm/vec3-ext.h | 24 ++++---- include/cglm/vec3.h | 78 +++++++++++++------------- include/cglm/vec4-ext.h | 24 ++++---- include/cglm/vec4.h | 56 +++++++++---------- src/affine.c | 38 ++++++------- src/box.c | 32 +++++------ src/cam.c | 44 +++++++-------- src/curve.c | 2 +- src/euler.c | 18 +++--- src/frustum.c | 16 +++--- src/io.c | 20 +++---- src/mat3.c | 20 +++---- src/mat4.c | 38 ++++++------- src/project.c | 6 +- src/quat.c | 64 ++++++++++----------- src/sphere.c | 10 ++-- src/vec3.c | 98 ++++++++++++++++----------------- src/vec4.c | 82 +++++++++++++-------------- 54 files changed, 751 insertions(+), 762 deletions(-) diff --git a/include/cglm/affine-mat.h b/include/cglm/affine-mat.h index 9d78633..f58749b 100644 --- a/include/cglm/affine-mat.h +++ b/include/cglm/affine-mat.h @@ -44,7 +44,7 @@ */ CGLM_INLINE void -glm_mul(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mul(mat4 m1, mat4 m2, mat4 dest) { #ifdef __AVX__ glm_mul_avx(m1, m2, dest); #elif defined( __SSE__ ) || defined( __SSE2__ ) @@ -100,7 +100,7 @@ glm_mul(const mat4 m1, const mat4 m2, mat4 dest) { */ CGLM_INLINE void -glm_mul_rot(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mul_rot(mat4 m1, mat4 m2, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mul_rot_sse2(m1, m2, dest); #else diff --git a/include/cglm/affine.h b/include/cglm/affine.h index af567b6..84ead4b 100644 --- a/include/cglm/affine.h +++ b/include/cglm/affine.h @@ -42,7 +42,7 @@ CGLM_INLINE void -glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest); +glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest); /*! * @brief translate existing transform matrix by v vector @@ -53,7 +53,7 @@ glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest); */ CGLM_INLINE void -glm_translate(mat4 m, const vec3 v) { +glm_translate(mat4 m, vec3 v) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(m[3], _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_load(m[0]), @@ -89,7 +89,7 @@ glm_translate(mat4 m, const vec3 v) { */ CGLM_INLINE void -glm_translate_to(const mat4 m, const vec3 v, mat4 dest) { +glm_translate_to(mat4 m, vec3 v, mat4 dest) { glm_mat4_copy(m, dest); glm_translate(dest, v); } @@ -168,7 +168,7 @@ glm_translate_z(mat4 m, float z) { */ CGLM_INLINE void -glm_translate_make(mat4 m, const vec3 v) { +glm_translate_make(mat4 m, vec3 v) { glm_mat4_identity(m); glm_vec3_copy(v, m[3]); } @@ -183,7 +183,7 @@ glm_translate_make(mat4 m, const vec3 v) { */ CGLM_INLINE void -glm_scale_to(const mat4 m, const vec3 v, mat4 dest) { +glm_scale_to(mat4 m, vec3 v, mat4 dest) { glm_vec4_scale(m[0], v[0], dest[0]); glm_vec4_scale(m[1], v[1], dest[1]); glm_vec4_scale(m[2], v[2], dest[2]); @@ -199,7 +199,7 @@ glm_scale_to(const mat4 m, const vec3 v, mat4 dest) { */ CGLM_INLINE void -glm_scale_make(mat4 m, const vec3 v) { +glm_scale_make(mat4 m, vec3 v) { glm_mat4_identity(m); m[0][0] = v[0]; m[1][1] = v[1]; @@ -215,7 +215,7 @@ glm_scale_make(mat4 m, const vec3 v) { */ CGLM_INLINE void -glm_scale(mat4 m, const vec3 v) { +glm_scale(mat4 m, vec3 v) { glm_scale_to(m, v, m); } @@ -243,7 +243,7 @@ glm_scale_uni(mat4 m, float s) { */ CGLM_INLINE void -glm_rotate_x(const mat4 m, float angle, mat4 dest) { +glm_rotate_x(mat4 m, float angle, mat4 dest) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -268,7 +268,7 @@ glm_rotate_x(const mat4 m, float angle, mat4 dest) { */ CGLM_INLINE void -glm_rotate_y(const mat4 m, float angle, mat4 dest) { +glm_rotate_y(mat4 m, float angle, mat4 dest) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -293,7 +293,7 @@ glm_rotate_y(const mat4 m, float angle, mat4 dest) { */ CGLM_INLINE void -glm_rotate_z(const mat4 m, float angle, mat4 dest) { +glm_rotate_z(mat4 m, float angle, mat4 dest) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; float c, s; @@ -319,7 +319,7 @@ glm_rotate_z(const mat4 m, float angle, mat4 dest) { */ CGLM_INLINE void -glm_rotate_make(mat4 m, float angle, const vec3 axis) { +glm_rotate_make(mat4 m, float angle, vec3 axis) { CGLM_ALIGN(8) vec3 axisn, v, vs; float c; @@ -350,7 +350,7 @@ glm_rotate_make(mat4 m, float angle, const vec3 axis) { */ CGLM_INLINE void -glm_rotate(mat4 m, float angle, const vec3 axis) { +glm_rotate(mat4 m, float angle, vec3 axis) { CGLM_ALIGN_MAT mat4 rot; glm_rotate_make(rot, angle, axis); glm_mul_rot(m, rot, m); @@ -367,7 +367,7 @@ glm_rotate(mat4 m, float angle, const vec3 axis) { */ CGLM_INLINE void -glm_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) { +glm_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -392,7 +392,7 @@ glm_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) { */ CGLM_INLINE void -glm_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) { +glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -410,7 +410,7 @@ glm_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) { */ CGLM_INLINE void -glm_decompose_scalev(const mat4 m, vec3 s) { +glm_decompose_scalev(mat4 m, vec3 s) { s[0] = glm_vec3_norm(m[0]); s[1] = glm_vec3_norm(m[1]); s[2] = glm_vec3_norm(m[2]); @@ -426,7 +426,7 @@ glm_decompose_scalev(const mat4 m, vec3 s) { */ CGLM_INLINE bool -glm_uniscaled(const mat4 m) { +glm_uniscaled(mat4 m) { CGLM_ALIGN(8) vec3 s; glm_decompose_scalev(m, s); return glm_vec3_eq_all(s); @@ -442,7 +442,7 @@ glm_uniscaled(const mat4 m) { */ CGLM_INLINE void -glm_decompose_rs(const mat4 m, mat4 r, vec3 s) { +glm_decompose_rs(mat4 m, mat4 r, vec3 s) { CGLM_ALIGN(16) vec4 t = {0.0f, 0.0f, 0.0f, 1.0f}; CGLM_ALIGN(8) vec3 v; @@ -482,7 +482,7 @@ glm_decompose_rs(const mat4 m, mat4 r, vec3 s) { */ CGLM_INLINE void -glm_decompose(const mat4 m, vec4 t, mat4 r, vec3 s) { +glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s) { glm_vec4_copy(m[3], t); glm_decompose_rs(m, r, s); } diff --git a/include/cglm/box.h b/include/cglm/box.h index c218602..2250c2a 100644 --- a/include/cglm/box.h +++ b/include/cglm/box.h @@ -22,7 +22,7 @@ */ CGLM_INLINE void -glm_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) { +glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { vec3 v[2], xa, xb, ya, yb, za, zb; glm_vec3_scale(m[0], box[0][0], xa); @@ -62,7 +62,7 @@ glm_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) { */ CGLM_INLINE void -glm_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) { +glm_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { dest[0][0] = glm_min(box1[0][0], box2[0][0]); dest[0][1] = glm_min(box1[0][1], box2[0][1]); dest[0][2] = glm_min(box1[0][2], box2[0][2]); @@ -85,7 +85,7 @@ glm_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) { */ CGLM_INLINE void -glm_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) { +glm_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { dest[0][0] = glm_max(box[0][0], cropBox[0][0]); dest[0][1] = glm_max(box[0][1], cropBox[0][1]); dest[0][2] = glm_max(box[0][2], cropBox[0][2]); @@ -109,10 +109,10 @@ glm_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) { */ CGLM_INLINE void -glm_aabb_crop_until(const vec3 box[2], - const vec3 cropBox[2], - const vec3 clampBox[2], - vec3 dest[2]) { +glm_aabb_crop_until(vec3 box[2], + vec3 cropBox[2], + vec3 clampBox[2], + vec3 dest[2]) { glm_aabb_crop(box, cropBox, dest); glm_aabb_merge(clampBox, dest, dest); } @@ -133,10 +133,9 @@ glm_aabb_crop_until(const vec3 box[2], */ CGLM_INLINE bool -glm_aabb_frustum(const vec3 box[2], const vec4 planes[6]) { - const float *p; - float dp; - int i; +glm_aabb_frustum(vec3 box[2], vec4 planes[6]) { + float *p, dp; + int i; for (i = 0; i < 6; i++) { p = planes[i]; @@ -170,7 +169,7 @@ glm_aabb_invalidate(vec3 box[2]) { */ CGLM_INLINE bool -glm_aabb_isvalid(const vec3 box[2]) { +glm_aabb_isvalid(vec3 box[2]) { return glm_vec3_max(box[0]) != FLT_MAX && glm_vec3_min(box[1]) != -FLT_MAX; } @@ -182,7 +181,7 @@ glm_aabb_isvalid(const vec3 box[2]) { */ CGLM_INLINE float -glm_aabb_size(const vec3 box[2]) { +glm_aabb_size(vec3 box[2]) { return glm_vec3_distance(box[0], box[1]); } @@ -193,7 +192,7 @@ glm_aabb_size(const vec3 box[2]) { */ CGLM_INLINE float -glm_aabb_radius(const vec3 box[2]) { +glm_aabb_radius(vec3 box[2]) { return glm_aabb_size(box) * 0.5f; } @@ -205,7 +204,7 @@ glm_aabb_radius(const vec3 box[2]) { */ CGLM_INLINE void -glm_aabb_center(const vec3 box[2], vec3 dest) { +glm_aabb_center(vec3 box[2], vec3 dest) { glm_vec3_center(box[0], box[1], dest); } @@ -217,7 +216,7 @@ glm_aabb_center(const vec3 box[2], vec3 dest) { */ CGLM_INLINE bool -glm_aabb_aabb(const vec3 box[2], const vec3 other[2]) { +glm_aabb_aabb(vec3 box[2], vec3 other[2]) { return (box[0][0] <= other[1][0] && box[1][0] >= other[0][0]) && (box[0][1] <= other[1][1] && box[1][1] >= other[0][1]) && (box[0][2] <= other[1][2] && box[1][2] >= other[0][2]); @@ -234,7 +233,7 @@ glm_aabb_aabb(const vec3 box[2], const vec3 other[2]) { */ CGLM_INLINE bool -glm_aabb_sphere(const vec3 box[2], const vec4 s) { +glm_aabb_sphere(vec3 box[2], vec4 s) { float dmin; int a, b, c; @@ -257,7 +256,7 @@ glm_aabb_sphere(const vec3 box[2], const vec4 s) { */ CGLM_INLINE bool -glm_aabb_point(const vec3 box[2], const vec3 point) { +glm_aabb_point(vec3 box[2], vec3 point) { return (point[0] >= box[0][0] && point[0] <= box[1][0]) && (point[1] >= box[0][1] && point[1] <= box[1][1]) && (point[2] >= box[0][2] && point[2] <= box[1][2]); @@ -271,7 +270,7 @@ glm_aabb_point(const vec3 box[2], const vec3 point) { */ CGLM_INLINE bool -glm_aabb_contains(const vec3 box[2], const vec3 other[2]) { +glm_aabb_contains(vec3 box[2], vec3 other[2]) { return (box[0][0] <= other[0][0] && box[1][0] >= other[1][0]) && (box[0][1] <= other[0][1] && box[1][1] >= other[1][1]) && (box[0][2] <= other[0][2] && box[1][2] >= other[1][2]); diff --git a/include/cglm/call/affine.h b/include/cglm/call/affine.h index ec50bc4..c11405b 100644 --- a/include/cglm/call/affine.h +++ b/include/cglm/call/affine.h @@ -15,15 +15,15 @@ extern "C" { CGLM_EXPORT void -glmc_translate_make(mat4 m, const vec3 v); +glmc_translate_make(mat4 m, vec3 v); CGLM_EXPORT void -glmc_translate_to(const mat4 m, const vec3 v, mat4 dest); +glmc_translate_to(mat4 m, vec3 v, mat4 dest); CGLM_EXPORT void -glmc_translate(mat4 m, const vec3 v); +glmc_translate(mat4 m, vec3 v); CGLM_EXPORT void @@ -39,15 +39,15 @@ glmc_translate_z(mat4 m, float to); CGLM_EXPORT void -glmc_scale_make(mat4 m, const vec3 v); +glmc_scale_make(mat4 m, vec3 v); CGLM_EXPORT void -glmc_scale_to(const mat4 m, const vec3 v, mat4 dest); +glmc_scale_to(mat4 m, vec3 v, mat4 dest); CGLM_EXPORT void -glmc_scale(mat4 m, const vec3 v); +glmc_scale(mat4 m, vec3 v); CGLM_EXPORT void @@ -55,57 +55,57 @@ glmc_scale_uni(mat4 m, float s); CGLM_EXPORT void -glmc_rotate_x(const mat4 m, float rad, mat4 dest); +glmc_rotate_x(mat4 m, float rad, mat4 dest); CGLM_EXPORT void -glmc_rotate_y(const mat4 m, float rad, mat4 dest); +glmc_rotate_y(mat4 m, float rad, mat4 dest); CGLM_EXPORT void -glmc_rotate_z(const mat4 m, float rad, mat4 dest); +glmc_rotate_z(mat4 m, float rad, mat4 dest); CGLM_EXPORT void -glmc_rotate_make(mat4 m, float angle, const vec3 axis); +glmc_rotate_make(mat4 m, float angle, vec3 axis); CGLM_EXPORT void -glmc_rotate(mat4 m, float angle, const vec3 axis); +glmc_rotate(mat4 m, float angle, vec3 axis); CGLM_EXPORT void -glmc_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis); +glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis); CGLM_EXPORT void -glmc_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis); +glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis); CGLM_EXPORT void -glmc_decompose_scalev(const mat4 m, vec3 s); +glmc_decompose_scalev(mat4 m, vec3 s); CGLM_EXPORT bool -glmc_uniscaled(const mat4 m); +glmc_uniscaled(mat4 m); CGLM_EXPORT void -glmc_decompose_rs(const mat4 m, mat4 r, vec3 s); +glmc_decompose_rs(mat4 m, mat4 r, vec3 s); CGLM_EXPORT void -glmc_decompose(const mat4 m, vec4 t, mat4 r, vec3 s); +glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s); /* affine-mat */ CGLM_EXPORT void -glmc_mul(const mat4 m1, const mat4 m2, mat4 dest); +glmc_mul(mat4 m1, mat4 m2, mat4 dest); CGLM_EXPORT void -glmc_mul_rot(const mat4 m1, const mat4 m2, mat4 dest); +glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest); CGLM_EXPORT void diff --git a/include/cglm/call/box.h b/include/cglm/call/box.h index fe4ab90..afb7558 100644 --- a/include/cglm/call/box.h +++ b/include/cglm/call/box.h @@ -15,26 +15,26 @@ extern "C" { CGLM_EXPORT void -glmc_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]); +glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]); CGLM_EXPORT void -glmc_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]); +glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]); CGLM_EXPORT void -glmc_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]); +glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]); CGLM_EXPORT void -glmc_aabb_crop_until(const vec3 box[2], - const vec3 cropBox[2], - const vec3 clampBox[2], - vec3 dest[2]); +glmc_aabb_crop_until(vec3 box[2], + vec3 cropBox[2], + vec3 clampBox[2], + vec3 dest[2]); CGLM_EXPORT bool -glmc_aabb_frustum(const vec3 box[2], vec4 planes[6]); +glmc_aabb_frustum(vec3 box[2], vec4 planes[6]); CGLM_EXPORT void @@ -42,35 +42,35 @@ glmc_aabb_invalidate(vec3 box[2]); CGLM_EXPORT bool -glmc_aabb_isvalid(const vec3 box[2]); +glmc_aabb_isvalid(vec3 box[2]); CGLM_EXPORT float -glmc_aabb_size(const vec3 box[2]); +glmc_aabb_size(vec3 box[2]); CGLM_EXPORT float -glmc_aabb_radius(const vec3 box[2]); +glmc_aabb_radius(vec3 box[2]); CGLM_EXPORT void -glmc_aabb_center(const vec3 box[2], vec3 dest); +glmc_aabb_center(vec3 box[2], vec3 dest); CGLM_EXPORT bool -glmc_aabb_aabb(const vec3 box[2], const vec3 other[2]); +glmc_aabb_aabb(vec3 box[2], vec3 other[2]); CGLM_EXPORT bool -glmc_aabb_point(const vec3 box[2], const vec3 point); +glmc_aabb_point(vec3 box[2], vec3 point); CGLM_EXPORT bool -glmc_aabb_contains(const vec3 box[2], const vec3 other[2]); +glmc_aabb_contains(vec3 box[2], vec3 other[2]); CGLM_EXPORT bool -glmc_aabb_sphere(const vec3 box[2], const vec4 s); +glmc_aabb_sphere(vec3 box[2], vec4 s); #ifdef __cplusplus } diff --git a/include/cglm/call/cam.h b/include/cglm/call/cam.h index 9b42b74..017b6fc 100644 --- a/include/cglm/call/cam.h +++ b/include/cglm/call/cam.h @@ -21,7 +21,7 @@ glmc_frustum(float left, float top, float nearVal, float farVal, - mat4 dest); + mat4 dest); CGLM_EXPORT void @@ -31,19 +31,19 @@ glmc_ortho(float left, float top, float nearVal, float farVal, - mat4 dest); + mat4 dest); CGLM_EXPORT void -glmc_ortho_aabb(const vec3 box[2], mat4 dest); +glmc_ortho_aabb(vec3 box[2], mat4 dest); CGLM_EXPORT void -glmc_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest); +glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest); CGLM_EXPORT void -glmc_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest); +glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest); CGLM_EXPORT void @@ -59,7 +59,7 @@ glmc_perspective(float fovy, float aspect, float nearVal, float farVal, - mat4 dest); + mat4 dest); CGLM_EXPORT void @@ -75,19 +75,19 @@ glmc_perspective_resize(float aspect, mat4 proj); CGLM_EXPORT void -glmc_lookat(const vec3 eye, const vec3 center, const vec3 up, mat4 dest); +glmc_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest); CGLM_EXPORT void -glmc_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest); +glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest); CGLM_EXPORT void -glmc_look_anyup(const vec3 eye, const vec3 dir, mat4 dest); +glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest); CGLM_EXPORT void -glmc_persp_decomp(const mat4 proj, +glmc_persp_decomp(mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, @@ -97,45 +97,45 @@ glmc_persp_decomp(const mat4 proj, CGLM_EXPORT void -glmc_persp_decompv(const mat4 proj, float dest[6]); +glmc_persp_decompv(mat4 proj, float dest[6]); CGLM_EXPORT void -glmc_persp_decomp_x(const mat4 proj, +glmc_persp_decomp_x(mat4 proj, float * __restrict left, float * __restrict right); CGLM_EXPORT void -glmc_persp_decomp_y(const mat4 proj, +glmc_persp_decomp_y(mat4 proj, float * __restrict top, float * __restrict bottom); CGLM_EXPORT void -glmc_persp_decomp_z(const mat4 proj, +glmc_persp_decomp_z(mat4 proj, float * __restrict nearVal, float * __restrict farVal); CGLM_EXPORT void -glmc_persp_decomp_far(const mat4 proj, float * __restrict farVal); +glmc_persp_decomp_far(mat4 proj, float * __restrict farVal); CGLM_EXPORT void -glmc_persp_decomp_near(const mat4 proj, float * __restrict nearVal); +glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal); CGLM_EXPORT float -glmc_persp_fovy(const mat4 proj); +glmc_persp_fovy(mat4 proj); CGLM_EXPORT float -glmc_persp_aspect(const mat4 proj); +glmc_persp_aspect(mat4 proj); CGLM_EXPORT void -glmc_persp_sizes(const mat4 proj, float fovy, vec4 dest); +glmc_persp_sizes(mat4 proj, float fovy, vec4 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/curve.h b/include/cglm/call/curve.h index 07610f3..061fdb9 100644 --- a/include/cglm/call/curve.h +++ b/include/cglm/call/curve.h @@ -15,7 +15,7 @@ extern "C" { CGLM_EXPORT float -glmc_smc(float s, const mat4 m, const vec4 c); +glmc_smc(float s, mat4 m, vec4 c); #ifdef __cplusplus } diff --git a/include/cglm/call/euler.h b/include/cglm/call/euler.h index 71746bf..9b85485 100644 --- a/include/cglm/call/euler.h +++ b/include/cglm/call/euler.h @@ -15,39 +15,39 @@ extern "C" { CGLM_EXPORT void -glmc_euler_angles(const mat4 m, vec3 dest); +glmc_euler_angles(mat4 m, vec3 dest); CGLM_EXPORT void -glmc_euler(const vec3 angles, mat4 dest); +glmc_euler(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_xyz(const vec3 angles, mat4 dest); +glmc_euler_xyz(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_zyx(const vec3 angles, mat4 dest); +glmc_euler_zyx(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_zxy(const vec3 angles, mat4 dest); +glmc_euler_zxy(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_xzy(const vec3 angles, mat4 dest); +glmc_euler_xzy(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_yzx(const vec3 angles, mat4 dest); +glmc_euler_yzx(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_yxz(const vec3 angles, mat4 dest); +glmc_euler_yxz(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_by_order(const vec3 angles, glm_euler_sq axis, mat4 dest); +glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/frustum.h b/include/cglm/call/frustum.h index be97fc3..6b4facb 100644 --- a/include/cglm/call/frustum.h +++ b/include/cglm/call/frustum.h @@ -15,26 +15,26 @@ extern "C" { CGLM_EXPORT void -glmc_frustum_planes(const mat4 m, vec4 dest[6]); +glmc_frustum_planes(mat4 m, vec4 dest[6]); CGLM_EXPORT void -glmc_frustum_corners(const mat4 invMat, vec4 dest[8]); +glmc_frustum_corners(mat4 invMat, vec4 dest[8]); CGLM_EXPORT void -glmc_frustum_center(const vec4 corners[8], vec4 dest); +glmc_frustum_center(vec4 corners[8], vec4 dest); CGLM_EXPORT void -glmc_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]); +glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]); CGLM_EXPORT void -glmc_frustum_corners_at(const vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]); +glmc_frustum_corners_at(vec4 corners[8], + float splitDist, + float farDist, + vec4 planeCorners[4]); #ifdef __cplusplus } #endif diff --git a/include/cglm/call/io.h b/include/cglm/call/io.h index 421e719..b6c50f6 100644 --- a/include/cglm/call/io.h +++ b/include/cglm/call/io.h @@ -15,28 +15,28 @@ extern "C" { CGLM_EXPORT void -glmc_mat4_print(const mat4 matrix, - FILE * const __restrict ostream); +glmc_mat4_print(mat4 matrix, + FILE * __restrict ostream); CGLM_EXPORT void -glmc_mat3_print(const mat3 matrix, - FILE * const __restrict ostream); +glmc_mat3_print(mat3 matrix, + FILE * __restrict ostream); CGLM_EXPORT void -glmc_vec4_print(const vec4 vec, - FILE * const __restrict ostream); +glmc_vec4_print(vec4 vec, + FILE * __restrict ostream); CGLM_EXPORT void -glmc_vec3_print(const vec3 vec, - FILE * const __restrict ostream); +glmc_vec3_print(vec3 vec, + FILE * __restrict ostream); CGLM_EXPORT void -glmc_versor_print(const versor vec, - FILE * const __restrict ostream); +glmc_versor_print(versor vec, + FILE * __restrict ostream); #ifdef __cplusplus } diff --git a/include/cglm/call/mat3.h b/include/cglm/call/mat3.h index 68d5535..fbd8270 100644 --- a/include/cglm/call/mat3.h +++ b/include/cglm/call/mat3.h @@ -18,7 +18,7 @@ extern "C" { CGLM_EXPORT void -glmc_mat3_copy(const mat3 mat, mat3 dest); +glmc_mat3_copy(mat3 mat, mat3 dest); CGLM_EXPORT void @@ -26,15 +26,15 @@ glmc_mat3_identity(mat3 mat); CGLM_EXPORT void -glmc_mat3_identity_array(mat3 * const __restrict mat, size_t count); +glmc_mat3_identity_array(mat3 * __restrict mat, size_t count); CGLM_EXPORT void -glmc_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest); +glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest); CGLM_EXPORT void -glmc_mat3_transpose_to(const mat3 m, mat3 dest); +glmc_mat3_transpose_to(mat3 m, mat3 dest); CGLM_EXPORT void @@ -42,15 +42,15 @@ glmc_mat3_transpose(mat3 m); CGLM_EXPORT void -glmc_mat3_mulv(const mat3 m, const vec3 v, vec3 dest); +glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest); CGLM_EXPORT float -glmc_mat3_trace(const mat3 m); +glmc_mat3_trace(mat3 m); CGLM_EXPORT void -glmc_mat3_quat(const mat3 m, versor dest); +glmc_mat3_quat(mat3 m, versor dest); CGLM_EXPORT void @@ -58,11 +58,11 @@ glmc_mat3_scale(mat3 m, float s); CGLM_EXPORT float -glmc_mat3_det(const mat3 mat); +glmc_mat3_det(mat3 mat); CGLM_EXPORT void -glmc_mat3_inv(const mat3 mat, mat3 dest); +glmc_mat3_inv(mat3 mat, mat3 dest); CGLM_EXPORT void @@ -74,7 +74,7 @@ glmc_mat3_swap_row(mat3 mat, int row1, int row2); CGLM_EXPORT float -glmc_mat3_rmc(const vec3 r, const mat3 m, const vec3 c); +glmc_mat3_rmc(vec3 r, mat3 m, vec3 c); #ifdef __cplusplus } diff --git a/include/cglm/call/mat4.h b/include/cglm/call/mat4.h index 43e4cec..54fbcbe 100644 --- a/include/cglm/call/mat4.h +++ b/include/cglm/call/mat4.h @@ -19,11 +19,11 @@ extern "C" { CGLM_EXPORT void -glmc_mat4_ucopy(const mat4 mat, mat4 dest); +glmc_mat4_ucopy(mat4 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_copy(const mat4 mat, mat4 dest); +glmc_mat4_copy(mat4 mat, mat4 dest); CGLM_EXPORT void @@ -31,51 +31,51 @@ glmc_mat4_identity(mat4 mat); CGLM_EXPORT void -glmc_mat4_identity_array(mat4 * const __restrict mat, size_t count); +glmc_mat4_identity_array(mat4 * __restrict mat, size_t count); CGLM_EXPORT void -glmc_mat4_pick3(const mat4 mat, mat3 dest); +glmc_mat4_pick3(mat4 mat, mat3 dest); CGLM_EXPORT void -glmc_mat4_pick3t(const mat4 mat, mat3 dest); +glmc_mat4_pick3t(mat4 mat, mat3 dest); CGLM_EXPORT void -glmc_mat4_ins3(const mat3 mat, mat4 dest); +glmc_mat4_ins3(mat3 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest); +glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest); CGLM_EXPORT void -glmc_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest); +glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest); CGLM_EXPORT void -glmc_mat4_mulv(const mat4 m, const vec4 v, vec4 dest); +glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest); CGLM_EXPORT void -glmc_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest); +glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest); CGLM_EXPORT float -glmc_mat4_trace(const mat4 m); +glmc_mat4_trace(mat4 m); CGLM_EXPORT float -glmc_mat4_trace3(const mat4 m); +glmc_mat4_trace3(mat4 m); CGLM_EXPORT void -glmc_mat4_quat(const mat4 m, versor dest); +glmc_mat4_quat(mat4 m, versor dest); CGLM_EXPORT void -glmc_mat4_transpose_to(const mat4 m, mat4 dest); +glmc_mat4_transpose_to(mat4 m, mat4 dest); CGLM_EXPORT void @@ -91,19 +91,19 @@ glmc_mat4_scale(mat4 m, float s); CGLM_EXPORT float -glmc_mat4_det(const mat4 mat); +glmc_mat4_det(mat4 mat); CGLM_EXPORT void -glmc_mat4_inv(const mat4 mat, mat4 dest); +glmc_mat4_inv(mat4 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_inv_precise(const mat4 mat, mat4 dest); +glmc_mat4_inv_precise(mat4 mat, mat4 dest); CGLM_EXPORT void -glmc_mat4_inv_fast(const mat4 mat, mat4 dest); +glmc_mat4_inv_fast(mat4 mat, mat4 dest); CGLM_EXPORT void @@ -115,7 +115,7 @@ glmc_mat4_swap_row(mat4 mat, int row1, int row2); CGLM_EXPORT float -glmc_mat4_rmc(const vec4 r, const mat4 m, const vec4 c); +glmc_mat4_rmc(vec4 r, mat4 m, vec4 c); #ifdef __cplusplus } diff --git a/include/cglm/call/project.h b/include/cglm/call/project.h index 92c25e1..35ac087 100644 --- a/include/cglm/call/project.h +++ b/include/cglm/call/project.h @@ -15,15 +15,15 @@ extern "C" { CGLM_EXPORT void -glmc_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest); +glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest); CGLM_EXPORT void -glmc_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest); +glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest); CGLM_EXPORT void -glmc_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest); +glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/quat.h b/include/cglm/call/quat.h index 03d8381..2778a58 100644 --- a/include/cglm/call/quat.h +++ b/include/cglm/call/quat.h @@ -19,7 +19,7 @@ glmc_quat_identity(versor q); CGLM_EXPORT void -glmc_quat_identity_array(versor * const __restrict q, size_t count); +glmc_quat_identity_array(versor * __restrict q, size_t count); CGLM_EXPORT void @@ -31,19 +31,19 @@ glmc_quat(versor q, float angle, float x, float y, float z); CGLM_EXPORT void -glmc_quatv(versor q, float angle, const vec3 axis); +glmc_quatv(versor q, float angle, vec3 axis); CGLM_EXPORT void -glmc_quat_copy(const versor q, versor dest); +glmc_quat_copy(versor q, versor dest); CGLM_EXPORT float -glmc_quat_norm(const versor q); +glmc_quat_norm(versor q); CGLM_EXPORT void -glmc_quat_normalize_to(const versor q, versor dest); +glmc_quat_normalize_to(versor q, versor dest); CGLM_EXPORT void @@ -51,107 +51,103 @@ glmc_quat_normalize(versor q); CGLM_EXPORT float -glmc_quat_dot(const versor p, const versor q); +glmc_quat_dot(versor p, versor q); CGLM_EXPORT void -glmc_quat_conjugate(const versor q, versor dest); +glmc_quat_conjugate(versor q, versor dest); CGLM_EXPORT void -glmc_quat_inv(const versor q, versor dest); +glmc_quat_inv(versor q, versor dest); CGLM_EXPORT void -glmc_quat_add(const versor p, const versor q, versor dest); +glmc_quat_add(versor p, versor q, versor dest); CGLM_EXPORT void -glmc_quat_sub(const versor p, const versor q, versor dest); +glmc_quat_sub(versor p, versor q, versor dest); CGLM_EXPORT float -glmc_quat_real(const versor q); +glmc_quat_real(versor q); CGLM_EXPORT void -glmc_quat_imag(const versor q, vec3 dest); +glmc_quat_imag(versor q, vec3 dest); CGLM_EXPORT void -glmc_quat_imagn(const versor q, vec3 dest); +glmc_quat_imagn(versor q, vec3 dest); CGLM_EXPORT float -glmc_quat_imaglen(const versor q); +glmc_quat_imaglen(versor q); CGLM_EXPORT float -glmc_quat_angle(const versor q); +glmc_quat_angle(versor q); CGLM_EXPORT void -glmc_quat_axis(const versor q, versor dest); +glmc_quat_axis(versor q, versor dest); CGLM_EXPORT void -glmc_quat_mul(const versor p, const versor q, versor dest); +glmc_quat_mul(versor p, versor q, versor dest); CGLM_EXPORT void -glmc_quat_mat4(const versor q, mat4 dest); +glmc_quat_mat4(versor q, mat4 dest); CGLM_EXPORT void -glmc_quat_mat4t(const versor q, mat4 dest); +glmc_quat_mat4t(versor q, mat4 dest); CGLM_EXPORT void -glmc_quat_mat3(const versor q, mat3 dest); +glmc_quat_mat3(versor q, mat3 dest); CGLM_EXPORT void -glmc_quat_mat3t(const versor q, mat3 dest); +glmc_quat_mat3t(versor q, mat3 dest); CGLM_EXPORT void -glmc_quat_lerp(const versor from, const versor to, float t, versor dest); +glmc_quat_lerp(versor from, versor to, float t, versor dest); CGLM_EXPORT void -glmc_quat_slerp(const versor q, const versor r, float t, versor dest); +glmc_quat_slerp(versor q, versor r, float t, versor dest); CGLM_EXPORT void -glmc_quat_look(const vec3 eye, const versor ori, mat4 dest); +glmc_quat_look(vec3 eye, versor ori, mat4 dest); CGLM_EXPORT void -glmc_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest); +glmc_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest); CGLM_EXPORT void -glmc_quat_forp(const vec3 from, - const vec3 to, - const vec3 fwd, - const vec3 up, - versor dest); +glmc_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest); CGLM_EXPORT void -glmc_quat_rotatev(const versor from, const vec3 to, vec3 dest); +glmc_quat_rotatev(versor from, vec3 to, vec3 dest); CGLM_EXPORT void -glmc_quat_rotate(const mat4 m, const versor q, mat4 dest); +glmc_quat_rotate(mat4 m, versor q, mat4 dest); CGLM_EXPORT void -glmc_quat_rotate_at(mat4 model, const versor q, const vec3 pivot); +glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot); CGLM_EXPORT void -glmc_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot); +glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot); #ifdef __cplusplus } diff --git a/include/cglm/call/sphere.h b/include/cglm/call/sphere.h index 7b4d0d7..9b96546 100644 --- a/include/cglm/call/sphere.h +++ b/include/cglm/call/sphere.h @@ -15,23 +15,23 @@ extern "C" { CGLM_EXPORT float -glmc_sphere_radii(const vec4 s); +glmc_sphere_radii(vec4 s); CGLM_EXPORT void -glmc_sphere_transform(const vec4 s, const mat4 m, vec4 dest); +glmc_sphere_transform(vec4 s, mat4 m, vec4 dest); CGLM_EXPORT void -glmc_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest); +glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest); CGLM_EXPORT bool -glmc_sphere_sphere(const vec4 s1, const vec4 s2); +glmc_sphere_sphere(vec4 s1, vec4 s2); CGLM_EXPORT bool -glmc_sphere_point(const vec4 s, const vec3 point); +glmc_sphere_point(vec4 s, vec3 point); #ifdef __cplusplus } diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h index cc7c78e..9763403 100644 --- a/include/cglm/call/vec3.h +++ b/include/cglm/call/vec3.h @@ -22,11 +22,11 @@ extern "C" { CGLM_EXPORT void -glmc_vec3(const vec4 v4, vec3 dest); +glmc_vec3(vec4 v4, vec3 dest); CGLM_EXPORT void -glmc_vec3_copy(const vec3 a, vec3 dest); +glmc_vec3_copy(vec3 a, vec3 dest); CGLM_EXPORT void @@ -38,27 +38,27 @@ glmc_vec3_one(vec3 v); CGLM_EXPORT float -glmc_vec3_dot(const vec3 a, const vec3 b); +glmc_vec3_dot(vec3 a, vec3 b); CGLM_EXPORT void -glmc_vec3_cross(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_cross(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_crossn(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT float -glmc_vec3_norm(const vec3 v); +glmc_vec3_norm(vec3 v); CGLM_EXPORT float -glmc_vec3_norm2(const vec3 v); +glmc_vec3_norm2(vec3 v); CGLM_EXPORT void -glmc_vec3_normalize_to(const vec3 v, vec3 dest); +glmc_vec3_normalize_to(vec3 v, vec3 dest); CGLM_EXPORT void @@ -66,63 +66,63 @@ glmc_vec3_normalize(vec3 v); CGLM_EXPORT void -glmc_vec3_add(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_add(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_adds(const vec3 v, float s, vec3 dest); +glmc_vec3_adds(vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_sub(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_sub(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_subs(const vec3 v, float s, vec3 dest); +glmc_vec3_subs(vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_mul(const vec3 a, const vec3 b, vec3 d); +glmc_vec3_mul(vec3 a, vec3 b, vec3 d); CGLM_EXPORT void -glmc_vec3_scale(const vec3 v, float s, vec3 dest); +glmc_vec3_scale(vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_scale_as(const vec3 v, float s, vec3 dest); +glmc_vec3_scale_as(vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_div(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_div(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_divs(const vec3 a, float s, vec3 dest); +glmc_vec3_divs(vec3 a, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_addadd(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_subadd(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_muladd(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_muladds(const vec3 a, float s, vec3 dest); +glmc_vec3_muladds(vec3 a, float s, vec3 dest); CGLM_EXPORT void -glmc_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_minadd(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void @@ -130,47 +130,47 @@ glmc_vec3_negate(vec3 v); CGLM_EXPORT void -glmc_vec3_negate_to(const vec3 v, vec3 dest); +glmc_vec3_negate_to(vec3 v, vec3 dest); CGLM_EXPORT float -glmc_vec3_angle(const vec3 a, const vec3 b); +glmc_vec3_angle(vec3 a, vec3 b); CGLM_EXPORT void -glmc_vec3_rotate(vec3 v, float angle, const vec3 axis); +glmc_vec3_rotate(vec3 v, float angle, vec3 axis); CGLM_EXPORT void -glmc_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest); +glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest); +glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_proj(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_proj(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_center(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_center(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT float -glmc_vec3_distance2(const vec3 a, const vec3 b); +glmc_vec3_distance2(vec3 a, vec3 b); CGLM_EXPORT float -glmc_vec3_distance(const vec3 a, const vec3 b); +glmc_vec3_distance(vec3 a, vec3 b); CGLM_EXPORT void -glmc_vec3_maxv(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void -glmc_vec3_minv(const vec3 a, const vec3 b, vec3 dest); +glmc_vec3_minv(vec3 a, vec3 b, vec3 dest); CGLM_EXPORT void @@ -178,17 +178,17 @@ glmc_vec3_clamp(vec3 v, float minVal, float maxVal); CGLM_EXPORT void -glmc_vec3_ortho(const vec3 v, vec3 dest); +glmc_vec3_ortho(vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest); +glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest); /* ext */ CGLM_EXPORT void -glmc_vec3_mulv(const vec3 a, const vec3 b, vec3 d); +glmc_vec3_mulv(vec3 a, vec3 b, vec3 d); CGLM_EXPORT void @@ -196,51 +196,51 @@ glmc_vec3_broadcast(float val, vec3 d); CGLM_EXPORT bool -glmc_vec3_eq(const vec3 v, float val); +glmc_vec3_eq(vec3 v, float val); CGLM_EXPORT bool -glmc_vec3_eq_eps(const vec3 v, float val); +glmc_vec3_eq_eps(vec3 v, float val); CGLM_EXPORT bool -glmc_vec3_eq_all(const vec3 v); +glmc_vec3_eq_all(vec3 v); CGLM_EXPORT bool -glmc_vec3_eqv(const vec3 a, const vec3 b); +glmc_vec3_eqv(vec3 a, vec3 b); CGLM_EXPORT bool -glmc_vec3_eqv_eps(const vec3 a, const vec3 b); +glmc_vec3_eqv_eps(vec3 a, vec3 b); CGLM_EXPORT float -glmc_vec3_max(const vec3 v); +glmc_vec3_max(vec3 v); CGLM_EXPORT float -glmc_vec3_min(const vec3 v); +glmc_vec3_min(vec3 v); CGLM_EXPORT bool -glmc_vec3_isnan(const vec3 v); +glmc_vec3_isnan(vec3 v); CGLM_EXPORT bool -glmc_vec3_isinf(const vec3 v); +glmc_vec3_isinf(vec3 v); CGLM_EXPORT bool -glmc_vec3_isvalid(const vec3 v); +glmc_vec3_isvalid(vec3 v); CGLM_EXPORT void -glmc_vec3_sign(const vec3 v, vec3 dest); +glmc_vec3_sign(vec3 v, vec3 dest); CGLM_EXPORT void -glmc_vec3_sqrt(const vec3 v, vec3 dest); +glmc_vec3_sqrt(vec3 v, vec3 dest); #ifdef __cplusplus } diff --git a/include/cglm/call/vec4.h b/include/cglm/call/vec4.h index c862ce6..936bb52 100644 --- a/include/cglm/call/vec4.h +++ b/include/cglm/call/vec4.h @@ -23,7 +23,7 @@ extern "C" { CGLM_EXPORT void -glmc_vec4(const vec3 v3, float last, vec4 dest); +glmc_vec4(vec3 v3, float last, vec4 dest); CGLM_EXPORT void @@ -35,31 +35,31 @@ glmc_vec4_one(vec4 v); CGLM_EXPORT void -glmc_vec4_copy3(const vec4 v, vec3 dest); +glmc_vec4_copy3(vec4 v, vec3 dest); CGLM_EXPORT void -glmc_vec4_copy(const vec4 v, vec4 dest); +glmc_vec4_copy(vec4 v, vec4 dest); CGLM_EXPORT void -glmc_vec4_ucopy(const vec4 v, vec4 dest); +glmc_vec4_ucopy(vec4 v, vec4 dest); CGLM_EXPORT float -glmc_vec4_dot(const vec4 a, const vec4 b); +glmc_vec4_dot(vec4 a, vec4 b); CGLM_EXPORT float -glmc_vec4_norm(const vec4 v); +glmc_vec4_norm(vec4 v); CGLM_EXPORT float -glmc_vec4_norm2(const vec4 v); +glmc_vec4_norm2(vec4 v); CGLM_EXPORT void -glmc_vec4_normalize_to(const vec4 v, vec4 dest); +glmc_vec4_normalize_to(vec4 v, vec4 dest); CGLM_EXPORT void @@ -67,63 +67,63 @@ glmc_vec4_normalize(vec4 v); CGLM_EXPORT void -glmc_vec4_add(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_add(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_adds(const vec4 v, float s, vec4 dest); +glmc_vec4_adds(vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_sub(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_sub(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_subs(const vec4 v, float s, vec4 dest); +glmc_vec4_subs(vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_mul(const vec4 a, const vec4 b, vec4 d); +glmc_vec4_mul(vec4 a, vec4 b, vec4 d); CGLM_EXPORT void -glmc_vec4_scale(const vec4 v, float s, vec4 dest); +glmc_vec4_scale(vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_scale_as(const vec3 v, float s, vec3 dest); +glmc_vec4_scale_as(vec3 v, float s, vec3 dest); CGLM_EXPORT void -glmc_vec4_div(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_div(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_divs(const vec4 v, float s, vec4 dest); +glmc_vec4_divs(vec4 v, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_addadd(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_subadd(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_muladd(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_muladds(const vec4 a, float s, vec4 dest); +glmc_vec4_muladds(vec4 a, float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_minadd(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void @@ -131,19 +131,19 @@ glmc_vec4_negate(vec4 v); CGLM_EXPORT void -glmc_vec4_negate_to(const vec4 v, vec4 dest); +glmc_vec4_negate_to(vec4 v, vec4 dest); CGLM_EXPORT float -glmc_vec4_distance(const vec4 a, const vec4 b); +glmc_vec4_distance(vec4 a, vec4 b); CGLM_EXPORT void -glmc_vec4_maxv(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void -glmc_vec4_minv(const vec4 a, const vec4 b, vec4 dest); +glmc_vec4_minv(vec4 a, vec4 b, vec4 dest); CGLM_EXPORT void @@ -151,7 +151,7 @@ glmc_vec4_clamp(vec4 v, float minVal, float maxVal); CGLM_EXPORT void -glmc_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest); +glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest); CGLM_EXPORT void @@ -161,7 +161,7 @@ glmc_vec4_cubic(float s, vec4 dest); CGLM_EXPORT void -glmc_vec4_mulv(const vec4 a, const vec4 b, vec4 d); +glmc_vec4_mulv(vec4 a, vec4 b, vec4 d); CGLM_EXPORT void @@ -169,51 +169,51 @@ glmc_vec4_broadcast(float val, vec4 d); CGLM_EXPORT bool -glmc_vec4_eq(const vec4 v, float val); +glmc_vec4_eq(vec4 v, float val); CGLM_EXPORT bool -glmc_vec4_eq_eps(const vec4 v, float val); +glmc_vec4_eq_eps(vec4 v, float val); CGLM_EXPORT bool -glmc_vec4_eq_all(const vec4 v); +glmc_vec4_eq_all(vec4 v); CGLM_EXPORT bool -glmc_vec4_eqv(const vec4 a, const vec4 b); +glmc_vec4_eqv(vec4 a, vec4 b); CGLM_EXPORT bool -glmc_vec4_eqv_eps(const vec4 a, const vec4 b); +glmc_vec4_eqv_eps(vec4 a, vec4 b); CGLM_EXPORT float -glmc_vec4_max(const vec4 v); +glmc_vec4_max(vec4 v); CGLM_EXPORT float -glmc_vec4_min(const vec4 v); +glmc_vec4_min(vec4 v); CGLM_EXPORT bool -glmc_vec4_isnan(const vec4 v); +glmc_vec4_isnan(vec4 v); CGLM_EXPORT bool -glmc_vec4_isinf(const vec4 v); +glmc_vec4_isinf(vec4 v); CGLM_EXPORT bool -glmc_vec4_isvalid(const vec4 v); +glmc_vec4_isvalid(vec4 v); CGLM_EXPORT void -glmc_vec4_sign(const vec4 v, vec4 dest); +glmc_vec4_sign(vec4 v, vec4 dest); CGLM_EXPORT void -glmc_vec4_sqrt(const vec4 v, vec4 dest); +glmc_vec4_sqrt(vec4 v, vec4 dest); #ifdef __cplusplus } diff --git a/include/cglm/cam.h b/include/cglm/cam.h index 2255cf6..e77b989 100644 --- a/include/cglm/cam.h +++ b/include/cglm/cam.h @@ -147,7 +147,7 @@ glm_ortho(float left, */ CGLM_INLINE void -glm_ortho_aabb(const vec3 box[2], mat4 dest) { +glm_ortho_aabb(vec3 box[2], mat4 dest) { glm_ortho(box[0][0], box[1][0], box[0][1], box[1][1], -box[1][2], -box[0][2], @@ -165,7 +165,7 @@ glm_ortho_aabb(const vec3 box[2], mat4 dest) { */ CGLM_INLINE void -glm_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) { +glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { glm_ortho(box[0][0] - padding, box[1][0] + padding, box[0][1] - padding, box[1][1] + padding, -(box[1][2] + padding), -(box[0][2] - padding), @@ -183,7 +183,7 @@ glm_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) { */ CGLM_INLINE void -glm_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest) { +glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { glm_ortho(box[0][0], box[1][0], box[0][1], box[1][1], -(box[1][2] + padding), -(box[0][2] - padding), @@ -218,7 +218,9 @@ glm_ortho_default(float aspect, mat4 dest) { */ CGLM_INLINE void -glm_ortho_default_s(float aspect, float size, mat4 dest) { +glm_ortho_default_s(float aspect, + float size, + mat4 dest) { if (aspect >= 1.0f) { glm_ortho(-size * aspect, size * aspect, @@ -336,10 +338,10 @@ glm_perspective_resize(float aspect, mat4 proj) { */ CGLM_INLINE void -glm_lookat(const vec3 eye, - const vec3 center, - const vec3 up, - mat4 dest) { +glm_lookat(vec3 eye, + vec3 center, + vec3 up, + mat4 dest) { CGLM_ALIGN(8) vec3 f, u, s; glm_vec3_sub(center, eye, f); @@ -380,7 +382,7 @@ glm_lookat(const vec3 eye, */ CGLM_INLINE void -glm_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) { +glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { CGLM_ALIGN(8) vec3 target; glm_vec3_add(eye, dir, target); glm_lookat(eye, target, up, dest); @@ -398,7 +400,7 @@ glm_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) { */ CGLM_INLINE void -glm_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) { +glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) { CGLM_ALIGN(8) vec3 up; glm_vec3_ortho(dir, up); glm_look(eye, dir, up, dest); @@ -417,7 +419,7 @@ glm_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) { */ CGLM_INLINE void -glm_persp_decomp(const mat4 proj, +glm_persp_decomp(mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, @@ -457,7 +459,7 @@ glm_persp_decomp(const mat4 proj, */ CGLM_INLINE void -glm_persp_decompv(const mat4 proj, float dest[6]) { +glm_persp_decompv(mat4 proj, float dest[6]) { glm_persp_decomp(proj, &dest[0], &dest[1], &dest[2], &dest[3], &dest[4], &dest[5]); } @@ -472,7 +474,7 @@ glm_persp_decompv(const mat4 proj, float dest[6]) { */ CGLM_INLINE void -glm_persp_decomp_x(const mat4 proj, +glm_persp_decomp_x(mat4 proj, float * __restrict left, float * __restrict right) { float nearVal, m20, m00; @@ -495,7 +497,7 @@ glm_persp_decomp_x(const mat4 proj, */ CGLM_INLINE void -glm_persp_decomp_y(const mat4 proj, +glm_persp_decomp_y(mat4 proj, float * __restrict top, float * __restrict bottom) { float nearVal, m21, m11; @@ -518,7 +520,7 @@ glm_persp_decomp_y(const mat4 proj, */ CGLM_INLINE void -glm_persp_decomp_z(const mat4 proj, +glm_persp_decomp_z(mat4 proj, float * __restrict nearVal, float * __restrict farVal) { float m32, m22; @@ -538,7 +540,7 @@ glm_persp_decomp_z(const mat4 proj, */ CGLM_INLINE void -glm_persp_decomp_far(const mat4 proj, float * __restrict farVal) { +glm_persp_decomp_far(mat4 proj, float * __restrict farVal) { *farVal = proj[3][2] / (proj[2][2] + 1.0f); } @@ -550,7 +552,7 @@ glm_persp_decomp_far(const mat4 proj, float * __restrict farVal) { */ CGLM_INLINE void -glm_persp_decomp_near(const mat4 proj, float * __restrict nearVal) { +glm_persp_decomp_near(mat4 proj, float * __restrict nearVal) { *nearVal = proj[3][2] / (proj[2][2] - 1.0f); } @@ -564,7 +566,7 @@ glm_persp_decomp_near(const mat4 proj, float * __restrict nearVal) { */ CGLM_INLINE float -glm_persp_fovy(const mat4 proj) { +glm_persp_fovy(mat4 proj) { return 2.0f * atanf(1.0f / proj[1][1]); } @@ -575,7 +577,7 @@ glm_persp_fovy(const mat4 proj) { */ CGLM_INLINE float -glm_persp_aspect(const mat4 proj) { +glm_persp_aspect(mat4 proj) { return proj[1][1] / proj[0][0]; } @@ -588,7 +590,7 @@ glm_persp_aspect(const mat4 proj) { */ CGLM_INLINE void -glm_persp_sizes(const mat4 proj, float fovy, vec4 dest) { +glm_persp_sizes(mat4 proj, float fovy, vec4 dest) { float t, a, nearVal, farVal; t = 2.0f * tanf(fovy * 0.5f); diff --git a/include/cglm/color.h b/include/cglm/color.h index 27d77b8..69566ad 100644 --- a/include/cglm/color.h +++ b/include/cglm/color.h @@ -18,7 +18,7 @@ */ CGLM_INLINE float -glm_luminance(const vec3 rgb) { +glm_luminance(vec3 rgb) { vec3 l = {0.212671f, 0.715160f, 0.072169f}; return glm_dot(rgb, l); } diff --git a/include/cglm/curve.h b/include/cglm/curve.h index bcc104f..5033be5 100644 --- a/include/cglm/curve.h +++ b/include/cglm/curve.h @@ -31,7 +31,7 @@ */ CGLM_INLINE float -glm_smc(float s, const mat4 m, const vec4 c) { +glm_smc(float s, mat4 m, vec4 c) { vec4 vs; glm_vec4_cubic(s, vs); return glm_mat4_rmc(vs, m, c); diff --git a/include/cglm/euler.h b/include/cglm/euler.h index df6c0bc..1ff5f6d 100644 --- a/include/cglm/euler.h +++ b/include/cglm/euler.h @@ -57,7 +57,7 @@ typedef enum glm_euler_sq { CGLM_INLINE glm_euler_sq -glm_euler_order(const int ord[3]) { +glm_euler_order(int ord[3]) { return (glm_euler_sq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4); } @@ -69,7 +69,7 @@ glm_euler_order(const int ord[3]) { */ CGLM_INLINE void -glm_euler_angles(const mat4 m, vec3 dest) { +glm_euler_angles(mat4 m, vec3 dest) { float m00, m01, m10, m11, m20, m21, m22; float thetaX, thetaY, thetaZ; @@ -107,7 +107,7 @@ glm_euler_angles(const mat4 m, vec3 dest) { */ CGLM_INLINE void -glm_euler_xyz(const vec3 angles, mat4 dest) { +glm_euler_xyz(vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, czsx, cxcz, sysz; @@ -145,7 +145,7 @@ glm_euler_xyz(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler(const vec3 angles, mat4 dest) { +glm_euler(vec3 angles, mat4 dest) { glm_euler_xyz(angles, dest); } @@ -157,7 +157,7 @@ glm_euler(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_xzy(const vec3 angles, mat4 dest) { +glm_euler_xzy(vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, sxsy, cysx, cxsy, cxcy; @@ -197,7 +197,7 @@ glm_euler_xzy(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_yxz(const vec3 angles, mat4 dest) { +glm_euler_yxz(vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, cycz, sysz, czsy, cysz; @@ -236,7 +236,7 @@ glm_euler_yxz(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_yzx(const vec3 angles, mat4 dest) { +glm_euler_yzx(vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, sxsy, cxcy, cysx, cxsy; @@ -275,7 +275,7 @@ glm_euler_yzx(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_zxy(const vec3 angles, mat4 dest) { +glm_euler_zxy(vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, cycz, sxsy, cysz; @@ -313,7 +313,7 @@ glm_euler_zxy(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_zyx(const vec3 angles, mat4 dest) { +glm_euler_zyx(vec3 angles, mat4 dest) { float cx, cy, cz, sx, sy, sz, czsx, cxcz, sysz; @@ -352,7 +352,7 @@ glm_euler_zyx(const vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_by_order(const vec3 angles, glm_euler_sq ord, mat4 dest) { +glm_euler_by_order(vec3 angles, glm_euler_sq ord, mat4 dest) { float cx, cy, cz, sx, sy, sz; diff --git a/include/cglm/frustum.h b/include/cglm/frustum.h index 755fecd..78b39d2 100644 --- a/include/cglm/frustum.h +++ b/include/cglm/frustum.h @@ -69,7 +69,7 @@ */ CGLM_INLINE void -glm_frustum_planes(const mat4 m, vec4 dest[6]) { +glm_frustum_planes(mat4 m, vec4 dest[6]) { mat4 t; glm_mat4_transpose_to(m, t); @@ -114,7 +114,7 @@ glm_frustum_planes(const mat4 m, vec4 dest[6]) { */ CGLM_INLINE void -glm_frustum_corners(const mat4 invMat, vec4 dest[8]) { +glm_frustum_corners(mat4 invMat, vec4 dest[8]) { vec4 c[8]; /* indexOf(nearCoord) = indexOf(farCoord) + 4 */ @@ -157,7 +157,7 @@ glm_frustum_corners(const mat4 invMat, vec4 dest[8]) { */ CGLM_INLINE void -glm_frustum_center(const vec4 corners[8], vec4 dest) { +glm_frustum_center(vec4 corners[8], vec4 dest) { vec4 center; glm_vec4_copy(corners[0], center); @@ -182,7 +182,7 @@ glm_frustum_center(const vec4 corners[8], vec4 dest) { */ CGLM_INLINE void -glm_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) { +glm_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { vec4 v; vec3 min, max; int i; @@ -220,10 +220,10 @@ glm_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) { */ CGLM_INLINE void -glm_frustum_corners_at(const vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]) { +glm_frustum_corners_at(vec4 corners[8], + float splitDist, + float farDist, + vec4 planeCorners[4]) { vec4 corner; float dist, sc; diff --git a/include/cglm/io.h b/include/cglm/io.h index e51f03c..ac0bfeb 100644 --- a/include/cglm/io.h +++ b/include/cglm/io.h @@ -25,8 +25,8 @@ CGLM_INLINE void -glm_mat4_print(const mat4 matrix, - FILE * const __restrict ostream) { +glm_mat4_print(mat4 matrix, + FILE * __restrict ostream) { int i; int j; @@ -55,8 +55,8 @@ glm_mat4_print(const mat4 matrix, CGLM_INLINE void -glm_mat3_print(const mat3 matrix, - FILE * const __restrict ostream) { +glm_mat3_print(mat3 matrix, + FILE * __restrict ostream) { int i; int j; @@ -85,8 +85,8 @@ glm_mat3_print(const mat3 matrix, CGLM_INLINE void -glm_vec4_print(const vec4 vec, - FILE * const __restrict ostream) { +glm_vec4_print(vec4 vec, + FILE * __restrict ostream) { int i; #define m 4 @@ -107,8 +107,8 @@ glm_vec4_print(const vec4 vec, CGLM_INLINE void -glm_vec3_print(const vec3 vec, - FILE * const __restrict ostream) { +glm_vec3_print(vec3 vec, + FILE * __restrict ostream) { int i; #define m 3 @@ -129,8 +129,8 @@ glm_vec3_print(const vec3 vec, CGLM_INLINE void -glm_ivec3_print(const ivec3 vec, - FILE * const __restrict ostream) { +glm_ivec3_print(ivec3 vec, + FILE * __restrict ostream) { int i; #define m 3 @@ -151,8 +151,8 @@ glm_ivec3_print(const ivec3 vec, CGLM_INLINE void -glm_versor_print(const versor vec, - FILE * const __restrict ostream) { +glm_versor_print(versor vec, + FILE * __restrict ostream) { int i; #define m 4 @@ -173,9 +173,9 @@ glm_versor_print(const versor vec, CGLM_INLINE void -glm_aabb_print(const vec3 bbox[2], +glm_aabb_print(vec3 bbox[2], const char * __restrict tag, - FILE * const __restrict ostream) { + FILE * __restrict ostream) { int i, j; #define m 3 diff --git a/include/cglm/mat3.h b/include/cglm/mat3.h index f1597fd..3126064 100644 --- a/include/cglm/mat3.h +++ b/include/cglm/mat3.h @@ -65,7 +65,7 @@ */ CGLM_INLINE void -glm_mat3_copy(const mat3 mat, mat3 dest) { +glm_mat3_copy(mat3 mat, mat3 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -110,7 +110,7 @@ glm_mat3_identity(mat3 mat) { */ CGLM_INLINE void -glm_mat3_identity_array(mat3 * const __restrict mat, size_t count) { +glm_mat3_identity_array(mat3 * __restrict mat, size_t count) { CGLM_ALIGN_MAT mat3 t = GLM_MAT3_IDENTITY_INIT; size_t i; @@ -147,7 +147,7 @@ glm_mat3_zero(mat3 mat) { */ CGLM_INLINE void -glm_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) { +glm_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat3_mul_sse2(m1, m2, dest); #else @@ -181,7 +181,7 @@ glm_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) { */ CGLM_INLINE void -glm_mat3_transpose_to(const mat3 m, mat3 dest) { +glm_mat3_transpose_to(mat3 m, mat3 dest) { dest[0][0] = m[0][0]; dest[0][1] = m[1][0]; dest[0][2] = m[2][0]; @@ -227,7 +227,7 @@ glm_mat3_transpose(mat3 m) { */ CGLM_INLINE void -glm_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) { +glm_mat3_mulv(mat3 m, vec3 v, vec3 dest) { dest[0] = m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2]; dest[1] = m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2]; dest[2] = m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2]; @@ -242,7 +242,7 @@ glm_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) { */ CGLM_INLINE float -glm_mat3_trace(const mat3 m) { +glm_mat3_trace(mat3 m) { return m[0][0] + m[1][1] + m[2][2]; } @@ -254,7 +254,7 @@ glm_mat3_trace(const mat3 m) { */ CGLM_INLINE void -glm_mat3_quat(const mat3 m, versor dest) { +glm_mat3_quat(mat3 m, versor dest) { float trace, r, rinv; /* it seems using like m12 instead of m[1][2] causes extra instructions */ @@ -320,7 +320,7 @@ glm_mat3_scale(mat3 m, float s) { */ CGLM_INLINE float -glm_mat3_det(const mat3 mat) { +glm_mat3_det(mat3 mat) { float a = mat[0][0], b = mat[0][1], c = mat[0][2], d = mat[1][0], e = mat[1][1], f = mat[1][2], g = mat[2][0], h = mat[2][1], i = mat[2][2]; @@ -336,7 +336,7 @@ glm_mat3_det(const mat3 mat) { */ CGLM_INLINE void -glm_mat3_inv(const mat3 mat, mat3 dest) { +glm_mat3_inv(mat3 mat, mat3 dest) { float det; float a = mat[0][0], b = mat[0][1], c = mat[0][2], d = mat[1][0], e = mat[1][1], f = mat[1][2], @@ -413,7 +413,7 @@ glm_mat3_swap_row(mat3 mat, int row1, int row2) { */ CGLM_INLINE float -glm_mat3_rmc(const vec3 r, const mat3 m, const vec3 c) { +glm_mat3_rmc(vec3 r, mat3 m, vec3 c) { vec3 tmp; glm_mat3_mulv(m, c, tmp); return glm_vec3_dot(r, tmp); diff --git a/include/cglm/mat4.h b/include/cglm/mat4.h index 2a87fba..e6b916b 100644 --- a/include/cglm/mat4.h +++ b/include/cglm/mat4.h @@ -100,7 +100,7 @@ */ CGLM_INLINE void -glm_mat4_ucopy(const mat4 mat, mat4 dest) { +glm_mat4_ucopy(mat4 mat, mat4 dest) { dest[0][0] = mat[0][0]; dest[1][0] = mat[1][0]; dest[0][1] = mat[0][1]; dest[1][1] = mat[1][1]; dest[0][2] = mat[0][2]; dest[1][2] = mat[1][2]; @@ -120,7 +120,7 @@ glm_mat4_ucopy(const mat4 mat, mat4 dest) { */ CGLM_INLINE void -glm_mat4_copy(const mat4 mat, mat4 dest) { +glm_mat4_copy(mat4 mat, mat4 dest) { #ifdef __AVX__ glmm_store256(dest[0], glmm_load256(mat[0])); glmm_store256(dest[2], glmm_load256(mat[2])); @@ -170,7 +170,7 @@ glm_mat4_identity(mat4 mat) { */ CGLM_INLINE void -glm_mat4_identity_array(mat4 * const __restrict mat, size_t count) { +glm_mat4_identity_array(mat4 * __restrict mat, size_t count) { CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; size_t i; @@ -199,7 +199,7 @@ glm_mat4_zero(mat4 mat) { */ CGLM_INLINE void -glm_mat4_pick3(const mat4 mat, mat3 dest) { +glm_mat4_pick3(mat4 mat, mat3 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -223,7 +223,7 @@ glm_mat4_pick3(const mat4 mat, mat3 dest) { */ CGLM_INLINE void -glm_mat4_pick3t(const mat4 mat, mat3 dest) { +glm_mat4_pick3t(mat4 mat, mat3 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[1][0]; dest[0][2] = mat[2][0]; @@ -245,7 +245,7 @@ glm_mat4_pick3t(const mat4 mat, mat3 dest) { */ CGLM_INLINE void -glm_mat4_ins3(const mat3 mat, mat4 dest) { +glm_mat4_ins3(mat3 mat, mat4 dest) { dest[0][0] = mat[0][0]; dest[0][1] = mat[0][1]; dest[0][2] = mat[0][2]; @@ -275,7 +275,7 @@ glm_mat4_ins3(const mat3 mat, mat4 dest) { */ CGLM_INLINE void -glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { #ifdef __AVX__ glm_mat4_mul_avx(m1, m2, dest); #elif defined( __SSE__ ) || defined( __SSE2__ ) @@ -333,7 +333,7 @@ glm_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) { */ CGLM_INLINE void -glm_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) { +glm_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { uint32_t i; #ifdef DEBUG @@ -355,7 +355,7 @@ glm_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) { */ CGLM_INLINE void -glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) { +glm_mat4_mulv(mat4 m, vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_mulv_sse2(m, v, dest); #else @@ -377,7 +377,7 @@ glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) { */ CGLM_INLINE float -glm_mat4_trace(const mat4 m) { +glm_mat4_trace(mat4 m) { return m[0][0] + m[1][1] + m[2][2] + m[3][3]; } @@ -390,7 +390,7 @@ glm_mat4_trace(const mat4 m) { */ CGLM_INLINE float -glm_mat4_trace3(const mat4 m) { +glm_mat4_trace3(mat4 m) { return m[0][0] + m[1][1] + m[2][2]; } @@ -402,7 +402,7 @@ glm_mat4_trace3(const mat4 m) { */ CGLM_INLINE void -glm_mat4_quat(const mat4 m, versor dest) { +glm_mat4_quat(mat4 m, versor dest) { float trace, r, rinv; /* it seems using like m12 instead of m[1][2] causes extra instructions */ @@ -453,7 +453,7 @@ glm_mat4_quat(const mat4 m, versor dest) { */ CGLM_INLINE void -glm_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) { +glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { vec4 res; glm_vec4(v, last, res); glm_mat4_mulv(m, res, res); @@ -470,7 +470,7 @@ glm_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) { */ CGLM_INLINE void -glm_mat4_transpose_to(const mat4 m, mat4 dest) { +glm_mat4_transpose_to(mat4 m, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_transp_sse2(m, dest); #else @@ -553,7 +553,7 @@ glm_mat4_scale(mat4 m, float s) { */ CGLM_INLINE float -glm_mat4_det(const mat4 mat) { +glm_mat4_det(mat4 mat) { #if defined( __SSE__ ) || defined( __SSE2__ ) return glm_mat4_det_sse2(mat); #else @@ -586,7 +586,7 @@ glm_mat4_det(const mat4 mat) { */ CGLM_INLINE void -glm_mat4_inv(const mat4 mat, mat4 dest) { +glm_mat4_inv(mat4 mat, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_inv_sse2(mat, dest); #else @@ -647,7 +647,7 @@ glm_mat4_inv(const mat4 mat, mat4 dest) { */ CGLM_INLINE void -glm_mat4_inv_fast(const mat4 mat, mat4 dest) { +glm_mat4_inv_fast(mat4 mat, mat4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glm_mat4_inv_fast_sse2(mat, dest); #else @@ -680,7 +680,7 @@ glm_mat4_swap_col(mat4 mat, int col1, int col2) { */ CGLM_INLINE void -glm_mat4_swap_row(mat4 mat, const int row1, const int row2) { +glm_mat4_swap_row(mat4 mat, int row1, int row2) { CGLM_ALIGN(16) vec4 tmp; tmp[0] = mat[0][row1]; tmp[1] = mat[1][row1]; @@ -714,7 +714,7 @@ glm_mat4_swap_row(mat4 mat, const int row1, const int row2) { */ CGLM_INLINE float -glm_mat4_rmc(const vec4 r, const mat4 m, const vec4 c) { +glm_mat4_rmc(vec4 r, mat4 m, vec4 c) { vec4 tmp; glm_mat4_mulv(m, c, tmp); return glm_vec4_dot(r, tmp); diff --git a/include/cglm/project.h b/include/cglm/project.h index f62b001..1336222 100644 --- a/include/cglm/project.h +++ b/include/cglm/project.h @@ -41,7 +41,7 @@ */ CGLM_INLINE void -glm_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) { +glm_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { vec4 v; v[0] = 2.0f * (pos[0] - vp[0]) / vp[2] - 1.0f; @@ -80,7 +80,7 @@ glm_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) { */ CGLM_INLINE void -glm_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { +glm_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { mat4 inv; glm_mat4_inv(m, inv); glm_unprojecti(pos, inv, vp, dest); @@ -100,7 +100,7 @@ glm_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { */ CGLM_INLINE void -glm_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { +glm_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { CGLM_ALIGN(16) vec4 pos4, vone = GLM_VEC4_ONE_INIT; glm_vec4(pos, 1.0f, pos4); diff --git a/include/cglm/quat.h b/include/cglm/quat.h index e6ef0f4..f5f29af 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -68,15 +68,15 @@ glm_mat4_identity(mat4 mat); CGLM_INLINE void -glm_mat4_mulv(const mat4 m, const vec4 v, vec4 dest); +glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); CGLM_INLINE void -glm_mul_rot(const mat4 m1, const mat4 m2, mat4 dest); +glm_mul_rot(mat4 m1, mat4 m2, mat4 dest); CGLM_INLINE void -glm_translate(mat4 m, const vec3 v); +glm_translate(mat4 m, vec3 v); /* * IMPORTANT: @@ -113,7 +113,7 @@ glm_quat_identity(versor q) { */ CGLM_INLINE void -glm_quat_identity_array(versor * const __restrict q, size_t count) { +glm_quat_identity_array(versor * __restrict q, size_t count) { CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT; size_t i; @@ -149,7 +149,7 @@ glm_quat_init(versor q, float x, float y, float z, float w) { */ CGLM_INLINE void -glm_quatv(versor q, float angle, const vec3 axis) { +glm_quatv(versor q, float angle, vec3 axis) { CGLM_ALIGN(8) vec3 k; float a, c, s; @@ -189,7 +189,7 @@ glm_quat(versor q, float angle, float x, float y, float z) { */ CGLM_INLINE void -glm_quat_copy(const versor q, versor dest) { +glm_quat_copy(versor q, versor dest) { glm_vec4_copy(q, dest); } @@ -200,7 +200,7 @@ glm_quat_copy(const versor q, versor dest) { */ CGLM_INLINE float -glm_quat_norm(const versor q) { +glm_quat_norm(versor q) { return glm_vec4_norm(q); } @@ -212,7 +212,7 @@ glm_quat_norm(const versor q) { */ CGLM_INLINE void -glm_quat_normalize_to(const versor q, versor dest) { +glm_quat_normalize_to(versor q, versor dest) { #if defined( __SSE2__ ) || defined( __SSE2__ ) __m128 xdot, x0; float dot; @@ -260,7 +260,7 @@ glm_quat_normalize(versor q) { */ CGLM_INLINE float -glm_quat_dot(const versor p, const versor q) { +glm_quat_dot(versor p, versor q) { return glm_vec4_dot(p, q); } @@ -272,7 +272,7 @@ glm_quat_dot(const versor p, const versor q) { */ CGLM_INLINE void -glm_quat_conjugate(const versor q, versor dest) { +glm_quat_conjugate(versor q, versor dest) { glm_vec4_negate_to(q, dest); dest[3] = -dest[3]; } @@ -285,7 +285,7 @@ glm_quat_conjugate(const versor q, versor dest) { */ CGLM_INLINE void -glm_quat_inv(const versor q, versor dest) { +glm_quat_inv(versor q, versor dest) { CGLM_ALIGN(16) versor conj; glm_quat_conjugate(q, conj); glm_vec4_scale(conj, 1.0f / glm_vec4_norm2(q), dest); @@ -300,7 +300,7 @@ glm_quat_inv(const versor q, versor dest) { */ CGLM_INLINE void -glm_quat_add(const versor p, const versor q, versor dest) { +glm_quat_add(versor p, versor q, versor dest) { glm_vec4_add(p, q, dest); } @@ -313,7 +313,7 @@ glm_quat_add(const versor p, const versor q, versor dest) { */ CGLM_INLINE void -glm_quat_sub(const versor p, const versor q, versor dest) { +glm_quat_sub(versor p, versor q, versor dest) { glm_vec4_sub(p, q, dest); } @@ -324,7 +324,7 @@ glm_quat_sub(const versor p, const versor q, versor dest) { */ CGLM_INLINE float -glm_quat_real(const versor q) { +glm_quat_real(versor q) { return q[3]; } @@ -336,7 +336,7 @@ glm_quat_real(const versor q) { */ CGLM_INLINE void -glm_quat_imag(const versor q, vec3 dest) { +glm_quat_imag(versor q, vec3 dest) { dest[0] = q[0]; dest[1] = q[1]; dest[2] = q[2]; @@ -349,7 +349,7 @@ glm_quat_imag(const versor q, vec3 dest) { */ CGLM_INLINE void -glm_quat_imagn(const versor q, vec3 dest) { +glm_quat_imagn(versor q, vec3 dest) { glm_normalize_to(q, dest); } @@ -360,7 +360,7 @@ glm_quat_imagn(const versor q, vec3 dest) { */ CGLM_INLINE float -glm_quat_imaglen(const versor q) { +glm_quat_imaglen(versor q) { return glm_vec3_norm(q); } @@ -371,7 +371,7 @@ glm_quat_imaglen(const versor q) { */ CGLM_INLINE float -glm_quat_angle(const versor q) { +glm_quat_angle(versor q) { /* sin(theta / 2) = length(x*x + y*y + z*z) cos(theta / 2) = w @@ -388,7 +388,7 @@ glm_quat_angle(const versor q) { */ CGLM_INLINE void -glm_quat_axis(const versor q, versor dest) { +glm_quat_axis(versor q, versor dest) { glm_quat_imagn(q, dest); } @@ -406,7 +406,7 @@ glm_quat_axis(const versor q, versor dest) { */ CGLM_INLINE void -glm_quat_mul(const versor p, const versor q, versor dest) { +glm_quat_mul(versor p, versor q, versor dest) { /* + (a1 b2 + b1 a2 + c1 d2 − d1 c2)i + (a1 c2 − b1 d2 + c1 a2 + d1 b2)j @@ -431,7 +431,7 @@ glm_quat_mul(const versor p, const versor q, versor dest) { */ CGLM_INLINE void -glm_quat_mat4(const versor q, mat4 dest) { +glm_quat_mat4(versor q, mat4 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -478,7 +478,7 @@ glm_quat_mat4(const versor q, mat4 dest) { */ CGLM_INLINE void -glm_quat_mat4t(const versor q, mat4 dest) { +glm_quat_mat4t(versor q, mat4 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -525,7 +525,7 @@ glm_quat_mat4t(const versor q, mat4 dest) { */ CGLM_INLINE void -glm_quat_mat3(const versor q, mat3 dest) { +glm_quat_mat3(versor q, mat3 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -564,7 +564,7 @@ glm_quat_mat3(const versor q, mat3 dest) { */ CGLM_INLINE void -glm_quat_mat3t(const versor q, mat3 dest) { +glm_quat_mat3t(versor q, mat3 dest) { float w, x, y, z, xx, yy, zz, xy, yz, xz, @@ -606,7 +606,7 @@ glm_quat_mat3t(const versor q, mat3 dest) { */ CGLM_INLINE void -glm_quat_lerp(const versor from, const versor to, float t, versor dest) { +glm_quat_lerp(versor from, versor to, float t, versor dest) { glm_vec4_lerp(from, to, t, dest); } @@ -621,7 +621,7 @@ glm_quat_lerp(const versor from, const versor to, float t, versor dest) { */ CGLM_INLINE void -glm_quat_slerp(const versor from, const versor to, float t, versor dest) { +glm_quat_slerp(versor from, versor to, float t, versor dest) { CGLM_ALIGN(16) vec4 q1, q2; float cosTheta, sinTheta, angle; @@ -664,7 +664,7 @@ glm_quat_slerp(const versor from, const versor to, float t, versor dest) { */ CGLM_INLINE void -glm_quat_look(const vec3 eye, const versor ori, mat4 dest) { +glm_quat_look(vec3 eye, versor ori, mat4 dest) { /* orientation */ glm_quat_mat4t(ori, dest); @@ -683,7 +683,7 @@ glm_quat_look(const vec3 eye, const versor ori, mat4 dest) { */ CGLM_INLINE void -glm_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) { +glm_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) { CGLM_ALIGN(8) vec3 axis; float dot, angle; @@ -717,11 +717,7 @@ glm_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) { */ CGLM_INLINE void -glm_quat_forp(const vec3 from, - const vec3 to, - const vec3 fwd, - const vec3 up, - versor dest) { +glm_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) { CGLM_ALIGN(8) vec3 dir; glm_vec3_sub(to, from, dir); glm_quat_for(dir, fwd, up, dest); @@ -736,7 +732,7 @@ glm_quat_forp(const vec3 from, */ CGLM_INLINE void -glm_quat_rotatev(const versor q, const vec3 v, vec3 dest) { +glm_quat_rotatev(versor q, vec3 v, vec3 dest) { CGLM_ALIGN(16) versor p; CGLM_ALIGN(8) vec3 u, v1, v2; float s; @@ -764,7 +760,7 @@ glm_quat_rotatev(const versor q, const vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_quat_rotate(const mat4 m, const versor q, mat4 dest) { +glm_quat_rotate(mat4 m, versor q, mat4 dest) { CGLM_ALIGN_MAT mat4 rot; glm_quat_mat4(q, rot); glm_mul_rot(m, rot, dest); @@ -779,7 +775,7 @@ glm_quat_rotate(const mat4 m, const versor q, mat4 dest) { */ CGLM_INLINE void -glm_quat_rotate_at(mat4 m, const versor q, const vec3 pivot) { +glm_quat_rotate_at(mat4 m, versor q, vec3 pivot) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); @@ -803,7 +799,7 @@ glm_quat_rotate_at(mat4 m, const versor q, const vec3 pivot) { */ CGLM_INLINE void -glm_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot) { +glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { CGLM_ALIGN(8) vec3 pivotInv; glm_vec3_negate_to(pivot, pivotInv); diff --git a/include/cglm/simd/avx/affine.h b/include/cglm/simd/avx/affine.h index 0d0454e..b02ff0c 100644 --- a/include/cglm/simd/avx/affine.h +++ b/include/cglm/simd/avx/affine.h @@ -16,7 +16,7 @@ CGLM_INLINE void -glm_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mul_avx(mat4 m1, mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9; diff --git a/include/cglm/simd/avx/mat4.h b/include/cglm/simd/avx/mat4.h index a458d4c..944769b 100644 --- a/include/cglm/simd/avx/mat4.h +++ b/include/cglm/simd/avx/mat4.h @@ -16,7 +16,7 @@ CGLM_INLINE void -glm_mat4_mul_avx(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mat4_mul_avx(mat4 m1, mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m256 y0, y1, y2, y3, y4, y5, y6, y7, y8, y9; diff --git a/include/cglm/simd/neon/mat4.h b/include/cglm/simd/neon/mat4.h index df342dc..0623dc0 100644 --- a/include/cglm/simd/neon/mat4.h +++ b/include/cglm/simd/neon/mat4.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_mat4_mul_neon(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mat4_mul_neon(mat4 m1, mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ float32x4_t l0, l1, l2, l3, r, d0, d1, d2, d3; diff --git a/include/cglm/simd/sse2/affine.h b/include/cglm/simd/sse2/affine.h index ae187b1..87db1b8 100644 --- a/include/cglm/simd/sse2/affine.h +++ b/include/cglm/simd/sse2/affine.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m128 l0, l1, l2, l3, r; @@ -51,7 +51,7 @@ glm_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) { CGLM_INLINE void -glm_mul_rot_sse2(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mul_rot_sse2(mat4 m1, mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m128 l0, l1, l2, l3, r; diff --git a/include/cglm/simd/sse2/mat3.h b/include/cglm/simd/sse2/mat3.h index 07cb5f4..9c972ff 100644 --- a/include/cglm/simd/sse2/mat3.h +++ b/include/cglm/simd/sse2/mat3.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_mat3_mul_sse2(const mat3 m1, const mat3 m2, mat3 dest) { +glm_mat3_mul_sse2(mat3 m1, mat3 m2, mat3 dest) { __m128 l0, l1, l2; __m128 r0, r1, r2; __m128 x0, x1, x2; diff --git a/include/cglm/simd/sse2/mat4.h b/include/cglm/simd/sse2/mat4.h index 66fb75a..7c87eb5 100644 --- a/include/cglm/simd/sse2/mat4.h +++ b/include/cglm/simd/sse2/mat4.h @@ -28,7 +28,7 @@ glm_mat4_scale_sse2(mat4 m, float s) { CGLM_INLINE void -glm_mat4_transp_sse2(const mat4 m, mat4 dest) { +glm_mat4_transp_sse2(mat4 m, mat4 dest) { __m128 r0, r1, r2, r3; r0 = glmm_load(m[0]); @@ -46,7 +46,7 @@ glm_mat4_transp_sse2(const mat4 m, mat4 dest) { CGLM_INLINE void -glm_mat4_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) { +glm_mat4_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { /* D = R * L (Column-Major) */ __m128 l0, l1, l2, l3, r; @@ -85,7 +85,7 @@ glm_mat4_mul_sse2(const mat4 m1, const mat4 m2, mat4 dest) { CGLM_INLINE void -glm_mat4_mulv_sse2(const mat4 m, const vec4 v, vec4 dest) { +glm_mat4_mulv_sse2(mat4 m, vec4 v, vec4 dest) { __m128 x0, x1, x2; x0 = glmm_load(v); @@ -100,7 +100,7 @@ glm_mat4_mulv_sse2(const mat4 m, const vec4 v, vec4 dest) { CGLM_INLINE float -glm_mat4_det_sse2(const mat4 mat) { +glm_mat4_det_sse2(mat4 mat) { __m128 r0, r1, r2, r3, x0, x1, x2; /* 127 <- 0, [square] det(A) = det(At) */ @@ -155,7 +155,7 @@ glm_mat4_det_sse2(const mat4 mat) { CGLM_INLINE void -glm_mat4_inv_fast_sse2(const mat4 mat, mat4 dest) { +glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { __m128 r0, r1, r2, r3, v0, v1, v2, v3, t0, t1, t2, t3, t4, t5, @@ -279,7 +279,7 @@ glm_mat4_inv_fast_sse2(const mat4 mat, mat4 dest) { CGLM_INLINE void -glm_mat4_inv_sse2(const mat4 mat, mat4 dest) { +glm_mat4_inv_sse2(mat4 mat, mat4 dest) { __m128 r0, r1, r2, r3, v0, v1, v2, v3, t0, t1, t2, t3, t4, t5, diff --git a/include/cglm/simd/sse2/quat.h b/include/cglm/simd/sse2/quat.h index 08ebb70..0173f94 100644 --- a/include/cglm/simd/sse2/quat.h +++ b/include/cglm/simd/sse2/quat.h @@ -14,7 +14,7 @@ CGLM_INLINE void -glm_quat_mul_sse2(const versor p, const versor q, versor dest) { +glm_quat_mul_sse2(versor p, versor q, versor dest) { /* + (a1 b2 + b1 a2 + c1 d2 − d1 c2)i + (a1 c2 − b1 d2 + c1 a2 + d1 b2)j diff --git a/include/cglm/simd/x86.h b/include/cglm/simd/x86.h index b926511..99d2b8a 100644 --- a/include/cglm/simd/x86.h +++ b/include/cglm/simd/x86.h @@ -103,7 +103,7 @@ glmm_vdot(__m128 a, __m128 b) { static inline float -glmm_dot(const __m128 a, const __m128 b) { +glmm_dot(__m128 a, __m128 b) { return _mm_cvtss_f32(glmm_vdots(a, b)); } @@ -115,7 +115,7 @@ glmm_norm(__m128 a) { static inline __m128 -glmm_load3(const float v[3]) { +glmm_load3(float v[3]) { __m128i xy; __m128 z; diff --git a/include/cglm/sphere.h b/include/cglm/sphere.h index 7653096..334b83a 100644 --- a/include/cglm/sphere.h +++ b/include/cglm/sphere.h @@ -27,7 +27,7 @@ */ CGLM_INLINE float -glm_sphere_radii(const vec4 s) { +glm_sphere_radii(vec4 s) { return s[3]; } @@ -40,7 +40,7 @@ glm_sphere_radii(const vec4 s) { */ CGLM_INLINE void -glm_sphere_transform(const vec4 s, const mat4 m, vec4 dest) { +glm_sphere_transform(vec4 s, mat4 m, vec4 dest) { glm_mat4_mulv3(m, s, 1.0f, dest); dest[3] = s[3]; } @@ -57,7 +57,7 @@ glm_sphere_transform(const vec4 s, const mat4 m, vec4 dest) { */ CGLM_INLINE void -glm_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) { +glm_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { float dist, radii; dist = glm_vec3_distance(s1, s2); @@ -78,7 +78,7 @@ glm_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) { */ CGLM_INLINE bool -glm_sphere_sphere(const vec4 s1, const vec4 s2) { +glm_sphere_sphere(vec4 s1, vec4 s2) { return glm_vec3_distance2(s1, s2) <= glm_pow2(s1[3] + s2[3]); } @@ -90,7 +90,7 @@ glm_sphere_sphere(const vec4 s1, const vec4 s2) { */ CGLM_INLINE bool -glm_sphere_point(const vec4 s, const vec3 point) { +glm_sphere_point(vec4 s, vec3 point) { float rr; rr = s[3] * s[3]; return glm_vec3_distance2(point, s) <= rr; diff --git a/include/cglm/vec3-ext.h b/include/cglm/vec3-ext.h index d82455f..f1cc462 100644 --- a/include/cglm/vec3-ext.h +++ b/include/cglm/vec3-ext.h @@ -52,7 +52,7 @@ glm_vec3_broadcast(float val, vec3 d) { */ CGLM_INLINE bool -glm_vec3_eq(const vec3 v, float val) { +glm_vec3_eq(vec3 v, float val) { return v[0] == val && v[0] == v[1] && v[0] == v[2]; } @@ -64,7 +64,7 @@ glm_vec3_eq(const vec3 v, float val) { */ CGLM_INLINE bool -glm_vec3_eq_eps(const vec3 v, float val) { +glm_vec3_eq_eps(vec3 v, float val) { return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON && fabsf(v[2] - val) <= FLT_EPSILON; @@ -77,7 +77,7 @@ glm_vec3_eq_eps(const vec3 v, float val) { */ CGLM_INLINE bool -glm_vec3_eq_all(const vec3 v) { +glm_vec3_eq_all(vec3 v) { return v[0] == v[1] && v[0] == v[2]; } @@ -89,7 +89,7 @@ glm_vec3_eq_all(const vec3 v) { */ CGLM_INLINE bool -glm_vec3_eqv(const vec3 a, const vec3 b) { +glm_vec3_eqv(vec3 a, vec3 b) { return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]; @@ -103,7 +103,7 @@ glm_vec3_eqv(const vec3 a, const vec3 b) { */ CGLM_INLINE bool -glm_vec3_eqv_eps(const vec3 a, const vec3 b) { +glm_vec3_eqv_eps(vec3 a, vec3 b) { return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON && fabsf(a[2] - b[2]) <= FLT_EPSILON; @@ -116,7 +116,7 @@ glm_vec3_eqv_eps(const vec3 a, const vec3 b) { */ CGLM_INLINE float -glm_vec3_max(const vec3 v) { +glm_vec3_max(vec3 v) { float max; max = v[0]; @@ -135,7 +135,7 @@ glm_vec3_max(const vec3 v) { */ CGLM_INLINE float -glm_vec3_min(const vec3 v) { +glm_vec3_min(vec3 v) { float min; min = v[0]; @@ -155,7 +155,7 @@ glm_vec3_min(const vec3 v) { */ CGLM_INLINE bool -glm_vec3_isnan(const vec3 v) { +glm_vec3_isnan(vec3 v) { return isnan(v[0]) || isnan(v[1]) || isnan(v[2]); } @@ -167,7 +167,7 @@ glm_vec3_isnan(const vec3 v) { */ CGLM_INLINE bool -glm_vec3_isinf(const vec3 v) { +glm_vec3_isinf(vec3 v) { return isinf(v[0]) || isinf(v[1]) || isinf(v[2]); } @@ -179,7 +179,7 @@ glm_vec3_isinf(const vec3 v) { */ CGLM_INLINE bool -glm_vec3_isvalid(const vec3 v) { +glm_vec3_isvalid(vec3 v) { return !glm_vec3_isnan(v) && !glm_vec3_isinf(v); } @@ -192,7 +192,7 @@ glm_vec3_isvalid(const vec3 v) { */ CGLM_INLINE void -glm_vec3_sign(const vec3 v, vec3 dest) { +glm_vec3_sign(vec3 v, vec3 dest) { dest[0] = glm_signf(v[0]); dest[1] = glm_signf(v[1]); dest[2] = glm_signf(v[2]); @@ -206,7 +206,7 @@ glm_vec3_sign(const vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_sqrt(const vec3 v, vec3 dest) { +glm_vec3_sqrt(vec3 v, vec3 dest) { dest[0] = sqrtf(v[0]); dest[1] = sqrtf(v[1]); dest[2] = sqrtf(v[2]); diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index b503b6e..e67cc2f 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -111,7 +111,7 @@ */ CGLM_INLINE void -glm_vec3(const vec4 v4, vec3 dest) { +glm_vec3(vec4 v4, vec3 dest) { dest[0] = v4[0]; dest[1] = v4[1]; dest[2] = v4[2]; @@ -125,7 +125,7 @@ glm_vec3(const vec4 v4, vec3 dest) { */ CGLM_INLINE void -glm_vec3_copy(const vec3 a, vec3 dest) { +glm_vec3_copy(vec3 a, vec3 dest) { dest[0] = a[0]; dest[1] = a[1]; dest[2] = a[2]; @@ -163,7 +163,7 @@ glm_vec3_one(vec3 v) { */ CGLM_INLINE float -glm_vec3_dot(const vec3 a, const vec3 b) { +glm_vec3_dot(vec3 a, vec3 b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } @@ -180,7 +180,7 @@ glm_vec3_dot(const vec3 a, const vec3 b) { */ CGLM_INLINE float -glm_vec3_norm2(const vec3 v) { +glm_vec3_norm2(vec3 v) { return glm_vec3_dot(v, v); } @@ -193,7 +193,7 @@ glm_vec3_norm2(const vec3 v) { */ CGLM_INLINE float -glm_vec3_norm(const vec3 v) { +glm_vec3_norm(vec3 v) { return sqrtf(glm_vec3_norm2(v)); } @@ -206,7 +206,7 @@ glm_vec3_norm(const vec3 v) { */ CGLM_INLINE void -glm_vec3_add(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_add(vec3 a, vec3 b, vec3 dest) { dest[0] = a[0] + b[0]; dest[1] = a[1] + b[1]; dest[2] = a[2] + b[2]; @@ -221,7 +221,7 @@ glm_vec3_add(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_adds(const vec3 v, float s, vec3 dest) { +glm_vec3_adds(vec3 v, float s, vec3 dest) { dest[0] = v[0] + s; dest[1] = v[1] + s; dest[2] = v[2] + s; @@ -236,7 +236,7 @@ glm_vec3_adds(const vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_sub(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_sub(vec3 a, vec3 b, vec3 dest) { dest[0] = a[0] - b[0]; dest[1] = a[1] - b[1]; dest[2] = a[2] - b[2]; @@ -251,7 +251,7 @@ glm_vec3_sub(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_subs(const vec3 v, float s, vec3 dest) { +glm_vec3_subs(vec3 v, float s, vec3 dest) { dest[0] = v[0] - s; dest[1] = v[1] - s; dest[2] = v[2] - s; @@ -266,7 +266,7 @@ glm_vec3_subs(const vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_mul(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_mul(vec3 a, vec3 b, vec3 dest) { dest[0] = a[0] * b[0]; dest[1] = a[1] * b[1]; dest[2] = a[2] * b[2]; @@ -281,7 +281,7 @@ glm_vec3_mul(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_scale(const vec3 v, float s, vec3 dest) { +glm_vec3_scale(vec3 v, float s, vec3 dest) { dest[0] = v[0] * s; dest[1] = v[1] * s; dest[2] = v[2] * s; @@ -296,7 +296,7 @@ glm_vec3_scale(const vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_scale_as(const vec3 v, float s, vec3 dest) { +glm_vec3_scale_as(vec3 v, float s, vec3 dest) { float norm; norm = glm_vec3_norm(v); @@ -317,7 +317,7 @@ glm_vec3_scale_as(const vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_div(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_div(vec3 a, vec3 b, vec3 dest) { dest[0] = a[0] / b[0]; dest[1] = a[1] / b[1]; dest[2] = a[2] / b[2]; @@ -332,7 +332,7 @@ glm_vec3_div(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_divs(const vec3 v, float s, vec3 dest) { +glm_vec3_divs(vec3 v, float s, vec3 dest) { dest[0] = v[0] / s; dest[1] = v[1] / s; dest[2] = v[2] / s; @@ -349,7 +349,7 @@ glm_vec3_divs(const vec3 v, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_addadd(vec3 a, vec3 b, vec3 dest) { dest[0] += a[0] + b[0]; dest[1] += a[1] + b[1]; dest[2] += a[2] + b[2]; @@ -366,7 +366,7 @@ glm_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_subadd(vec3 a, vec3 b, vec3 dest) { dest[0] += a[0] - b[0]; dest[1] += a[1] - b[1]; dest[2] += a[2] - b[2]; @@ -383,7 +383,7 @@ glm_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_muladd(vec3 a, vec3 b, vec3 dest) { dest[0] += a[0] * b[0]; dest[1] += a[1] * b[1]; dest[2] += a[2] * b[2]; @@ -400,7 +400,7 @@ glm_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_muladds(const vec3 a, float s, vec3 dest) { +glm_vec3_muladds(vec3 a, float s, vec3 dest) { dest[0] += a[0] * s; dest[1] += a[1] * s; dest[2] += a[2] * s; @@ -417,7 +417,7 @@ glm_vec3_muladds(const vec3 a, float s, vec3 dest) { */ CGLM_INLINE void -glm_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { dest[0] += glm_max(a[0], b[0]); dest[1] += glm_max(a[1], b[1]); dest[2] += glm_max(a[2], b[2]); @@ -434,7 +434,7 @@ glm_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) { dest[0] += glm_min(a[0], b[0]); dest[1] += glm_min(a[1], b[1]); dest[2] += glm_min(a[2], b[2]); @@ -448,7 +448,7 @@ glm_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_negate_to(const vec3 v, vec3 dest) { +glm_vec3_negate_to(vec3 v, vec3 dest) { dest[0] = -v[0]; dest[1] = -v[1]; dest[2] = -v[2]; @@ -493,7 +493,7 @@ glm_vec3_normalize(vec3 v) { */ CGLM_INLINE void -glm_vec3_normalize_to(const vec3 v, vec3 dest) { +glm_vec3_normalize_to(vec3 v, vec3 dest) { float norm; norm = glm_vec3_norm(v); @@ -515,7 +515,7 @@ glm_vec3_normalize_to(const vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_cross(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_cross(vec3 a, vec3 b, vec3 dest) { /* (u2.v3 - u3.v2, u3.v1 - u1.v3, u1.v2 - u2.v1) */ dest[0] = a[1] * b[2] - a[2] * b[1]; dest[1] = a[2] * b[0] - a[0] * b[2]; @@ -531,7 +531,7 @@ glm_vec3_cross(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_crossn(vec3 a, vec3 b, vec3 dest) { glm_vec3_cross(a, b, dest); glm_vec3_normalize(dest); } @@ -546,7 +546,7 @@ glm_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE float -glm_vec3_angle(const vec3 a, const vec3 b) { +glm_vec3_angle(vec3 a, vec3 b) { float norm, dot; /* maybe compiler generate approximation instruction (rcp) */ @@ -570,7 +570,7 @@ glm_vec3_angle(const vec3 a, const vec3 b) { */ CGLM_INLINE void -glm_vec3_rotate(vec3 v, float angle, const vec3 axis) { +glm_vec3_rotate(vec3 v, float angle, vec3 axis) { vec3 v1, v2, k; float c, s; @@ -608,7 +608,7 @@ glm_vec3_rotate(vec3 v, float angle, const vec3 axis) { */ CGLM_INLINE void -glm_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) { +glm_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { vec4 x, y, z, res; glm_vec4_normalize_to(m[0], x); @@ -631,7 +631,7 @@ glm_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) { +glm_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { vec4 res, x, y, z; glm_vec4(m[0], 0.0f, x); @@ -658,7 +658,7 @@ glm_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec3_proj(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_proj(vec3 a, vec3 b, vec3 dest) { glm_vec3_scale(b, glm_vec3_dot(a, b) / glm_vec3_norm2(b), dest); @@ -673,7 +673,7 @@ glm_vec3_proj(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_center(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_center(vec3 a, vec3 b, vec3 dest) { glm_vec3_add(a, b, dest); glm_vec3_scale(dest, 0.5f, dest); } @@ -687,7 +687,7 @@ glm_vec3_center(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE float -glm_vec3_distance2(const vec3 a, const vec3 b) { +glm_vec3_distance2(vec3 a, vec3 b) { return glm_pow2(b[0] - a[0]) + glm_pow2(b[1] - a[1]) + glm_pow2(b[2] - a[2]); @@ -702,7 +702,7 @@ glm_vec3_distance2(const vec3 a, const vec3 b) { */ CGLM_INLINE float -glm_vec3_distance(const vec3 a, const vec3 b) { +glm_vec3_distance(vec3 a, vec3 b) { return sqrtf(glm_vec3_distance2(a, b)); } @@ -715,7 +715,7 @@ glm_vec3_distance(const vec3 a, const vec3 b) { */ CGLM_INLINE void -glm_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_maxv(vec3 a, vec3 b, vec3 dest) { dest[0] = glm_max(a[0], b[0]); dest[1] = glm_max(a[1], b[1]); dest[2] = glm_max(a[2], b[2]); @@ -730,7 +730,7 @@ glm_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_minv(const vec3 a, const vec3 b, vec3 dest) { +glm_vec3_minv(vec3 a, vec3 b, vec3 dest) { dest[0] = glm_min(a[0], b[0]); dest[1] = glm_min(a[1], b[1]); dest[2] = glm_min(a[2], b[2]); @@ -744,7 +744,7 @@ glm_vec3_minv(const vec3 a, const vec3 b, vec3 dest) { */ CGLM_INLINE void -glm_vec3_ortho(const vec3 v, vec3 dest) { +glm_vec3_ortho(vec3 v, vec3 dest) { dest[0] = v[1] - v[2]; dest[1] = v[2] - v[0]; dest[2] = v[0] - v[1]; @@ -777,7 +777,7 @@ glm_vec3_clamp(vec3 v, float minVal, float maxVal) { */ CGLM_INLINE void -glm_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) { +glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { vec3 s, v; /* from + s * (to - from) */ @@ -798,7 +798,7 @@ glm_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) { */ CGLM_INLINE void -glm_cross(const vec3 a, const vec3 b, vec3 d) { +glm_cross(vec3 a, vec3 b, vec3 d) { glm_vec3_cross(a, b, d); } @@ -814,7 +814,7 @@ glm_cross(const vec3 a, const vec3 b, vec3 d) { */ CGLM_INLINE float -glm_dot(const vec3 a, const vec3 b) { +glm_dot(vec3 a, vec3 b) { return glm_vec3_dot(a, b); } @@ -841,7 +841,7 @@ glm_normalize(vec3 v) { */ CGLM_INLINE void -glm_normalize_to(const vec3 v, vec3 dest) { +glm_normalize_to(vec3 v, vec3 dest) { glm_vec3_normalize_to(v, dest); } diff --git a/include/cglm/vec4-ext.h b/include/cglm/vec4-ext.h index 7998a7d..c545a14 100644 --- a/include/cglm/vec4-ext.h +++ b/include/cglm/vec4-ext.h @@ -56,7 +56,7 @@ glm_vec4_broadcast(float val, vec4 d) { */ CGLM_INLINE bool -glm_vec4_eq(const vec4 v, float val) { +glm_vec4_eq(vec4 v, float val) { return v[0] == val && v[0] == v[1] && v[0] == v[2] @@ -71,7 +71,7 @@ glm_vec4_eq(const vec4 v, float val) { */ CGLM_INLINE bool -glm_vec4_eq_eps(const vec4 v, float val) { +glm_vec4_eq_eps(vec4 v, float val) { return fabsf(v[0] - val) <= FLT_EPSILON && fabsf(v[1] - val) <= FLT_EPSILON && fabsf(v[2] - val) <= FLT_EPSILON @@ -85,7 +85,7 @@ glm_vec4_eq_eps(const vec4 v, float val) { */ CGLM_INLINE bool -glm_vec4_eq_all(const vec4 v) { +glm_vec4_eq_all(vec4 v) { return v[0] == v[1] && v[0] == v[2] && v[0] == v[3]; @@ -99,7 +99,7 @@ glm_vec4_eq_all(const vec4 v) { */ CGLM_INLINE bool -glm_vec4_eqv(const vec4 a, const vec4 b) { +glm_vec4_eqv(vec4 a, vec4 b) { return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] @@ -114,7 +114,7 @@ glm_vec4_eqv(const vec4 a, const vec4 b) { */ CGLM_INLINE bool -glm_vec4_eqv_eps(const vec4 a, const vec4 b) { +glm_vec4_eqv_eps(vec4 a, vec4 b) { return fabsf(a[0] - b[0]) <= FLT_EPSILON && fabsf(a[1] - b[1]) <= FLT_EPSILON && fabsf(a[2] - b[2]) <= FLT_EPSILON @@ -128,7 +128,7 @@ glm_vec4_eqv_eps(const vec4 a, const vec4 b) { */ CGLM_INLINE float -glm_vec4_max(const vec4 v) { +glm_vec4_max(vec4 v) { float max; max = glm_vec3_max(v); @@ -145,7 +145,7 @@ glm_vec4_max(const vec4 v) { */ CGLM_INLINE float -glm_vec4_min(const vec4 v) { +glm_vec4_min(vec4 v) { float min; min = glm_vec3_min(v); @@ -163,7 +163,7 @@ glm_vec4_min(const vec4 v) { */ CGLM_INLINE bool -glm_vec4_isnan(const vec4 v) { +glm_vec4_isnan(vec4 v) { return isnan(v[0]) || isnan(v[1]) || isnan(v[2]) || isnan(v[3]); } @@ -175,7 +175,7 @@ glm_vec4_isnan(const vec4 v) { */ CGLM_INLINE bool -glm_vec4_isinf(const vec4 v) { +glm_vec4_isinf(vec4 v) { return isinf(v[0]) || isinf(v[1]) || isinf(v[2]) || isinf(v[3]); } @@ -187,7 +187,7 @@ glm_vec4_isinf(const vec4 v) { */ CGLM_INLINE bool -glm_vec4_isvalid(const vec4 v) { +glm_vec4_isvalid(vec4 v) { return !glm_vec4_isnan(v) && !glm_vec4_isinf(v); } @@ -200,7 +200,7 @@ glm_vec4_isvalid(const vec4 v) { */ CGLM_INLINE void -glm_vec4_sign(const vec4 v, vec4 dest) { +glm_vec4_sign(vec4 v, vec4 dest) { #if defined( __SSE2__ ) || defined( __SSE2__ ) __m128 x0, x1, x2, x3, x4; @@ -228,7 +228,7 @@ glm_vec4_sign(const vec4 v, vec4 dest) { */ CGLM_INLINE void -glm_vec4_sqrt(const vec4 v, vec4 dest) { +glm_vec4_sqrt(vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sqrt_ps(glmm_load(v))); #else diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index 3ed31e4..d053ed5 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -90,7 +90,7 @@ */ CGLM_INLINE void -glm_vec4(const vec3 v3, float last, vec4 dest) { +glm_vec4(vec3 v3, float last, vec4 dest) { dest[0] = v3[0]; dest[1] = v3[1]; dest[2] = v3[2]; @@ -105,7 +105,7 @@ glm_vec4(const vec3 v3, float last, vec4 dest) { */ CGLM_INLINE void -glm_vec4_copy3(const vec4 a, vec3 dest) { +glm_vec4_copy3(vec4 a, vec3 dest) { dest[0] = a[0]; dest[1] = a[1]; dest[2] = a[2]; @@ -119,7 +119,7 @@ glm_vec4_copy3(const vec4 a, vec3 dest) { */ CGLM_INLINE void -glm_vec4_copy(const vec4 v, vec4 dest) { +glm_vec4_copy(vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, glmm_load(v)); #elif defined(CGLM_NEON_FP) @@ -142,7 +142,7 @@ glm_vec4_copy(const vec4 v, vec4 dest) { */ CGLM_INLINE void -glm_vec4_ucopy(const vec4 v, vec4 dest) { +glm_vec4_ucopy(vec4 v, vec4 dest) { dest[0] = v[0]; dest[1] = v[1]; dest[2] = v[2]; @@ -199,7 +199,7 @@ glm_vec4_one(vec4 v) { */ CGLM_INLINE float -glm_vec4_dot(const vec4 a, const vec4 b) { +glm_vec4_dot(vec4 a, vec4 b) { #if defined(CGLM_SIMD) return glmm_dot(glmm_load(a), glmm_load(b)); #else @@ -220,7 +220,7 @@ glm_vec4_dot(const vec4 a, const vec4 b) { */ CGLM_INLINE float -glm_vec4_norm2(const vec4 v) { +glm_vec4_norm2(vec4 v) { return glm_vec4_dot(v, v); } @@ -233,7 +233,7 @@ glm_vec4_norm2(const vec4 v) { */ CGLM_INLINE float -glm_vec4_norm(const vec4 v) { +glm_vec4_norm(vec4 v) { #if defined(CGLM_SIMD) return glmm_norm(glmm_load(v)); #else @@ -250,7 +250,7 @@ glm_vec4_norm(const vec4 v) { */ CGLM_INLINE void -glm_vec4_add(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_add(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -272,7 +272,7 @@ glm_vec4_add(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_adds(const vec4 v, float s, vec4 dest) { +glm_vec4_adds(vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -294,7 +294,7 @@ glm_vec4_adds(const vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_sub(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_sub(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sub_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -316,7 +316,7 @@ glm_vec4_sub(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_subs(const vec4 v, float s, vec4 dest) { +glm_vec4_subs(vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_sub_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -338,7 +338,7 @@ glm_vec4_subs(const vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_mul(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_mul(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_mul_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -360,7 +360,7 @@ glm_vec4_mul(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_scale(const vec4 v, float s, vec4 dest) { +glm_vec4_scale(vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_mul_ps(glmm_load(v), _mm_set1_ps(s))); #elif defined(CGLM_NEON_FP) @@ -382,7 +382,7 @@ glm_vec4_scale(const vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_scale_as(const vec4 v, float s, vec4 dest) { +glm_vec4_scale_as(vec4 v, float s, vec4 dest) { float norm; norm = glm_vec4_norm(v); @@ -403,7 +403,7 @@ glm_vec4_scale_as(const vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_div(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_div(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_div_ps(glmm_load(a), glmm_load(b))); #else @@ -423,7 +423,7 @@ glm_vec4_div(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_divs(const vec4 v, float s, vec4 dest) { +glm_vec4_divs(vec4 v, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_div_ps(glmm_load(v), _mm_set1_ps(s))); #else @@ -442,7 +442,7 @@ glm_vec4_divs(const vec4 v, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_addadd(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_add_ps(glmm_load(a), @@ -470,7 +470,7 @@ glm_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_subadd(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_sub_ps(glmm_load(a), @@ -498,7 +498,7 @@ glm_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_mul_ps(glmm_load(a), @@ -526,7 +526,7 @@ glm_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_muladds(const vec4 a, float s, vec4 dest) { +glm_vec4_muladds(vec4 a, float s, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_mul_ps(glmm_load(a), @@ -554,7 +554,7 @@ glm_vec4_muladds(const vec4 a, float s, vec4 dest) { */ CGLM_INLINE void -glm_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_max_ps(glmm_load(a), @@ -582,7 +582,7 @@ glm_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_minadd(const vec4 a,const vec4 b, vec4 dest) { +glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_add_ps(glmm_load(dest), _mm_min_ps(glmm_load(a), @@ -607,7 +607,7 @@ glm_vec4_minadd(const vec4 a,const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_negate_to(const vec4 v, vec4 dest) { +glm_vec4_negate_to(vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_xor_ps(glmm_load(v), _mm_set1_ps(-0.0f))); #elif defined(CGLM_NEON_FP) @@ -639,7 +639,7 @@ glm_vec4_negate(vec4 v) { */ CGLM_INLINE void -glm_vec4_normalize_to(const vec4 v, vec4 dest) { +glm_vec4_normalize_to(vec4 v, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) __m128 xdot, x0; float dot; @@ -688,7 +688,7 @@ glm_vec4_normalize(vec4 v) { */ CGLM_INLINE float -glm_vec4_distance(const vec4 a, const vec4 b) { +glm_vec4_distance(vec4 a, vec4 b) { #if defined( __SSE__ ) || defined( __SSE2__ ) return glmm_norm(_mm_sub_ps(glmm_load(b), glmm_load(a))); #elif defined(CGLM_NEON_FP) @@ -710,7 +710,7 @@ glm_vec4_distance(const vec4 a, const vec4 b) { */ CGLM_INLINE void -glm_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_maxv(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_max_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -732,7 +732,7 @@ glm_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) { */ CGLM_INLINE void -glm_vec4_minv(const vec4 a, const vec4 b, vec4 dest) { +glm_vec4_minv(vec4 a, vec4 b, vec4 dest) { #if defined( __SSE__ ) || defined( __SSE2__ ) glmm_store(dest, _mm_min_ps(glmm_load(a), glmm_load(b))); #elif defined(CGLM_NEON_FP) @@ -781,7 +781,7 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) { */ CGLM_INLINE void -glm_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) { +glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { vec4 s, v; /* from + s * (to - from) */ diff --git a/src/affine.c b/src/affine.c index 6388c19..a818bd1 100644 --- a/src/affine.c +++ b/src/affine.c @@ -10,19 +10,19 @@ CGLM_EXPORT void -glmc_translate_make(mat4 m, const vec3 v) { +glmc_translate_make(mat4 m, vec3 v) { glm_translate_make(m, v); } CGLM_EXPORT void -glmc_translate_to(const mat4 m, const vec3 v, mat4 dest) { +glmc_translate_to(mat4 m, vec3 v, mat4 dest) { glm_translate_to(m, v, dest); } CGLM_EXPORT void -glmc_translate(mat4 m, const vec3 v) { +glmc_translate(mat4 m, vec3 v) { glm_translate(m, v); } @@ -46,19 +46,19 @@ glmc_translate_z(mat4 m, float to) { CGLM_EXPORT void -glmc_scale_make(mat4 m, const vec3 v) { +glmc_scale_make(mat4 m, vec3 v) { glm_scale_make(m, v); } CGLM_EXPORT void -glmc_scale_to(const mat4 m, const vec3 v, mat4 dest) { +glmc_scale_to(mat4 m, vec3 v, mat4 dest) { glm_scale_to(m, v, dest); } CGLM_EXPORT void -glmc_scale(mat4 m, const vec3 v) { +glmc_scale(mat4 m, vec3 v) { glm_scale(m, v); } @@ -70,79 +70,79 @@ glmc_scale_uni(mat4 m, float s) { CGLM_EXPORT void -glmc_rotate_x(const mat4 m, float rad, mat4 dest) { +glmc_rotate_x(mat4 m, float rad, mat4 dest) { glm_rotate_x(m, rad, dest); } CGLM_EXPORT void -glmc_rotate_y(const mat4 m, float rad, mat4 dest) { +glmc_rotate_y(mat4 m, float rad, mat4 dest) { glm_rotate_y(m, rad, dest); } CGLM_EXPORT void -glmc_rotate_z(const mat4 m, float rad, mat4 dest) { +glmc_rotate_z(mat4 m, float rad, mat4 dest) { glm_rotate_z(m, rad, dest); } CGLM_EXPORT void -glmc_rotate_make(mat4 m, float angle, const vec3 axis) { +glmc_rotate_make(mat4 m, float angle, vec3 axis) { glm_rotate_make(m, angle, axis); } CGLM_EXPORT void -glmc_rotate(mat4 m, float angle, const vec3 axis) { +glmc_rotate(mat4 m, float angle, vec3 axis) { glm_rotate(m, angle, axis); } CGLM_EXPORT void -glmc_rotate_at(mat4 m, const vec3 pivot, float angle, const vec3 axis) { +glmc_rotate_at(mat4 m, vec3 pivot, float angle, vec3 axis) { glm_rotate_at(m, pivot, angle, axis); } CGLM_EXPORT void -glmc_rotate_atm(mat4 m, const vec3 pivot, float angle, const vec3 axis) { +glmc_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis) { glm_rotate_atm(m, pivot, angle, axis); } CGLM_EXPORT void -glmc_decompose_scalev(const mat4 m, vec3 s) { +glmc_decompose_scalev(mat4 m, vec3 s) { glm_decompose_scalev(m, s); } CGLM_EXPORT bool -glmc_uniscaled(const mat4 m) { +glmc_uniscaled(mat4 m) { return glm_uniscaled(m); } CGLM_EXPORT void -glmc_decompose_rs(const mat4 m, mat4 r, vec3 s) { +glmc_decompose_rs(mat4 m, mat4 r, vec3 s) { glm_decompose_rs(m, r, s); } CGLM_EXPORT void -glmc_decompose(const mat4 m, vec4 t, mat4 r, vec3 s) { +glmc_decompose(mat4 m, vec4 t, mat4 r, vec3 s) { glm_decompose(m, t, r, s); } CGLM_EXPORT void -glmc_mul(const mat4 m1, const mat4 m2, mat4 dest) { +glmc_mul(mat4 m1, mat4 m2, mat4 dest) { glm_mul(m1, m2, dest); } CGLM_EXPORT void -glmc_mul_rot(const mat4 m1, const mat4 m2, mat4 dest) { +glmc_mul_rot(mat4 m1, mat4 m2, mat4 dest) { glm_mul_rot(m1, m2, dest); } diff --git a/src/box.c b/src/box.c index 4c7022b..fd639ea 100644 --- a/src/box.c +++ b/src/box.c @@ -10,34 +10,34 @@ CGLM_EXPORT void -glmc_aabb_transform(const vec3 box[2], const mat4 m, vec3 dest[2]) { +glmc_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) { glm_aabb_transform(box, m, dest); } CGLM_EXPORT void -glmc_aabb_merge(const vec3 box1[2], const vec3 box2[2], vec3 dest[2]) { +glmc_aabb_merge(vec3 box1[2], vec3 box2[2], vec3 dest[2]) { glm_aabb_merge(box1, box2, dest); } CGLM_EXPORT void -glmc_aabb_crop(const vec3 box[2], const vec3 cropBox[2], vec3 dest[2]) { +glmc_aabb_crop(vec3 box[2], vec3 cropBox[2], vec3 dest[2]) { glm_aabb_crop(box, cropBox, dest); } CGLM_EXPORT void -glmc_aabb_crop_until(const vec3 box[2], - const vec3 cropBox[2], - const vec3 clampBox[2], - vec3 dest[2]) { +glmc_aabb_crop_until(vec3 box[2], + vec3 cropBox[2], + vec3 clampBox[2], + vec3 dest[2]) { glm_aabb_crop_until(box, cropBox, clampBox, dest); } CGLM_EXPORT bool -glmc_aabb_frustum(const vec3 box[2], vec4 planes[6]) { +glmc_aabb_frustum(vec3 box[2], vec4 planes[6]) { return glm_aabb_frustum(box, planes); } @@ -49,48 +49,48 @@ glmc_aabb_invalidate(vec3 box[2]) { CGLM_EXPORT bool -glmc_aabb_isvalid(const vec3 box[2]) { +glmc_aabb_isvalid(vec3 box[2]) { return glm_aabb_isvalid(box); } CGLM_EXPORT float -glmc_aabb_size(const vec3 box[2]) { +glmc_aabb_size(vec3 box[2]) { return glm_aabb_size(box); } CGLM_EXPORT float -glmc_aabb_radius(const vec3 box[2]) { +glmc_aabb_radius(vec3 box[2]) { return glm_aabb_radius(box); } CGLM_EXPORT void -glmc_aabb_center(const vec3 box[2], vec3 dest) { +glmc_aabb_center(vec3 box[2], vec3 dest) { glm_aabb_center(box, dest); } CGLM_EXPORT bool -glmc_aabb_aabb(const vec3 box[2], const vec3 other[2]) { +glmc_aabb_aabb(vec3 box[2], vec3 other[2]) { return glm_aabb_aabb(box, other); } CGLM_EXPORT bool -glmc_aabb_point(const vec3 box[2], const vec3 point) { +glmc_aabb_point(vec3 box[2], vec3 point) { return glm_aabb_point(box, point); } CGLM_EXPORT bool -glmc_aabb_contains(const vec3 box[2], const vec3 other[2]) { +glmc_aabb_contains(vec3 box[2], vec3 other[2]) { return glm_aabb_contains(box, other); } CGLM_EXPORT bool -glmc_aabb_sphere(const vec3 box[2], const vec4 s) { +glmc_aabb_sphere(vec3 box[2], vec4 s) { return glm_aabb_sphere(box, s); } diff --git a/src/cam.c b/src/cam.c index 2ad4cdd..39ac210 100644 --- a/src/cam.c +++ b/src/cam.c @@ -16,7 +16,7 @@ glmc_frustum(float left, float top, float nearVal, float farVal, - mat4 dest) { + mat4 dest) { glm_frustum(left, right, bottom, @@ -34,7 +34,7 @@ glmc_ortho(float left, float top, float nearVal, float farVal, - mat4 dest) { + mat4 dest) { glm_ortho(left, right, bottom, @@ -46,19 +46,19 @@ glmc_ortho(float left, CGLM_EXPORT void -glmc_ortho_aabb(const vec3 box[2], mat4 dest) { +glmc_ortho_aabb(vec3 box[2], mat4 dest) { glm_ortho_aabb(box, dest); } CGLM_EXPORT void -glmc_ortho_aabb_p(const vec3 box[2], float padding, mat4 dest) { +glmc_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) { glm_ortho_aabb_p(box, padding, dest); } CGLM_EXPORT void -glmc_ortho_aabb_pz(const vec3 box[2], float padding, mat4 dest) { +glmc_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) { glm_ortho_aabb_pz(box, padding, dest); } @@ -80,7 +80,7 @@ glmc_perspective(float fovy, float aspect, float nearVal, float farVal, - mat4 dest) { + mat4 dest) { glm_perspective(fovy, aspect, nearVal, @@ -108,28 +108,28 @@ glmc_perspective_resize(float aspect, mat4 proj) { CGLM_EXPORT void -glmc_lookat(const vec3 eye, - const vec3 center, - const vec3 up, - mat4 dest) { +glmc_lookat(vec3 eye, + vec3 center, + vec3 up, + mat4 dest) { glm_lookat(eye, center, up, dest); } CGLM_EXPORT void -glmc_look(const vec3 eye, const vec3 dir, const vec3 up, mat4 dest) { +glmc_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) { glm_look(eye, dir, up, dest); } CGLM_EXPORT void -glmc_look_anyup(const vec3 eye, const vec3 dir, mat4 dest) { +glmc_look_anyup(vec3 eye, vec3 dir, mat4 dest) { glm_look_anyup(eye, dir, dest); } CGLM_EXPORT void -glmc_persp_decomp(const mat4 proj, +glmc_persp_decomp(mat4 proj, float * __restrict nearVal, float * __restrict farVal, float * __restrict top, @@ -141,13 +141,13 @@ glmc_persp_decomp(const mat4 proj, CGLM_EXPORT void -glmc_persp_decompv(const mat4 proj, float dest[6]) { +glmc_persp_decompv(mat4 proj, float dest[6]) { glm_persp_decompv(proj, dest); } CGLM_EXPORT void -glmc_persp_decomp_x(const mat4 proj, +glmc_persp_decomp_x(mat4 proj, float * __restrict left, float * __restrict right) { glm_persp_decomp_x(proj, left, right); @@ -155,7 +155,7 @@ glmc_persp_decomp_x(const mat4 proj, CGLM_EXPORT void -glmc_persp_decomp_y(const mat4 proj, +glmc_persp_decomp_y(mat4 proj, float * __restrict top, float * __restrict bottom) { glm_persp_decomp_y(proj, top, bottom); @@ -163,7 +163,7 @@ glmc_persp_decomp_y(const mat4 proj, CGLM_EXPORT void -glmc_persp_decomp_z(const mat4 proj, +glmc_persp_decomp_z(mat4 proj, float * __restrict nearVal, float * __restrict farVal) { glm_persp_decomp_z(proj, nearVal, farVal); @@ -171,30 +171,30 @@ glmc_persp_decomp_z(const mat4 proj, CGLM_EXPORT void -glmc_persp_decomp_far(const mat4 proj, float * __restrict farVal) { +glmc_persp_decomp_far(mat4 proj, float * __restrict farVal) { glm_persp_decomp_far(proj, farVal); } CGLM_EXPORT void -glmc_persp_decomp_near(const mat4 proj, float * __restrict nearVal) { +glmc_persp_decomp_near(mat4 proj, float * __restrict nearVal) { glm_persp_decomp_near(proj, nearVal); } CGLM_EXPORT float -glmc_persp_fovy(const mat4 proj) { +glmc_persp_fovy(mat4 proj) { return glm_persp_fovy(proj); } CGLM_EXPORT float -glmc_persp_aspect(const mat4 proj) { +glmc_persp_aspect(mat4 proj) { return glm_persp_aspect(proj); } CGLM_EXPORT void -glmc_persp_sizes(const mat4 proj, float fovy, vec4 dest) { +glmc_persp_sizes(mat4 proj, float fovy, vec4 dest) { glm_persp_sizes(proj, fovy, dest); } diff --git a/src/curve.c b/src/curve.c index 88d735e..74d4702 100644 --- a/src/curve.c +++ b/src/curve.c @@ -10,6 +10,6 @@ CGLM_EXPORT float -glmc_smc(float s, const mat4 m, const vec4 c) { +glmc_smc(float s, mat4 m, vec4 c) { return glm_smc(s, m, c); } diff --git a/src/euler.c b/src/euler.c index 92126ca..44d6edb 100644 --- a/src/euler.c +++ b/src/euler.c @@ -10,54 +10,54 @@ CGLM_EXPORT void -glmc_euler_angles(const mat4 m, vec3 dest) { +glmc_euler_angles(mat4 m, vec3 dest) { glm_euler_angles(m, dest); } CGLM_EXPORT void -glmc_euler(const vec3 angles, mat4 dest) { +glmc_euler(vec3 angles, mat4 dest) { glm_euler(angles, dest); } CGLM_EXPORT void -glmc_euler_xyz(const vec3 angles, mat4 dest) { +glmc_euler_xyz(vec3 angles, mat4 dest) { glm_euler_xyz(angles, dest); } CGLM_EXPORT void -glmc_euler_zyx(const vec3 angles, mat4 dest) { +glmc_euler_zyx(vec3 angles, mat4 dest) { glm_euler_zyx(angles, dest); } CGLM_EXPORT void -glmc_euler_zxy(const vec3 angles, mat4 dest) { +glmc_euler_zxy(vec3 angles, mat4 dest) { glm_euler_zxy(angles, dest); } CGLM_EXPORT void -glmc_euler_xzy(const vec3 angles, mat4 dest) { +glmc_euler_xzy(vec3 angles, mat4 dest) { glm_euler_xzy(angles, dest); } CGLM_EXPORT void -glmc_euler_yzx(const vec3 angles, mat4 dest) { +glmc_euler_yzx(vec3 angles, mat4 dest) { glm_euler_yzx(angles, dest); } CGLM_EXPORT void -glmc_euler_yxz(const vec3 angles, mat4 dest) { +glmc_euler_yxz(vec3 angles, mat4 dest) { glm_euler_yxz(angles, dest); } CGLM_EXPORT void -glmc_euler_by_order(const vec3 angles, glm_euler_sq axis, mat4 dest) { +glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest) { glm_euler_by_order(angles, axis, dest); } diff --git a/src/frustum.c b/src/frustum.c index 5e896f4..312c3d3 100644 --- a/src/frustum.c +++ b/src/frustum.c @@ -10,33 +10,33 @@ CGLM_EXPORT void -glmc_frustum_planes(const mat4 m, vec4 dest[6]) { +glmc_frustum_planes(mat4 m, vec4 dest[6]) { glm_frustum_planes(m, dest); } CGLM_EXPORT void -glmc_frustum_corners(const mat4 invMat, vec4 dest[8]) { +glmc_frustum_corners(mat4 invMat, vec4 dest[8]) { glm_frustum_corners(invMat, dest); } CGLM_EXPORT void -glmc_frustum_center(const vec4 corners[8], vec4 dest) { +glmc_frustum_center(vec4 corners[8], vec4 dest) { glm_frustum_center(corners, dest); } CGLM_EXPORT void -glmc_frustum_box(const vec4 corners[8], const mat4 m, vec3 box[2]) { +glmc_frustum_box(vec4 corners[8], mat4 m, vec3 box[2]) { glm_frustum_box(corners, m, box); } CGLM_EXPORT void -glmc_frustum_corners_at(const vec4 corners[8], - float splitDist, - float farDist, - vec4 planeCorners[4]) { +glmc_frustum_corners_at(vec4 corners[8], + float splitDist, + float farDist, + vec4 planeCorners[4]) { glm_frustum_corners_at(corners, splitDist, farDist, planeCorners); } diff --git a/src/io.c b/src/io.c index 9e1c15f..fb2b5a9 100644 --- a/src/io.c +++ b/src/io.c @@ -10,35 +10,35 @@ CGLM_EXPORT void -glmc_mat4_print(const mat4 matrix, - FILE * const __restrict ostream) { +glmc_mat4_print(mat4 matrix, + FILE * __restrict ostream) { glm_mat4_print(matrix, ostream); } CGLM_EXPORT void -glmc_mat3_print(const mat3 matrix, - FILE * const __restrict ostream) { +glmc_mat3_print(mat3 matrix, + FILE * __restrict ostream) { glm_mat3_print(matrix, ostream); } CGLM_EXPORT void -glmc_vec4_print(const vec4 vec, - FILE * const __restrict ostream) { +glmc_vec4_print(vec4 vec, + FILE * __restrict ostream) { glm_vec4_print(vec, ostream); } CGLM_EXPORT void -glmc_vec3_print(const vec3 vec, - FILE * const __restrict ostream) { +glmc_vec3_print(vec3 vec, + FILE * __restrict ostream) { glm_vec3_print(vec, ostream); } CGLM_EXPORT void -glmc_versor_print(const versor vec, - FILE * const __restrict ostream) { +glmc_versor_print(versor vec, + FILE * __restrict ostream) { glm_versor_print(vec, ostream); } diff --git a/src/mat3.c b/src/mat3.c index a99f583..337f1f1 100644 --- a/src/mat3.c +++ b/src/mat3.c @@ -10,7 +10,7 @@ CGLM_EXPORT void -glmc_mat3_copy(const mat3 mat, mat3 dest) { +glmc_mat3_copy(mat3 mat, mat3 dest) { glm_mat3_copy(mat, dest); } @@ -22,19 +22,19 @@ glmc_mat3_identity(mat3 mat) { CGLM_EXPORT void -glmc_mat3_identity_array(mat3 * const __restrict mat, size_t count) { +glmc_mat3_identity_array(mat3 * __restrict mat, size_t count) { glm_mat3_identity_array(mat, count); } CGLM_EXPORT void -glmc_mat3_mul(const mat3 m1, const mat3 m2, mat3 dest) { +glmc_mat3_mul(mat3 m1, mat3 m2, mat3 dest) { glm_mat3_mul(m1, m2, dest); } CGLM_EXPORT void -glmc_mat3_transpose_to(const mat3 m, mat3 dest) { +glmc_mat3_transpose_to(mat3 m, mat3 dest) { glm_mat3_transpose_to(m, dest); } @@ -46,19 +46,19 @@ glmc_mat3_transpose(mat3 m) { CGLM_EXPORT void -glmc_mat3_mulv(const mat3 m, const vec3 v, vec3 dest) { +glmc_mat3_mulv(mat3 m, vec3 v, vec3 dest) { glm_mat3_mulv(m, v, dest); } CGLM_EXPORT float -glmc_mat3_trace(const mat3 m) { +glmc_mat3_trace(mat3 m) { return glm_mat3_trace(m); } CGLM_EXPORT void -glmc_mat3_quat(const mat3 m, versor dest) { +glmc_mat3_quat(mat3 m, versor dest) { glm_mat3_quat(m, dest); } @@ -70,13 +70,13 @@ glmc_mat3_scale(mat3 m, float s) { CGLM_EXPORT float -glmc_mat3_det(const mat3 mat) { +glmc_mat3_det(mat3 mat) { return glm_mat3_det(mat); } CGLM_EXPORT void -glmc_mat3_inv(const mat3 mat, mat3 dest) { +glmc_mat3_inv(mat3 mat, mat3 dest) { glm_mat3_inv(mat, dest); } @@ -94,6 +94,6 @@ glmc_mat3_swap_row(mat3 mat, int row1, int row2) { CGLM_EXPORT float -glmc_mat3_rmc(const vec3 r, const mat3 m, const vec3 c) { +glmc_mat3_rmc(vec3 r, mat3 m, vec3 c) { return glm_mat3_rmc(r, m, c); } diff --git a/src/mat4.c b/src/mat4.c index 08c1257..c648a6e 100644 --- a/src/mat4.c +++ b/src/mat4.c @@ -10,13 +10,13 @@ CGLM_EXPORT void -glmc_mat4_ucopy(const mat4 mat, mat4 dest) { +glmc_mat4_ucopy(mat4 mat, mat4 dest) { glm_mat4_copy(mat, dest); } CGLM_EXPORT void -glmc_mat4_copy(const mat4 mat, mat4 dest) { +glmc_mat4_copy(mat4 mat, mat4 dest) { glm_mat4_copy(mat, dest); } @@ -28,73 +28,73 @@ glmc_mat4_identity(mat4 mat) { CGLM_EXPORT void -glmc_mat4_identity_array(mat4 * const __restrict mat, size_t count) { +glmc_mat4_identity_array(mat4 * __restrict mat, size_t count) { glm_mat4_identity_array(mat, count); } CGLM_EXPORT void -glmc_mat4_pick3(const mat4 mat, mat3 dest) { +glmc_mat4_pick3(mat4 mat, mat3 dest) { glm_mat4_pick3(mat, dest); } CGLM_EXPORT void -glmc_mat4_pick3t(const mat4 mat, mat3 dest) { +glmc_mat4_pick3t(mat4 mat, mat3 dest) { glm_mat4_pick3t(mat, dest); } CGLM_EXPORT void -glmc_mat4_ins3(const mat3 mat, mat4 dest) { +glmc_mat4_ins3(mat3 mat, mat4 dest) { glm_mat4_ins3(mat, dest); } CGLM_EXPORT void -glmc_mat4_mul(const mat4 m1, const mat4 m2, mat4 dest) { +glmc_mat4_mul(mat4 m1, mat4 m2, mat4 dest) { glm_mat4_mul(m1, m2, dest); } CGLM_EXPORT void -glmc_mat4_mulN(mat4 * const __restrict matrices[], uint32_t len, mat4 dest) { +glmc_mat4_mulN(mat4 * __restrict matrices[], uint32_t len, mat4 dest) { glm_mat4_mulN(matrices, len, dest); } CGLM_EXPORT void -glmc_mat4_mulv(const mat4 m, const vec4 v, vec4 dest) { +glmc_mat4_mulv(mat4 m, vec4 v, vec4 dest) { glm_mat4_mulv(m, v, dest); } CGLM_EXPORT void -glmc_mat4_mulv3(const mat4 m, const vec3 v, float last, vec3 dest) { +glmc_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest) { glm_mat4_mulv3(m, v, last, dest); } CGLM_EXPORT float -glmc_mat4_trace(const mat4 m) { +glmc_mat4_trace(mat4 m) { return glm_mat4_trace(m); } CGLM_EXPORT float -glmc_mat4_trace3(const mat4 m) { +glmc_mat4_trace3(mat4 m) { return glm_mat4_trace3(m); } CGLM_EXPORT void -glmc_mat4_quat(const mat4 m, versor dest) { +glmc_mat4_quat(mat4 m, versor dest) { glm_mat4_quat(m, dest); } CGLM_EXPORT void -glmc_mat4_transpose_to(const mat4 m, mat4 dest) { +glmc_mat4_transpose_to(mat4 m, mat4 dest) { glm_mat4_transpose_to(m, dest); } @@ -118,25 +118,25 @@ glmc_mat4_scale(mat4 m, float s) { CGLM_EXPORT float -glmc_mat4_det(const mat4 mat) { +glmc_mat4_det(mat4 mat) { return glm_mat4_det(mat); } CGLM_EXPORT void -glmc_mat4_inv(const mat4 mat, mat4 dest) { +glmc_mat4_inv(mat4 mat, mat4 dest) { glm_mat4_inv(mat, dest); } CGLM_EXPORT void -glmc_mat4_inv_precise(const mat4 mat, mat4 dest) { +glmc_mat4_inv_precise(mat4 mat, mat4 dest) { glm_mat4_inv_precise(mat, dest); } CGLM_EXPORT void -glmc_mat4_inv_fast(const mat4 mat, mat4 dest) { +glmc_mat4_inv_fast(mat4 mat, mat4 dest) { glm_mat4_inv_fast(mat, dest); } @@ -154,6 +154,6 @@ glmc_mat4_swap_row(mat4 mat, int row1, int row2) { CGLM_EXPORT float -glmc_mat4_rmc(const vec4 r, const mat4 m, const vec4 c) { +glmc_mat4_rmc(vec4 r, mat4 m, vec4 c) { return glm_mat4_rmc(r, m, c); } diff --git a/src/project.c b/src/project.c index ec7f33d..91c7128 100644 --- a/src/project.c +++ b/src/project.c @@ -10,18 +10,18 @@ CGLM_EXPORT void -glmc_unprojecti(const vec3 pos, const mat4 invMat, const vec4 vp, vec3 dest) { +glmc_unprojecti(vec3 pos, mat4 invMat, vec4 vp, vec3 dest) { glm_unprojecti(pos, invMat, vp, dest); } CGLM_EXPORT void -glmc_unproject(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { +glmc_unproject(vec3 pos, mat4 m, vec4 vp, vec3 dest) { glm_unproject(pos, m, vp, dest); } CGLM_EXPORT void -glmc_project(const vec3 pos, const mat4 m, const vec4 vp, vec3 dest) { +glmc_project(vec3 pos, mat4 m, vec4 vp, vec3 dest) { glm_project(pos, m, vp, dest); } diff --git a/src/quat.c b/src/quat.c index 7a642a8..32674a7 100644 --- a/src/quat.c +++ b/src/quat.c @@ -16,7 +16,7 @@ glmc_quat_identity(versor q) { CGLM_EXPORT void -glmc_quat_identity_array(versor * const __restrict q, size_t count) { +glmc_quat_identity_array(versor * __restrict q, size_t count) { glm_quat_identity_array(q, count); } @@ -34,25 +34,25 @@ glmc_quat(versor q, float angle, float x, float y, float z) { CGLM_EXPORT void -glmc_quatv(versor q, float angle, const vec3 axis) { +glmc_quatv(versor q, float angle, vec3 axis) { glm_quatv(q, angle, axis); } CGLM_EXPORT void -glmc_quat_copy(const versor q, versor dest) { +glmc_quat_copy(versor q, versor dest) { glm_quat_copy(q, dest); } CGLM_EXPORT float -glmc_quat_norm(const versor q) { +glmc_quat_norm(versor q) { return glm_quat_norm(q); } CGLM_EXPORT void -glmc_quat_normalize_to(const versor q, versor dest) { +glmc_quat_normalize_to(versor q, versor dest) { glm_quat_normalize_to(q, dest); } @@ -64,154 +64,150 @@ glmc_quat_normalize(versor q) { CGLM_EXPORT float -glmc_quat_dot(const versor p, const versor q) { +glmc_quat_dot(versor p, versor q) { return glm_quat_dot(p, q); } CGLM_EXPORT void -glmc_quat_conjugate(const versor q, versor dest) { +glmc_quat_conjugate(versor q, versor dest) { glm_quat_conjugate(q, dest); } CGLM_EXPORT void -glmc_quat_inv(const versor q, versor dest) { +glmc_quat_inv(versor q, versor dest) { glm_quat_inv(q, dest); } CGLM_EXPORT void -glmc_quat_add(const versor p, const versor q, versor dest) { +glmc_quat_add(versor p, versor q, versor dest) { glm_quat_add(p, q, dest); } CGLM_EXPORT void -glmc_quat_sub(const versor p, const versor q, versor dest) { +glmc_quat_sub(versor p, versor q, versor dest) { glm_quat_sub(p, q, dest); } CGLM_EXPORT float -glmc_quat_real(const versor q) { +glmc_quat_real(versor q) { return glm_quat_real(q); } CGLM_EXPORT void -glmc_quat_imag(const versor q, vec3 dest) { +glmc_quat_imag(versor q, vec3 dest) { glm_quat_imag(q, dest); } CGLM_EXPORT void -glmc_quat_imagn(const versor q, vec3 dest) { +glmc_quat_imagn(versor q, vec3 dest) { glm_quat_imagn(q, dest); } CGLM_EXPORT float -glmc_quat_imaglen(const versor q) { +glmc_quat_imaglen(versor q) { return glm_quat_imaglen(q); } CGLM_EXPORT float -glmc_quat_angle(const versor q) { +glmc_quat_angle(versor q) { return glm_quat_angle(q); } CGLM_EXPORT void -glmc_quat_axis(const versor q, versor dest) { +glmc_quat_axis(versor q, versor dest) { glm_quat_axis(q, dest); } CGLM_EXPORT void -glmc_quat_mul(const versor p, const versor q, versor dest) { +glmc_quat_mul(versor p, versor q, versor dest) { glm_quat_mul(p, q, dest); } CGLM_EXPORT void -glmc_quat_mat4(const versor q, mat4 dest) { +glmc_quat_mat4(versor q, mat4 dest) { glm_quat_mat4(q, dest); } CGLM_EXPORT void -glmc_quat_mat4t(const versor q, mat4 dest) { +glmc_quat_mat4t(versor q, mat4 dest) { glm_quat_mat4t(q, dest); } CGLM_EXPORT void -glmc_quat_mat3(const versor q, mat3 dest) { +glmc_quat_mat3(versor q, mat3 dest) { glm_quat_mat3(q, dest); } CGLM_EXPORT void -glmc_quat_mat3t(const versor q, mat3 dest) { +glmc_quat_mat3t(versor q, mat3 dest) { glm_quat_mat3t(q, dest); } CGLM_EXPORT void -glmc_quat_lerp(const versor from, const versor to, float t, versor dest) { +glmc_quat_lerp(versor from, versor to, float t, versor dest) { glm_quat_lerp(from, to, t, dest); } CGLM_EXPORT void -glmc_quat_slerp(const versor from, const versor to, float t, versor dest) { +glmc_quat_slerp(versor from, versor to, float t, versor dest) { glm_quat_slerp(from, to, t, dest); } CGLM_EXPORT void -glmc_quat_look(const vec3 eye, const versor ori, mat4 dest) { +glmc_quat_look(vec3 eye, versor ori, mat4 dest) { glm_quat_look(eye, ori, dest); } CGLM_EXPORT void -glmc_quat_for(const vec3 dir, const vec3 fwd, const vec3 up, versor dest) { +glmc_quat_for(vec3 dir, vec3 fwd, vec3 up, versor dest) { glm_quat_for(dir, fwd, up, dest); } CGLM_EXPORT void -glmc_quat_forp(const vec3 from, - const vec3 to, - const vec3 fwd, - const vec3 up, - versor dest) { +glmc_quat_forp(vec3 from, vec3 to, vec3 fwd, vec3 up, versor dest) { glm_quat_forp(from, to, fwd, up, dest); } CGLM_EXPORT void -glmc_quat_rotatev(const versor q, const vec3 v, vec3 dest) { +glmc_quat_rotatev(versor q, vec3 v, vec3 dest) { glm_quat_rotatev(q, v, dest); } CGLM_EXPORT void -glmc_quat_rotate(const mat4 m, const versor q, mat4 dest) { +glmc_quat_rotate(mat4 m, versor q, mat4 dest) { glm_quat_rotate(m, q, dest); } CGLM_EXPORT void -glmc_quat_rotate_at(mat4 model, const versor q, const vec3 pivot) { +glmc_quat_rotate_at(mat4 model, versor q, vec3 pivot) { glm_quat_rotate_at(model, q, pivot); } CGLM_EXPORT void -glmc_quat_rotate_atm(mat4 m, const versor q, const vec3 pivot) { +glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot) { glm_quat_rotate_atm(m, q, pivot); } diff --git a/src/sphere.c b/src/sphere.c index 1026ed4..003ef87 100644 --- a/src/sphere.c +++ b/src/sphere.c @@ -10,30 +10,30 @@ CGLM_EXPORT float -glmc_sphere_radii(const vec4 s) { +glmc_sphere_radii(vec4 s) { return glm_sphere_radii(s); } CGLM_EXPORT void -glmc_sphere_transform(const vec4 s, const mat4 m, vec4 dest) { +glmc_sphere_transform(vec4 s, mat4 m, vec4 dest) { glm_sphere_transform(s, m, dest); } CGLM_EXPORT void -glmc_sphere_merge(const vec4 s1, const vec4 s2, vec4 dest) { +glmc_sphere_merge(vec4 s1, vec4 s2, vec4 dest) { glm_sphere_merge(s1, s2, dest); } CGLM_EXPORT bool -glmc_sphere_sphere(const vec4 s1, const vec4 s2) { +glmc_sphere_sphere(vec4 s1, vec4 s2) { return glm_sphere_sphere(s1, s2); } CGLM_EXPORT bool -glmc_sphere_point(const vec4 s, const vec3 point) { +glmc_sphere_point(vec4 s, vec3 point) { return glm_sphere_point(s, point); } diff --git a/src/vec3.c b/src/vec3.c index afc5bbe..14edaf6 100644 --- a/src/vec3.c +++ b/src/vec3.c @@ -10,13 +10,13 @@ CGLM_EXPORT void -glmc_vec3(const vec4 v4, vec3 dest) { +glmc_vec3(vec4 v4, vec3 dest) { glm_vec3(v4, dest); } CGLM_EXPORT void -glmc_vec3_copy(const vec3 a, vec3 dest) { +glmc_vec3_copy(vec3 a, vec3 dest) { glm_vec3_copy(a, dest); } @@ -34,31 +34,31 @@ glmc_vec3_one(vec3 v) { CGLM_EXPORT float -glmc_vec3_dot(const vec3 a, const vec3 b) { +glmc_vec3_dot(vec3 a, vec3 b) { return glm_vec3_dot(a, b); } CGLM_EXPORT void -glmc_vec3_cross(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_cross(vec3 a, vec3 b, vec3 dest) { glm_vec3_cross(a, b, dest); } CGLM_EXPORT void -glmc_vec3_crossn(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_crossn(vec3 a, vec3 b, vec3 dest) { glm_vec3_crossn(a, b, dest); } CGLM_EXPORT float -glmc_vec3_norm(const vec3 v) { +glmc_vec3_norm(vec3 v) { return glm_vec3_norm(v); } CGLM_EXPORT void -glmc_vec3_normalize_to(const vec3 v, vec3 dest) { +glmc_vec3_normalize_to(vec3 v, vec3 dest) { glm_vec3_normalize_to(v, dest); } @@ -70,97 +70,97 @@ glmc_vec3_normalize(vec3 v) { CGLM_EXPORT float -glmc_vec3_norm2(const vec3 v) { +glmc_vec3_norm2(vec3 v) { return glm_vec3_norm2(v); } CGLM_EXPORT void -glmc_vec3_add(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_add(vec3 a, vec3 b, vec3 dest) { glm_vec3_add(a, b, dest); } CGLM_EXPORT void -glmc_vec3_adds(const vec3 v, float s, vec3 dest) { +glmc_vec3_adds(vec3 v, float s, vec3 dest) { glm_vec3_adds(v, s, dest); } CGLM_EXPORT void -glmc_vec3_sub(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_sub(vec3 a, vec3 b, vec3 dest) { glm_vec3_sub(a, b, dest); } CGLM_EXPORT void -glmc_vec3_subs(const vec3 v, float s, vec3 dest) { +glmc_vec3_subs(vec3 v, float s, vec3 dest) { glm_vec3_subs(v, s, dest); } CGLM_EXPORT void -glmc_vec3_mul(const vec3 a, const vec3 b, vec3 d) { +glmc_vec3_mul(vec3 a, vec3 b, vec3 d) { glm_vec3_mul(a, b, d); } CGLM_EXPORT void -glmc_vec3_scale(const vec3 v, float s, vec3 dest) { +glmc_vec3_scale(vec3 v, float s, vec3 dest) { glm_vec3_scale(v, s, dest); } CGLM_EXPORT void -glmc_vec3_scale_as(const vec3 v, float s, vec3 dest) { +glmc_vec3_scale_as(vec3 v, float s, vec3 dest) { glm_vec3_scale_as(v, s, dest); } CGLM_EXPORT void -glmc_vec3_div(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_div(vec3 a, vec3 b, vec3 dest) { glm_vec3_div(a, b, dest); } CGLM_EXPORT void -glmc_vec3_divs(const vec3 a, float s, vec3 dest) { +glmc_vec3_divs(vec3 a, float s, vec3 dest) { glm_vec3_divs(a, s, dest); } CGLM_EXPORT void -glmc_vec3_addadd(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_addadd(vec3 a, vec3 b, vec3 dest) { glm_vec3_addadd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_subadd(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_subadd(vec3 a, vec3 b, vec3 dest) { glm_vec3_subadd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_muladd(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_muladd(vec3 a, vec3 b, vec3 dest) { glm_vec3_muladd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_muladds(const vec3 a, float s, vec3 dest) { +glmc_vec3_muladds(vec3 a, float s, vec3 dest) { glm_vec3_muladds(a, s, dest); } CGLM_EXPORT void -glmc_vec3_maxadd(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest) { glm_vec3_maxadd(a, b, dest); } CGLM_EXPORT void -glmc_vec3_minadd(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest) { glm_vec3_minadd(a, b, dest); } @@ -172,67 +172,67 @@ glmc_vec3_negate(vec3 v) { CGLM_EXPORT void -glmc_vec3_negate_to(const vec3 v, vec3 dest) { +glmc_vec3_negate_to(vec3 v, vec3 dest) { glm_vec3_negate_to(v, dest); } CGLM_EXPORT float -glmc_vec3_angle(const vec3 a, const vec3 b) { +glmc_vec3_angle(vec3 a, vec3 b) { return glm_vec3_angle(a, b); } CGLM_EXPORT void -glmc_vec3_rotate(vec3 v, float angle, const vec3 axis) { +glmc_vec3_rotate(vec3 v, float angle, vec3 axis) { glm_vec3_rotate(v, angle, axis); } CGLM_EXPORT void -glmc_vec3_rotate_m4(const mat4 m, const vec3 v, vec3 dest) { +glmc_vec3_rotate_m4(mat4 m, vec3 v, vec3 dest) { glm_vec3_rotate_m4(m, v, dest); } CGLM_EXPORT void -glmc_vec3_rotate_m3(const mat3 m, const vec3 v, vec3 dest) { +glmc_vec3_rotate_m3(mat3 m, vec3 v, vec3 dest) { glm_vec3_rotate_m3(m, v, dest); } CGLM_EXPORT void -glmc_vec3_proj(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_proj(vec3 a, vec3 b, vec3 dest) { glm_vec3_proj(a, b, dest); } CGLM_EXPORT void -glmc_vec3_center(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_center(vec3 a, vec3 b, vec3 dest) { glm_vec3_center(a, b, dest); } CGLM_EXPORT float -glmc_vec3_distance2(const vec3 a, const vec3 b) { +glmc_vec3_distance2(vec3 a, vec3 b) { return glm_vec3_distance2(a, b); } CGLM_EXPORT float -glmc_vec3_distance(const vec3 a, const vec3 b) { +glmc_vec3_distance(vec3 a, vec3 b) { return glm_vec3_distance(a, b); } CGLM_EXPORT void -glmc_vec3_maxv(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_maxv(vec3 a, vec3 b, vec3 dest) { glm_vec3_minv(a, b, dest); } CGLM_EXPORT void -glmc_vec3_minv(const vec3 a, const vec3 b, vec3 dest) { +glmc_vec3_minv(vec3 a, vec3 b, vec3 dest) { glm_vec3_maxv(a, b, dest); } @@ -244,13 +244,13 @@ glmc_vec3_clamp(vec3 v, float minVal, float maxVal) { CGLM_EXPORT void -glmc_vec3_ortho(const vec3 v, vec3 dest) { +glmc_vec3_ortho(vec3 v, vec3 dest) { glm_vec3_ortho(v, dest); } CGLM_EXPORT void -glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) { +glmc_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) { glm_vec3_lerp(from, to, t, dest); } @@ -258,7 +258,7 @@ glmc_vec3_lerp(const vec3 from, const vec3 to, float t, vec3 dest) { CGLM_EXPORT void -glmc_vec3_mulv(const vec3 a, const vec3 b, vec3 d) { +glmc_vec3_mulv(vec3 a, vec3 b, vec3 d) { glm_vec3_mulv(a, b, d); } @@ -270,72 +270,72 @@ glmc_vec3_broadcast(float val, vec3 d) { CGLM_EXPORT bool -glmc_vec3_eq(const vec3 v, float val) { +glmc_vec3_eq(vec3 v, float val) { return glm_vec3_eq(v, val); } CGLM_EXPORT bool -glmc_vec3_eq_eps(const vec3 v, float val) { +glmc_vec3_eq_eps(vec3 v, float val) { return glm_vec3_eq_eps(v, val); } CGLM_EXPORT bool -glmc_vec3_eq_all(const vec3 v) { +glmc_vec3_eq_all(vec3 v) { return glm_vec3_eq_all(v); } CGLM_EXPORT bool -glmc_vec3_eqv(const vec3 a, const vec3 b) { +glmc_vec3_eqv(vec3 a, vec3 b) { return glm_vec3_eqv(a, b); } CGLM_EXPORT bool -glmc_vec3_eqv_eps(const vec3 a, const vec3 b) { +glmc_vec3_eqv_eps(vec3 a, vec3 b) { return glm_vec3_eqv_eps(a, b); } CGLM_EXPORT float -glmc_vec3_max(const vec3 v) { +glmc_vec3_max(vec3 v) { return glm_vec3_max(v); } CGLM_EXPORT float -glmc_vec3_min(const vec3 v) { +glmc_vec3_min(vec3 v) { return glm_vec3_min(v); } CGLM_EXPORT bool -glmc_vec3_isnan(const vec3 v) { +glmc_vec3_isnan(vec3 v) { return glm_vec3_isnan(v); } CGLM_EXPORT bool -glmc_vec3_isinf(const vec3 v) { +glmc_vec3_isinf(vec3 v) { return glm_vec3_isinf(v); } CGLM_EXPORT bool -glmc_vec3_isvalid(const vec3 v) { +glmc_vec3_isvalid(vec3 v) { return glm_vec3_isvalid(v); } CGLM_EXPORT void -glmc_vec3_sign(const vec3 v, vec3 dest) { +glmc_vec3_sign(vec3 v, vec3 dest) { glm_vec3_sign(v, dest); } CGLM_EXPORT void -glmc_vec3_sqrt(const vec3 v, vec3 dest) { +glmc_vec3_sqrt(vec3 v, vec3 dest) { glm_vec3_sqrt(v, dest); } diff --git a/src/vec4.c b/src/vec4.c index 932f4ff..0bb6a6e 100644 --- a/src/vec4.c +++ b/src/vec4.c @@ -10,7 +10,7 @@ CGLM_EXPORT void -glmc_vec4(const vec3 v3, float last, vec4 dest) { +glmc_vec4(vec3 v3, float last, vec4 dest) { glm_vec4(v3, last, dest); } @@ -28,37 +28,37 @@ glmc_vec4_one(vec4 v) { CGLM_EXPORT void -glmc_vec4_copy3(const vec4 v, vec3 dest) { +glmc_vec4_copy3(vec4 v, vec3 dest) { glm_vec4_copy3(v, dest); } CGLM_EXPORT void -glmc_vec4_copy(const vec4 v, vec4 dest) { +glmc_vec4_copy(vec4 v, vec4 dest) { glm_vec4_copy(v, dest); } CGLM_EXPORT void -glmc_vec4_ucopy(const vec4 v, vec4 dest) { +glmc_vec4_ucopy(vec4 v, vec4 dest) { glm_vec4_ucopy(v, dest); } CGLM_EXPORT float -glmc_vec4_dot(const vec4 a, const vec4 b) { +glmc_vec4_dot(vec4 a, vec4 b) { return glm_vec4_dot(a, b); } CGLM_EXPORT float -glmc_vec4_norm(const vec4 v) { +glmc_vec4_norm(vec4 v) { return glm_vec4_norm(v); } CGLM_EXPORT void -glmc_vec4_normalize_to(const vec4 v, vec4 dest) { +glmc_vec4_normalize_to(vec4 v, vec4 dest) { glm_vec4_normalize_to(v, dest); } @@ -70,97 +70,97 @@ glmc_vec4_normalize(vec4 v) { CGLM_EXPORT float -glmc_vec4_norm2(const vec4 v) { +glmc_vec4_norm2(vec4 v) { return glm_vec4_norm2(v); } CGLM_EXPORT void -glmc_vec4_add(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_add(vec4 a, vec4 b, vec4 dest) { glm_vec4_add(a, b, dest); } CGLM_EXPORT void -glmc_vec4_adds(const vec4 v, float s, vec4 dest) { +glmc_vec4_adds(vec4 v, float s, vec4 dest) { glm_vec4_adds(v, s, dest); } CGLM_EXPORT void -glmc_vec4_sub(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_sub(vec4 a, vec4 b, vec4 dest) { glm_vec4_sub(a, b, dest); } CGLM_EXPORT void -glmc_vec4_subs(const vec4 v, float s, vec4 dest) { +glmc_vec4_subs(vec4 v, float s, vec4 dest) { glm_vec4_subs(v, s, dest); } CGLM_EXPORT void -glmc_vec4_mul(const vec4 a, const vec4 b, vec4 d) { +glmc_vec4_mul(vec4 a, vec4 b, vec4 d) { glm_vec4_mul(a, b, d); } CGLM_EXPORT void -glmc_vec4_scale(const vec4 v, float s, vec4 dest) { +glmc_vec4_scale(vec4 v, float s, vec4 dest) { glm_vec4_scale(v, s, dest); } CGLM_EXPORT void -glmc_vec4_scale_as(const vec4 v, float s, vec4 dest) { +glmc_vec4_scale_as(vec4 v, float s, vec4 dest) { glm_vec4_scale_as(v, s, dest); } CGLM_EXPORT void -glmc_vec4_div(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_div(vec4 a, vec4 b, vec4 dest) { glm_vec4_div(a, b, dest); } CGLM_EXPORT void -glmc_vec4_divs(const vec4 v, float s, vec4 dest) { +glmc_vec4_divs(vec4 v, float s, vec4 dest) { glm_vec4_divs(v, s, dest); } CGLM_EXPORT void -glmc_vec4_addadd(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_addadd(vec4 a, vec4 b, vec4 dest) { glm_vec4_addadd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_subadd(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest) { glm_vec4_subadd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_muladd(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest) { glm_vec4_muladd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_muladds(const vec4 a, float s, vec4 dest) { +glmc_vec4_muladds(vec4 a, float s, vec4 dest) { glm_vec4_muladds(a, s, dest); } CGLM_EXPORT void -glmc_vec4_maxadd(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest) { glm_vec4_maxadd(a, b, dest); } CGLM_EXPORT void -glmc_vec4_minadd(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest) { glm_vec4_minadd(a, b, dest); } @@ -172,25 +172,25 @@ glmc_vec4_negate(vec4 v) { CGLM_EXPORT void -glmc_vec4_negate_to(const vec4 v, vec4 dest) { +glmc_vec4_negate_to(vec4 v, vec4 dest) { glm_vec4_negate_to(v, dest); } CGLM_EXPORT float -glmc_vec4_distance(const vec4 a, const vec4 b) { +glmc_vec4_distance(vec4 a, vec4 b) { return glm_vec4_distance(a, b); } CGLM_EXPORT void -glmc_vec4_maxv(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_maxv(vec4 a, vec4 b, vec4 dest) { glm_vec4_minv(a, b, dest); } CGLM_EXPORT void -glmc_vec4_minv(const vec4 a, const vec4 b, vec4 dest) { +glmc_vec4_minv(vec4 a, vec4 b, vec4 dest) { glm_vec4_maxv(a, b, dest); } @@ -202,7 +202,7 @@ glmc_vec4_clamp(vec4 v, float minVal, float maxVal) { CGLM_EXPORT void -glmc_vec4_lerp(const vec4 from, const vec4 to, float t, vec4 dest) { +glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { glm_vec4_lerp(from, to, t, dest); } @@ -216,7 +216,7 @@ glmc_vec4_cubic(float s, vec4 dest) { CGLM_EXPORT void -glmc_vec4_mulv(const vec4 a, const vec4 b, vec4 d) { +glmc_vec4_mulv(vec4 a, vec4 b, vec4 d) { glm_vec4_mulv(a, b, d); } @@ -228,72 +228,72 @@ glmc_vec4_broadcast(float val, vec4 d) { CGLM_EXPORT bool -glmc_vec4_eq(const vec4 v, float val) { +glmc_vec4_eq(vec4 v, float val) { return glm_vec4_eq(v, val); } CGLM_EXPORT bool -glmc_vec4_eq_eps(const vec4 v, float val) { +glmc_vec4_eq_eps(vec4 v, float val) { return glm_vec4_eq_eps(v, val); } CGLM_EXPORT bool -glmc_vec4_eq_all(const vec4 v) { +glmc_vec4_eq_all(vec4 v) { return glm_vec4_eq_all(v); } CGLM_EXPORT bool -glmc_vec4_eqv(const vec4 a, const vec4 b) { +glmc_vec4_eqv(vec4 a, vec4 b) { return glm_vec4_eqv(a, b); } CGLM_EXPORT bool -glmc_vec4_eqv_eps(const vec4 a, const vec4 b) { +glmc_vec4_eqv_eps(vec4 a, vec4 b) { return glm_vec4_eqv_eps(a, b); } CGLM_EXPORT float -glmc_vec4_max(const vec4 v) { +glmc_vec4_max(vec4 v) { return glm_vec4_max(v); } CGLM_EXPORT float -glmc_vec4_min(const vec4 v) { +glmc_vec4_min(vec4 v) { return glm_vec4_min(v); } CGLM_EXPORT bool -glmc_vec4_isnan(const vec4 v) { +glmc_vec4_isnan(vec4 v) { return glm_vec4_isnan(v); } CGLM_EXPORT bool -glmc_vec4_isinf(const vec4 v) { +glmc_vec4_isinf(vec4 v) { return glm_vec4_isinf(v); } CGLM_EXPORT bool -glmc_vec4_isvalid(const vec4 v) { +glmc_vec4_isvalid(vec4 v) { return glm_vec4_isvalid(v); } CGLM_EXPORT void -glmc_vec4_sign(const vec4 v, vec4 dest) { +glmc_vec4_sign(vec4 v, vec4 dest) { glm_vec4_sign(v, dest); } CGLM_EXPORT void -glmc_vec4_sqrt(const vec4 v, vec4 dest) { +glmc_vec4_sqrt(vec4 v, vec4 dest) { glm_vec4_sqrt(v, dest); } From d232ab786576d0a6ccb0ab101f312eab8533027c Mon Sep 17 00:00:00 2001 From: yushli Date: Tue, 30 Apr 2019 14:47:20 +0800 Subject: [PATCH 20/56] Update quat.h fix typo --- include/cglm/quat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cglm/quat.h b/include/cglm/quat.h index e6ef0f4..55d1f53 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -233,7 +233,7 @@ glm_quat_normalize_to(const versor q, versor dest) { dot = glm_vec4_norm2(q); if (dot <= 0.0f) { - glm_quat_identity(q); + glm_quat_identity(dest); return; } From 892a7c7dcea88fa3e36f0929376f8b03caa43f7b Mon Sep 17 00:00:00 2001 From: acoto87 Date: Tue, 30 Apr 2019 22:08:17 -0500 Subject: [PATCH 21/56] - add mat3, mat4, sphere.h --- include/cglm/cglms.h | 3 ++ include/cglm/structs/mat3.h | 57 +++++++++++++++++++++ include/cglm/structs/mat4.h | 80 ++++++++++++++++++++++++++++++ include/cglm/structs/sphere.h | 93 +++++++++++++++++++++++++++++++++++ include/cglm/structs/vec4.h | 7 --- 5 files changed, 233 insertions(+), 7 deletions(-) create mode 100644 include/cglm/structs/mat3.h create mode 100644 include/cglm/structs/mat4.h create mode 100644 include/cglm/structs/sphere.h diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h index 9f00dc8..67dbfa4 100644 --- a/include/cglm/cglms.h +++ b/include/cglm/cglms.h @@ -15,6 +15,9 @@ extern "C" { #include "types-struct.h" #include "structs/vec3.h" #include "structs/vec4.h" +#include "structs/mat3.h" +#include "structs/mat4.h" +#include "structs/sphere.h" #ifdef __cplusplus } diff --git a/include/cglm/structs/mat3.h b/include/cglm/structs/mat3.h new file mode 100644 index 0000000..c1d8e48 --- /dev/null +++ b/include/cglm/structs/mat3.h @@ -0,0 +1,57 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/* + Functions: + CGLM_INLINE vec3s glm_mat3_mulv(mat3 m, vec3s v); + CGLM_INLINE float glm_mat3_rmc(vec3s r, mat3 m, vec3s c); + */ + +#ifndef cglm_mat3s_h +#define cglm_mat3s_h + +#include "../common.h" +#include "../types-struct.h" +#include "../mat3.h" +#include "vec3.h" + +/*! + * @brief multiply mat3 with vec3 (column vector) and store in dest vector + * + * @param[in] m mat3 (left) + * @param[in] v vec3 (right, column vector) + * returns vec3 (result, column vector) + */ +CGLM_INLINE +vec3s +glms_mat3_mulv(mat3 m, vec3s v) { + vec3s r; + glm_mat3_mulv(m, v.raw, r.raw); + return r; +} + +/*! + * @brief helper for R (row vector) * M (matrix) * C (column vector) + * + * rmc stands for Row * Matrix * Column + * + * the result is scalar because R * M = Matrix1x3 (row vector), + * then Matrix1x3 * Vec3 (column vector) = Matrix1x1 (Scalar) + * + * @param[in] r row vector or matrix1x3 + * @param[in] m matrix3x3 + * @param[in] c column vector or matrix3x1 + * + * @return scalar value e.g. Matrix1x1 + */ +CGLM_INLINE +float +glms_mat3_rmc(vec3s r, mat3 m, vec3s c) { + return glm_mat3_rmc(r.raw, m, c.raw); +} + +#endif /* cglm_mat3s_h */ diff --git a/include/cglm/structs/mat4.h b/include/cglm/structs/mat4.h new file mode 100644 index 0000000..fc785d7 --- /dev/null +++ b/include/cglm/structs/mat4.h @@ -0,0 +1,80 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/*! + * Most of functions in this header are optimized manually with SIMD + * if available. You dont need to call/incude SIMD headers manually + */ + +/* + Functions: + CGLM_INLINE void glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); + CGLM_INLINE void glm_mat4_mulv3(mat4 m, vec3 v, vec3 dest); + CGLM_INLINE float glm_mat4_rmc(vec4 r, mat4 m, vec4 c); + */ + +#ifndef cglm_mats_h +#define cglm_mats_h + +#include "../common.h" +#include "../types-struct.h" +#include "../mat4.h" +#include "vec4.h" +#include "vec3.h" + +/*! + * @brief multiply mat4 with vec4 (column vector) and store in dest vector + * + * @param[in] m mat4 (left) + * @param[in] v vec4 (right, column vector) + * returns vec4 (result, column vector) + */ +CGLM_INLINE +vec4s +glms_mat4_mulv(mat4 m, vec4s v) { + vec4s r; + glm_mat4_mulv(m, v.raw, r.raw); + return r; +} + +/*! + * @brief multiply vector with mat4 + * + * @param[in] m mat4(affine transform) + * @param[in] v vec3 + * @param[in] last 4th item to make it vec4 + * returns result vector (vec3) + */ +CGLM_INLINE +vec3s +glms_mat4_mulv3(mat4 m, vec3s v, float last) { + vec3s r; + glm_mat4_mulv3(m, v.raw, last, r.raw); + return r; +} + +/*! + * @brief helper for R (row vector) * M (matrix) * C (column vector) + * + * rmc stands for Row * Matrix * Column + * + * the result is scalar because R * M = Matrix1x4 (row vector), + * then Matrix1x4 * Vec4 (column vector) = Matrix1x1 (Scalar) + * + * @param[in] r row vector or matrix1x4 + * @param[in] m matrix4x4 + * @param[in] c column vector or matrix4x1 + * + * @return scalar value e.g. B(s) + */ +CGLM_INLINE +float +glms_mat4_rmc(vec4s r, mat4 m, vec4s c) { + return glm_mat4_rmc(r.raw, m, c.raw); +} + +#endif /* cglm_mats_h */ diff --git a/include/cglm/structs/sphere.h b/include/cglm/structs/sphere.h new file mode 100644 index 0000000..b336c3b --- /dev/null +++ b/include/cglm/structs/sphere.h @@ -0,0 +1,93 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_spheres_h +#define cglm_spheres_h + +#include "../common.h" +#include "../types-struct.h" +#include "../mat4.h" +#include "../sphere.h" + +/* + Sphere Representation in cglm: [center.x, center.y, center.z, radii] + + You could use this representation or you can convert it to vec4 before call + any function + */ + +/*! + * @brief helper for getting sphere radius + * + * @param[in] s sphere + * + * @return returns radii + */ +CGLM_INLINE +float +glms_sphere_radii(vec4s s) { + return glm_sphere_radii(s.raw); +} + +/*! + * @brief apply transform to sphere, it is just wrapper for glm_mat4_mulv3 + * + * @param[in] s sphere + * @param[in] m transform matrix + * @returns transformed sphere + */ +CGLM_INLINE +vec4s +glms_sphere_transform(vec4s s, mat4 m) { + vec4s r; + glm_sphere_transform(s.raw, m, r.raw); + return r; +} + +/*! + * @brief merges two spheres and creates a new one + * + * two sphere must be in same space, for instance if one in world space then + * the other must be in world space too, not in local space. + * + * @param[in] s1 sphere 1 + * @param[in] s2 sphere 2 + * returns merged/extended sphere + */ +CGLM_INLINE +vec4s +glms_sphere_merge(vec4s s1, vec4s s2) { + vec4s r; + glm_sphere_merge(s1.raw, s2.raw, r.raw); + return r; +} + +/*! + * @brief check if two sphere intersects + * + * @param[in] s1 sphere + * @param[in] s2 other sphere + */ +CGLM_INLINE +bool +glms_sphere_sphere(vec4s s1, vec4s s2) { + return glm_sphere_sphere(s1.raw, s2.raw); +} + +/*! + * @brief check if sphere intersects with point + * + * @param[in] s sphere + * @param[in] point point + */ +CGLM_INLINE +bool +glms_sphere_point(vec4s s, vec3s point) { + return glm_sphere_point(s.raw, point.raw); +} + +#endif /* cglm_spheres_h */ diff --git a/include/cglm/structs/vec4.h b/include/cglm/structs/vec4.h index c0a79c3..c8ec509 100644 --- a/include/cglm/structs/vec4.h +++ b/include/cglm/structs/vec4.h @@ -8,10 +8,6 @@ #ifndef cglm_vec4s_h #define cglm_vec4s_h -#ifdef __cplusplus -extern "C" { -#endif - #include "../common.h" #include "../types-struct.h" #include "../util.h" @@ -255,7 +251,4 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) { return r; } -#ifdef __cplusplus -} -#endif #endif /* cglm_vec4s_h */ From 3ff902de9ccaff2a6d8660ff2a5a8254bf9bb3c3 Mon Sep 17 00:00:00 2001 From: acoto87 Date: Fri, 3 May 2019 22:48:13 -0500 Subject: [PATCH 22/56] add mat3 and mat4 implementation --- include/cglm/structs/mat3.h | 263 +++++++++++++++++++++- include/cglm/structs/mat4.h | 427 ++++++++++++++++++++++++++++++++++-- include/cglm/types-struct.h | 60 ++++- 3 files changed, 728 insertions(+), 22 deletions(-) diff --git a/include/cglm/structs/mat3.h b/include/cglm/structs/mat3.h index c1d8e48..63fe7c6 100644 --- a/include/cglm/structs/mat3.h +++ b/include/cglm/structs/mat3.h @@ -6,9 +6,29 @@ */ /* + Macros: + GLMS_MAT3_IDENTITY_INIT + GLMS_MAT3_ZERO_INIT + GLMS_MAT3_IDENTITY + GLMS_MAT3_ZERO + Functions: - CGLM_INLINE vec3s glm_mat3_mulv(mat3 m, vec3s v); - CGLM_INLINE float glm_mat3_rmc(vec3s r, mat3 m, vec3s c); + CGLM_INLINE mat3s glms_mat3_copy(mat3s mat); + CGLM_INLINE mat3s glms_mat3_identity(); + CGLM_INLINE void glms_mat3_identity_array(mat3s * __restrict mat, size_t count); + CGLM_INLINE mat3s glms_mat3_zero(); + CGLM_INLINE mat3s glms_mat3_mul(mat3s m1, mat3s m2); + CGLM_INLINE mat3s glms_mat3_transpose_to(mat3s m); + CGLM_INLINE ma3s glms_mat3_transpose(mat3s m); + CGLM_INLINE vec3s glms_mat3_mulv(mat3s m, vec3s v); + CGLM_INLINE float glms_mat3_trace(mat3s m); + CGLM_INLINE versor glms_mat3_quat(mat3s m); + CGLM_INLINE mat3s glms_mat3_scale(mat3s m, float s); + CGLM_INLINE float glms_mat3_det(mat3s mat); + CGLM_INLINE mat3s glms_mat3_inv(mat3s mat); + CGLM_INLINE mat3s glms_mat3_swap_col(mat3s mat, int col1, int col2); + CGLM_INLINE mat3s glms_mat3_swap_row(mat3s mat, int row1, int row2); + CGLM_INLINE float glms_mat3_rmc(vec3s r, mat3s m, vec3s c); */ #ifndef cglm_mat3s_h @@ -19,21 +39,250 @@ #include "../mat3.h" #include "vec3.h" +#define GLMS_MAT3_IDENTITY_INIT {1.0f, 0.0f, 0.0f, \ + 0.0f, 1.0f, 0.0f, \ + 0.0f, 0.0f, 1.0f} +#define GLMS_MAT3_ZERO_INIT {0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f} + +/* for C only */ +#define GLMS_MAT3_IDENTITY ((mat3s)GLMS_MAT3_IDENTITY_INIT) +#define GLMS_MAT3_ZERO ((mat3s)GLMS_MAT3_ZERO_INIT) + +/*! + * @brief copy all members of [mat] to [dest] + * + * @param[in] mat source + * @returns destination + */ +CGLM_INLINE +mat3s +glms_mat3_copy(mat3s mat) { + mat3s r; + glm_mat3_copy(mat.raw, r.raw); + return r; +} + +/*! + * @brief make given matrix identity. It is identical with below, + * but it is more easy to do that with this func especially for members + * e.g. glm_mat3_identity(aStruct->aMatrix); + * + * @code + * glm_mat3_copy(GLM_MAT3_IDENTITY, mat); // C only + * + * // or + * mat3 mat = GLM_MAT3_IDENTITY_INIT; + * @endcode + * + * @returns destination + */ +CGLM_INLINE +mat3s +glms_mat3_identity() { + mat3s r; + glm_mat3_identity(r.raw); + return r; +} + +/*! + * @brief make given matrix array's each element identity matrix + * + * @param[in, out] mat matrix array (must be aligned (16/32) + * if alignment is not disabled) + * + * @param[in] count count of matrices + */ +CGLM_INLINE +void +glms_mat3_identity_array(mat3s * __restrict mat, size_t count) { + CGLM_ALIGN_MAT mat3s t = GLMS_MAT3_IDENTITY_INIT; + size_t i; + + for (i = 0; i < count; i++) { + glm_mat3_copy(t.raw, mat[i].raw); + } +} + +/*! + * @brief make given matrix zero. + * + * @returns matrix + */ +CGLM_INLINE +mat3s +glms_mat3_zero() { + mat3s r; + glm_mat3_zero(r.raw); + return r; +} + +/*! + * @brief multiply m1 and m2 to dest + * + * m1, m2 and dest matrices can be same matrix, it is possible to write this: + * + * @code + * mat3 m = GLM_MAT3_IDENTITY_INIT; + * glm_mat3_mul(m, m, m); + * @endcode + * + * @param[in] m1 left matrix + * @param[in] m2 right matrix + * @returns destination matrix + */ +CGLM_INLINE +mat3s +glms_mat3_mul(mat3s m1, mat3s m2) { + mat3s r; + glm_mat3_mul(m1.raw, m2.raw, r.raw); + return r; +} + +/*! + * @brief transpose mat3 and store in dest + * + * source matrix will not be transposed unless dest is m + * + * @param[in] m matrix + * @param[out] dest result + */ +CGLM_INLINE +mat3s +glms_mat3_transpose_to(mat3s m) { + mat3s r; + glm_mat3_transpose_to(m.raw, r.raw); + return r; +} + +/*! + * @brief tranpose mat3 and store result in same matrix + * + * @param[in, out] m source and dest + */ +CGLM_INLINE +mat3s +glms_mat3_transpose(mat3s m) { + glm_mat3_transpose(m.raw); + return m; +} + /*! * @brief multiply mat3 with vec3 (column vector) and store in dest vector * * @param[in] m mat3 (left) * @param[in] v vec3 (right, column vector) - * returns vec3 (result, column vector) + * @returns vec3 (result, column vector) */ CGLM_INLINE vec3s -glms_mat3_mulv(mat3 m, vec3s v) { +glms_mat3_mulv(mat3s m, vec3s v) { vec3s r; - glm_mat3_mulv(m, v.raw, r.raw); + glm_mat3_mulv(m.raw, v.raw, r.raw); return r; } +/*! + * @brief trace of matrix + * + * sum of the elements on the main diagonal from upper left to the lower right + * + * @param[in] m matrix + */ +CGLM_INLINE +float +glms_mat3_trace(mat3s m) { + return glm_mat3_trace(m.raw); +} + +/*! + * @brief convert mat3 to quaternion + * + * @param[in] m rotation matrix + * @returns destination quaternion + */ +CGLM_INLINE +versors +glms_mat3_quat(mat3s m) { + versors r; + glm_mat3_quat(m.raw, r.raw); + return r; +} + +/*! + * @brief scale (multiply with scalar) matrix + * + * multiply matrix with scalar + * + * @param[in] m matrix + * @param[in] s scalar + * @returns scaled matrix + */ +CGLM_INLINE +mat3s +glms_mat3_scale(mat3s m, float s) { + glm_mat3_scale(m.raw, s); + return m; +} + +/*! + * @brief mat3 determinant + * + * @param[in] mat matrix + * + * @return determinant + */ +CGLM_INLINE +float +glms_mat3_det(mat3s mat) { + return glm_mat3_det(mat.raw); +} + +/*! + * @brief inverse mat3 and store in dest + * + * @param[in] mat matrix + * @returns inverse matrix + */ +CGLM_INLINE +mat3s +glms_mat3_inv(mat3s mat) { + mat3s r; + glm_mat3_inv(mat.raw, r.raw); + return r; +} + +/*! + * @brief swap two matrix columns + * + * @param[in] mat matrix + * @param[in] col1 col1 + * @param[in] col2 col2 + * @returns matrix + */ +CGLM_INLINE +mat3s +glms_mat3_swap_col(mat3s mat, int col1, int col2) { + glm_mat3_swap_col(mat.raw, col1, col2); + return mat; +} + +/*! + * @brief swap two matrix rows + * + * @param[in] mat matrix + * @param[in] row1 row1 + * @param[in] row2 row2 + * @returns matrix + */ +CGLM_INLINE +mat3s +glms_mat3_swap_row(mat3s mat, int row1, int row2) { + glm_mat3_swap_row(mat.raw, row1, row2); + return mat; +} + /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) * @@ -50,8 +299,8 @@ glms_mat3_mulv(mat3 m, vec3s v) { */ CGLM_INLINE float -glms_mat3_rmc(vec3s r, mat3 m, vec3s c) { - return glm_mat3_rmc(r.raw, m, c.raw); +glms_mat3_rmc(vec3s r, mat3s m, vec3s c) { + return glm_mat3_rmc(r.raw, m.raw, c.raw); } #endif /* cglm_mat3s_h */ diff --git a/include/cglm/structs/mat4.h b/include/cglm/structs/mat4.h index fc785d7..a61f18d 100644 --- a/include/cglm/structs/mat4.h +++ b/include/cglm/structs/mat4.h @@ -11,14 +11,42 @@ */ /* + Macros: + GLMS_MAT4_IDENTITY_INIT + GLMS_MAT4_ZERO_INIT + GLMS_MAT4_IDENTITY + GLMS_MAT4_ZERO + Functions: - CGLM_INLINE void glm_mat4_mulv(mat4 m, vec4 v, vec4 dest); - CGLM_INLINE void glm_mat4_mulv3(mat4 m, vec3 v, vec3 dest); - CGLM_INLINE float glm_mat4_rmc(vec4 r, mat4 m, vec4 c); + CGLM_INLINE mat4s glms_mat4_ucopy(mat4s mat); + CGLM_INLINE mat4s glms_mat4_copy(mat4s mat); + CGLM_INLINE mat4s glms_mat4_identity(); + CGLM_INLINE void glms_mat4_identity_array(mat4s * __restrict mat, size_t count); + CGLM_INLINE mat4s glms_mat4_zero(); + CGLM_INLINE mat3s glms_mat4_pick3(mat4s mat); + CGLM_INLINE mat3s glms_mat4_pick3t(mat4s mat); + CGLM_INLINE mat4s glms_mat4_ins3(mat3s mat); + CGLM_INLINE mat4s glms_mat4_mul(mat4s m1, mat4s m2); + CGLM_INLINE mat4s glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len); + CGLM_INLINE vec4s glms_mat4_mulv(mat4s m, vec4s v); + CGLM_INLINE float glms_mat4_trace(mat4s m); + CGLM_INLINE float glms_mat4_trace3(mat4s m); + CGLM_INLINE versors glms_mat4_quat(mat4s m); + CGLM_INLINE vec3s glms_mat4_mulv3(mat4s m, vec3s v, float last); + CGLM_INLINE mat4s glms_mat4_transpose_to(mat4s m); + CGLM_INLINE mat4s glms_mat4_transpose(mat4s m); + CGLM_INLINE mat4s glms_mat4_scale_p(mat4s m, float s); + CGLM_INLINE mat4s glms_mat4_scale(mat4s m, float s); + CGLM_INLINE float glms_mat4_det(mat4s mat); + CGLM_INLINE mat4s glms_mat4_inv(mat4s mat); + CGLM_INLINE mat4s glms_mat4_inv_fast(mat4s mat); + CGLM_INLINE mat4s glms_mat4_swap_col(mat4s mat, int col1, int col2); + CGLM_INLINE mat4s glms_mat4_swap_row(mat4s mat, int row1, int row2); + CGLM_INLINE float glms_mat4_rmc(vec4s r, mat4s m, vec4s c); */ -#ifndef cglm_mats_h -#define cglm_mats_h +#ifndef cglm_mat4s_h +#define cglm_mat4s_h #include "../common.h" #include "../types-struct.h" @@ -26,18 +54,250 @@ #include "vec4.h" #include "vec3.h" +#define GLMS_MAT4_IDENTITY_INIT {{1.0f, 0.0f, 0.0f, 0.0f}, \ + {0.0f, 1.0f, 0.0f, 0.0f}, \ + {0.0f, 0.0f, 1.0f, 0.0f}, \ + {0.0f, 0.0f, 0.0f, 1.0f}} + +#define GLMS_MAT4_ZERO_INIT {{0.0f, 0.0f, 0.0f, 0.0f}, \ + {0.0f, 0.0f, 0.0f, 0.0f}, \ + {0.0f, 0.0f, 0.0f, 0.0f}, \ + {0.0f, 0.0f, 0.0f, 0.0f}} + +/* for C only */ +#define GLMS_MAT4_IDENTITY ((mat4)GLMS_MAT4_IDENTITY_INIT) +#define GLMS_MAT4_ZERO ((mat4)GLMS_MAT4_ZERO_INIT) + +/*! + * @brief copy all members of [mat] to [dest] + * + * matrix may not be aligned, u stands for unaligned, this may be useful when + * copying a matrix from external source e.g. asset importer... + * + * @param[in] mat source + * @returns destination + */ +CGLM_INLINE +mat4s +glms_mat4_ucopy(mat4s mat) { + mat4s r; + glm_mat4_ucopy(mat.raw, r.raw); + return r; +} + +/*! + * @brief copy all members of [mat] to [dest] + * + * @param[in] mat source + * @returns destination + */ +CGLM_INLINE +mat4s +glms_mat4_copy(mat4s mat) { + mat4s r; + glm_mat4_copy(mat.raw, r.raw); + return r; +} + +/*! + * @brief make given matrix identity. It is identical with below, + * but it is more easy to do that with this func especially for members + * e.g. glm_mat4_identity(aStruct->aMatrix); + * + * @code + * glm_mat4_copy(GLM_MAT4_IDENTITY, mat); // C only + * + * // or + * mat4 mat = GLM_MAT4_IDENTITY_INIT; + * @endcode + * + * @retuns destination + */ +CGLM_INLINE +mat4s +glms_mat4_identity() { + mat4s r; + glm_mat4_identity(r.raw); + return r; +} + +/*! + * @brief make given matrix array's each element identity matrix + * + * @param[in, out] mat matrix array (must be aligned (16/32) + * if alignment is not disabled) + * + * @param[in] count count of matrices + */ +CGLM_INLINE +void +glms_mat4_identity_array(mat4s * __restrict mat, size_t count) { + CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; + size_t i; + + for (i = 0; i < count; i++) { + glm_mat4_copy(t.raw, mat[i].raw); + } +} + +/*! + * @brief make given matrix zero. + * + * @returns matrix + */ +CGLM_INLINE +mat4s +glms_mat4_zero() { + mat4s r; + glm_mat4_zero(r.raw); + return r; +} + +/*! + * @brief copy upper-left of mat4 to mat3 + * + * @param[in] mat source + * @returns destination + */ +CGLM_INLINE +mat3s +glms_mat4_pick3(mat4s mat) { + mat3s r; + glm_mat4_pick3(mat.raw, r.raw); + return r; +} + +/*! + * @brief copy upper-left of mat4 to mat3 (transposed) + * + * the postfix t stands for transpose + * + * @param[in] mat source + * @returns destination + */ +CGLM_INLINE +mat3s +glms_mat4_pick3t(mat4s mat) { + mat3s r; + glm_mat4_pick3t(mat.raw, r.raw); + return r; +} + +/*! + * @brief copy mat3 to mat4's upper-left + * + * @param[in] mat source + * @returns destination + */ +CGLM_INLINE +mat4s +glms_mat4_ins3(mat3s mat) { + mat4s r; + glm_mat4_ins3(mat.raw, r.raw); + return r; +} + +/*! + * @brief multiply m1 and m2 to dest + * + * m1, m2 and dest matrices can be same matrix, it is possible to write this: + * + * @code + * mat4 m = GLM_MAT4_IDENTITY_INIT; + * glm_mat4_mul(m, m, m); + * @endcode + * + * @param[in] m1 left matrix + * @param[in] m2 right matrix + * @returns destination matrix + */ +CGLM_INLINE +mat4s +glms_mat4_mul(mat4s m1, mat4s m2) { + mat4s r; + glm_mat4_mul(m1.raw, m2.raw, r.raw); + return r; +} + +/*! + * @brief mupliply N mat4 matrices and store result in dest + * + * this function lets you multiply multiple (more than two or more...) matrices + *

multiplication will be done in loop, this may reduce instructions + * size but if len is too small then compiler may unroll whole loop, + * usage: + * @code + * mat m1, m2, m3, m4, res; + * + * glm_mat4_mulN((mat4 *[]){&m1, &m2, &m3, &m4}, 4, res); + * @endcode + * + * @warning matrices parameter is pointer array not mat4 array! + * + * @param[in] matrices mat4 * array + * @param[in] len matrices count + * @returns result + */ +CGLM_INLINE +mat4s +glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { + mat4s r; + glm_mat4_mulN(matrices, len, r.raw); + return r; +} + /*! * @brief multiply mat4 with vec4 (column vector) and store in dest vector * * @param[in] m mat4 (left) * @param[in] v vec4 (right, column vector) - * returns vec4 (result, column vector) + * @returns vec4 (result, column vector) */ CGLM_INLINE vec4s -glms_mat4_mulv(mat4 m, vec4s v) { +glms_mat4_mulv(mat4s m, vec4s v) { vec4s r; - glm_mat4_mulv(m, v.raw, r.raw); + glm_mat4_mulv(m.raw, v.raw, r.raw); + return r; +} + +/*! + * @brief trace of matrix + * + * sum of the elements on the main diagonal from upper left to the lower right + * + * @param[in] m matrix + */ +CGLM_INLINE +float +glms_mat4_trace(mat4s m) { + return glm_mat4_trace(m.raw); +} + +/*! + * @brief trace of matrix (rotation part) + * + * sum of the elements on the main diagonal from upper left to the lower right + * + * @param[in] m matrix + */ +CGLM_INLINE +float +glms_mat4_trace3(mat4s m) { + return glm_mat4_trace3(m.raw); +} + +/*! + * @brief convert mat4's rotation part to quaternion + * + * @param[in] m affine matrix + * @returns destination quaternion + */ +CGLM_INLINE +versors +glms_mat4_quat(mat4s m) { + versors r; + glm_mat4_quat(m.raw, r.raw); return r; } @@ -47,16 +307,154 @@ glms_mat4_mulv(mat4 m, vec4s v) { * @param[in] m mat4(affine transform) * @param[in] v vec3 * @param[in] last 4th item to make it vec4 - * returns result vector (vec3) + * @returns result vector (vec3) */ CGLM_INLINE vec3s -glms_mat4_mulv3(mat4 m, vec3s v, float last) { +glms_mat4_mulv3(mat4s m, vec3s v, float last) { vec3s r; - glm_mat4_mulv3(m, v.raw, last, r.raw); + glm_mat4_mulv3(m.raw, v.raw, last, r.raw); return r; } +/*! + * @brief transpose mat4 and store in dest + * + * source matrix will not be transposed unless dest is m + * + * @param[in] m matrix + * @returns result + */ +CGLM_INLINE +mat4s +glms_mat4_transpose_to(mat4s m) { + mat4s r; + glm_mat4_transpose_to(m.raw, r.raw); + return r; +} + +/*! + * @brief tranpose mat4 and store result in same matrix + * + * @param[in] m source + * @returns result + */ +CGLM_INLINE +mat4s +glms_mat4_transpose(mat4s m) { + glm_mat4_transpose(m.raw); + return m; +} + +/*! + * @brief scale (multiply with scalar) matrix without simd optimization + * + * multiply matrix with scalar + * + * @param[in] m matrix + * @param[in] s scalar + * @returns matrix + */ +CGLM_INLINE +mat4s +glms_mat4_scale_p(mat4s m, float s) { + glm_mat4_scale_p(m.raw, s); + return m; +} + +/*! + * @brief scale (multiply with scalar) matrix + * + * multiply matrix with scalar + * + * @param[in] m matrix + * @param[in] s scalar + * @returns matrix + */ +CGLM_INLINE +mat4s +glms_mat4_scale(mat4s m, float s) { + glm_mat4_scale(m.raw, s); + return m; +} + +/*! + * @brief mat4 determinant + * + * @param[in] mat matrix + * + * @return determinant + */ +CGLM_INLINE +float +glms_mat4_det(mat4s mat) { + return glm_mat4_det(mat.raw); +} + +/*! + * @brief inverse mat4 and store in dest + * + * @param[in] mat matrix + * @returns inverse matrix + */ +CGLM_INLINE +mat4s +glms_mat4_inv(mat4s mat) { + mat4s r; + glm_mat4_inv(mat.raw, r.raw); + return r; +} + +/*! + * @brief inverse mat4 and store in dest + * + * this func uses reciprocal approximation without extra corrections + * e.g Newton-Raphson. this should work faster than normal, + * to get more precise use glm_mat4_inv version. + * + * NOTE: You will lose precision, glm_mat4_inv is more accurate + * + * @param[in] mat matrix + * @returns inverse matrix + */ +CGLM_INLINE +mat4s +glms_mat4_inv_fast(mat4s mat) { + mat4s r; + glm_mat4_inv_fast(mat.raw, r.raw); + return r; +} + +/*! + * @brief swap two matrix columns + * + * @param[in] mat matrix + * @param[in] col1 col1 + * @param[in] col2 col2 + * @returns matrix + */ +CGLM_INLINE +mat4s +glms_mat4_swap_col(mat4s mat, int col1, int col2) { + glm_mat4_swap_col(mat.raw, col1, col2); + return mat; +} + +/*! + * @brief swap two matrix rows + * + * @param[in] mat matrix + * @param[in] row1 row1 + * @param[in] row2 row2 + * @returns matrix + */ +CGLM_INLINE +mat4s +glms_mat4_swap_row(mat4s mat, int row1, int row2) { + glm_mat4_swap_row(mat.raw, row1, row2); + return mat; +} + /*! * @brief helper for R (row vector) * M (matrix) * C (column vector) * @@ -73,8 +471,9 @@ glms_mat4_mulv3(mat4 m, vec3s v, float last) { */ CGLM_INLINE float -glms_mat4_rmc(vec4s r, mat4 m, vec4s c) { - return glm_mat4_rmc(r.raw, m, c.raw); +glms_mat4_rmc(vec4s r, mat4s m, vec4s c) { + return glm_mat4_rmc(r.raw, m.raw, c.raw); } -#endif /* cglm_mats_h */ +#endif /* cglm_mat4s_h */ + \ No newline at end of file diff --git a/include/cglm/types-struct.h b/include/cglm/types-struct.h index 27e04fe..13431aa 100644 --- a/include/cglm/types-struct.h +++ b/include/cglm/types-struct.h @@ -10,7 +10,7 @@ #include "types.h" -typedef union CGLM_ALIGN_IF(16) vec3s { +typedef union vec3s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { float x; @@ -33,4 +33,62 @@ typedef union CGLM_ALIGN_IF(16) vec4s { vec4 raw; } vec4s; +typedef vec4s versors; + +typedef union mat3s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float m00; + float m01; + float m02; + float m10; + float m11; + float m12; + float m20; + float m21; + float m22; + }; + struct { + vec3s col0; + vec3s col1; + vec3s col2; + }; +#endif + mat3 raw; +} mat3s; + +#ifdef __AVX__ +typedef union CGLM_ALIGN_IF(32) mat4s { +#else +typedef union CGLM_ALIGN_IF(16) mat4s { +#endif +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float m00; + float m01; + float m02; + float m03; + float m10; + float m11; + float m12; + float m13; + float m20; + float m21; + float m22; + float m23; + float m30; + float m31; + float m32; + float m33; + }; + struct { + vec4s col0; + vec4s col1; + vec4s col2; + vec4s col3; + }; +#endif + mat4 raw; +} mat4s; + #endif /* cglm_types_struct_h */ From bc1969ab75b47d7dac9e11f387a195b6fcaa41e1 Mon Sep 17 00:00:00 2001 From: acoto87 Date: Tue, 7 May 2019 16:16:00 -0500 Subject: [PATCH 23/56] - Changes in `mat3s` and `mat4s` types. - Added `ivec3s` type - Struct implementation of: affine.h, box.h, color.h, curve.h, frutum.h, io.h, plane.h, project.h - Deleted `glms_mat3_transpose_to` and `glms_mat4_transpose_to` - Bug fixes in mat4.h --- include/cglm/frustum.h | 2 +- include/cglm/plane.h | 2 +- include/cglm/structs/affine.h | 343 +++++++++++++++++++++++++++++++++ include/cglm/structs/box.h | 285 +++++++++++++++++++++++++++ include/cglm/structs/color.h | 27 +++ include/cglm/structs/curve.h | 40 ++++ include/cglm/structs/frustum.h | 240 +++++++++++++++++++++++ include/cglm/structs/io.h | 100 ++++++++++ include/cglm/structs/mat3.h | 17 -- include/cglm/structs/mat4.h | 52 ++--- include/cglm/structs/plane.h | 40 ++++ include/cglm/structs/project.h | 104 ++++++++++ include/cglm/structs/sphere.h | 2 +- include/cglm/types-struct.h | 51 ++--- 14 files changed, 1223 insertions(+), 82 deletions(-) create mode 100644 include/cglm/structs/affine.h create mode 100644 include/cglm/structs/box.h create mode 100644 include/cglm/structs/color.h create mode 100644 include/cglm/structs/curve.h create mode 100644 include/cglm/structs/frustum.h create mode 100644 include/cglm/structs/io.h create mode 100644 include/cglm/structs/plane.h create mode 100644 include/cglm/structs/project.h diff --git a/include/cglm/frustum.h b/include/cglm/frustum.h index 78b39d2..5aa3c17 100644 --- a/include/cglm/frustum.h +++ b/include/cglm/frustum.h @@ -65,7 +65,7 @@ * Exracted planes order: [left, right, bottom, top, near, far] * * @param[in] m matrix (see brief) - * @param[out] dest exracted view frustum planes (see brief) + * @param[out] dest extracted view frustum planes (see brief) */ CGLM_INLINE void diff --git a/include/cglm/plane.h b/include/cglm/plane.h index 48fe879..7a5291d 100644 --- a/include/cglm/plane.h +++ b/include/cglm/plane.h @@ -25,7 +25,7 @@ /*! * @brief normalizes a plane * - * @param[in, out] plane pnale to normalize + * @param[in, out] plane plane to normalize */ CGLM_INLINE void diff --git a/include/cglm/structs/affine.h b/include/cglm/structs/affine.h new file mode 100644 index 0000000..6f8be48 --- /dev/null +++ b/include/cglm/structs/affine.h @@ -0,0 +1,343 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/* + Functions: + CGLM_INLINE mat4s glms_translate(mat4s m, vec3s v); + CGLM_INLINE mat4s glms_translate_x(mat4s m, float x); + CGLM_INLINE mat4s glms_translate_y(mat4s m, float y); + CGLM_INLINE mat4s glms_translate_z(mat4s m, float z); + CGLM_INLINE mat4s glms_translate_make(vec3s v); + CGLM_INLINE mat4s glms_scale_to(mat4s m, vec3s v); + CGLM_INLINE mat4s glms_scale_make(vec3s v); + CGLM_INLINE mat4s glms_scale(mat4s m, vec3s v); + CGLM_INLINE mat4s glms_scale_uni(mat4s m, float s); + CGLM_INLINE mat4s glmx_rotate_x(mat4s m, float angle); + CGLM_INLINE mat4s glms_rotate_y(mat4s m, float angle); + CGLM_INLINE mat4s glms_rotate_z(mat4s m, float angle); + CGLM_INLINE mat4s glms_rotate_make(float angle, vec3s axis); + CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis); + CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis); + CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis); + CGLM_INLINE vec3s glms_decompose_scalev(mat4s m); + CGLM_INLINE bool glms_uniscaled(mat4s m); + CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s r, vec3s s); + CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s r, vec3s s); + */ + +#ifndef cglm_affines_h +#define cglm_affines_h + +#include "../common.h" +#include "../types-struct.h" +#include "../affine.h" +#include "vec3.h" +#include "vec4.h" +#include "mat4.h" + +CGLM_INLINE +mat4s +glms_mat4_mul(mat4s m1, mat4s m2); + +/*! + * @brief translate existing transform matrix by v vector + * and stores result in same matrix + * + * @param[in] m affine transfrom + * @param[in] v translate vector [x, y, z] + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_translate(mat4s m, vec3s v) { + glm_translate(m.raw, v.raw); + return m; +} + +/*! + * @brief translate existing transform matrix by x factor + * + * @param[in] m affine transfrom + * @param[in] x x factor + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_translate_x(mat4s m, float x) { + glm_translate_x(m.raw, x); + return m; +} + +/*! + * @brief translate existing transform matrix by y factor + * + * @param[in] m affine transfrom + * @param[in] y y factor + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_translate_y(mat4s m, float y) { + glm_translate_y(m.raw, y); + return m; +} + +/*! + * @brief translate existing transform matrix by z factor + * + * @param[in] m affine transfrom + * @param[in] z z factor + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_translate_z(mat4s m, float z) { + glm_translate_z(m.raw, z); + return m; +} + +/*! + * @brief creates NEW translate transform matrix by v vector + * + * @param[in] v translate vector [x, y, z] + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_translate_make(vec3s v) { + mat4s m; + glm_translate_make(m.raw, v.raw); + return m; +} + +/*! + * @brief creates NEW scale matrix by v vector + * + * @param[out] m affine transfrom + * @param[in] v scale vector [x, y, z] + */ +CGLM_INLINE +mat4s +glms_scale_make(vec3s v) { + mat4s m; + glm_scale_make(m.raw, v.raw); + return m; +} + +/*! + * @brief scales existing transform matrix by v vector + * and stores result in same matrix + * + * @param[in] m affine transfrom + * @param[in] v scale vector [x, y, z] + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_scale(mat4s m, vec3s v) { + mat4s r; + glm_scale_to(m.raw, v.raw, r.raw); + return r; +} + +/*! + * @brief applies uniform scale to existing transform matrix v = [s, s, s] + * and stores result in same matrix + * + * @param[in] m affine transfrom + * @param[in] s scale factor + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_scale_uni(mat4s m, float s) { + glm_scale_uni(m.raw, s); + return m; +} + +/*! + * @brief rotate existing transform matrix around X axis by angle + * and store result in dest + * + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @returns rotated matrix + */ +CGLM_INLINE +mat4s +glmx_rotate_x(mat4s m, float angle) { + mat4s r; + glm_rotate_x(m.raw, angle, r.raw); + return r; +} + +/*! + * @brief rotate existing transform matrix around Y axis by angle + * and store result in dest + * + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @returns rotated matrix + */ +CGLM_INLINE +mat4s +glms_rotate_y(mat4s m, float angle) { + mat4s r; + glm_rotate_y(m.raw, angle, r.raw); + return r; +} + +/*! + * @brief rotate existing transform matrix around Z axis by angle + * and store result in dest + * + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @returns rotated matrix + */ +CGLM_INLINE +mat4s +glms_rotate_z(mat4s m, float angle) { + mat4s r; + glm_rotate_z(m.raw, angle, r.raw); + return r; +} + +/*! + * @brief creates NEW rotation matrix by angle and axis + * + * axis will be normalized so you don't need to normalize it + * + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_rotate_make(float angle, vec3s axis) { + mat4s m; + glm_rotate_make(m.raw, angle, axis.raw); + return m; +} + +/*! + * @brief rotate existing transform matrix around given axis by angle + * + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_rotate(mat4s m, float angle, vec3s axis) { + glm_rotate(m.raw, angle, axis.raw); + return m; +} + +/*! + * @brief rotate existing transform + * around given axis by angle at given pivot point (rotation center) + * + * @param[in] m affine transfrom + * @param[in] pivot rotation center + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) { + glm_rotate_at(m.raw, pivot.raw, angle, axis.raw); + return m; +} + +/*! + * @brief creates NEW rotation matrix by angle and axis at given point + * + * this creates rotation matrix, it assumes you don't have a matrix + * + * this should work faster than glm_rotate_at because it reduces + * one glm_translate. + * + * @param[in] m affine transfrom + * @param[in] pivot rotation center + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom + */ +CGLM_INLINE +mat4s +glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) { + glm_rotate_atm(m.raw, pivot.raw, angle, axis.raw); + return m; +} + +/*! + * @brief decompose scale vector + * + * @param[in] m affine transform + * @returns scale vector (Sx, Sy, Sz) + */ +CGLM_INLINE +vec3s +glms_decompose_scalev(mat4s m) { + mat3s m3x3; + vec3s s; + + m3x3 = glms_mat4_pick3(m); + + s.x = glms_vec3_norm(m3x3.col[0]); + s.y = glms_vec3_norm(m3x3.col[1]); + s.z = glms_vec3_norm(m3x3.col[2]); + return s; +} + +/*! + * @brief returns true if matrix is uniform scaled. This is helpful for + * creating normal matrix. + * + * @param[in] m m + * + * @return boolean + */ +CGLM_INLINE +bool +glms_uniscaled(mat4s m) { + return glm_uniscaled(m.raw); +} + +/*! + * @brief decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz] + * DON'T pass projected matrix here + * + * @param[in] m affine transform + * @param[out] r rotation matrix + * @param[out] s scale matrix + */ +CGLM_INLINE +void +glms_decompose_rs(mat4s m, mat4s r, vec3s s) { + glm_decompose_rs(m.raw, r.raw, s.raw); +} + +/*! + * @brief decompose affine transform, TODO: extract shear factors. + * DON'T pass projected matrix here + * + * @param[in] m affine transfrom + * @param[out] t translation vector + * @param[out] r rotation matrix (mat4) + * @param[out] s scaling vector [X, Y, Z] + */ +CGLM_INLINE +void +glms_decompose(mat4s m, vec4s t, mat4s r, vec3s s) { + glm_decompose(m.raw, t.raw, r.raw, s.raw); +} + +#endif /* cglm_affines_h */ diff --git a/include/cglm/structs/box.h b/include/cglm/structs/box.h new file mode 100644 index 0000000..e9c813f --- /dev/null +++ b/include/cglm/structs/box.h @@ -0,0 +1,285 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_boxs_h +#define cglm_boxs_h + +#include "../common.h" +#include "../types-struct.h" +#include "../box.h" +#include "vec3.h" +#include "vec4.h" +#include "mat4.h" + +/*! + * @brief apply transform to Axis-Aligned Bounding Box + * + * @param[in] box bounding box + * @param[in] m transform matrix + * @param[out] dest transformed bounding box + */ +CGLM_INLINE +void +glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { + vec3s v[2], xa, xb, ya, yb, za, zb; + mat3s m3x3; + + m3x3 = glms_mat4_pick3(m); + + xa = glms_vec3_scale(m3x3.col[0], box[0].x); + xb = glms_vec3_scale(m3x3.col[0], box[1].x); + + ya = glms_vec3_scale(m3x3.col[1], box[0].y); + yb = glms_vec3_scale(m3x3.col[1], box[1].y); + + za = glms_vec3_scale(m3x3.col[2], box[0].z); + zb = glms_vec3_scale(m3x3.col[2], box[1].z); + + /* translation + min(xa, xb) + min(ya, yb) + min(za, zb) */ + v[0] = m3x3.col[3]; + v[0] = glms_vec3_minadd(xa, xb); + v[0] = glms_vec3_minadd(ya, yb); + v[0] = glms_vec3_minadd(za, zb); + + /* translation + max(xa, xb) + max(ya, yb) + max(za, zb) */ + v[1] = m3x3.col[3]; + v[1] = glms_vec3_maxadd(xa, xb); + v[1] = glms_vec3_maxadd(ya, yb); + v[1] = glms_vec3_maxadd(za, zb); + + dest[0] = glms_vec3_copy(v[0]); + dest[1] = glms_vec3_copy(v[1]); +} + +/*! + * @brief merges two AABB bounding box and creates new one + * + * two box must be in same space, if one of box is in different space then + * you should consider to convert it's space by glm_box_space + * + * @param[in] box1 bounding box 1 + * @param[in] box2 bounding box 2 + * @param[out] dest merged bounding box + */ +CGLM_INLINE +void +glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { + dest[0].x = glm_min(box1[0].x, box2[0].x); + dest[0].y = glm_min(box1[0].y, box2[0].y); + dest[0].z = glm_min(box1[0].z, box2[0].z); + + dest[1].x = glm_max(box1[1].x, box2[1].x); + dest[1].y = glm_max(box1[1].y, box2[1].y); + dest[1].z = glm_max(box1[1].z, box2[1].z); +} + +/*! + * @brief crops a bounding box with another one. + * + * this could be useful for gettng a bbox which fits with view frustum and + * object bounding boxes. In this case you crop view frustum box with objects + * box + * + * @param[in] box bounding box 1 + * @param[in] cropBox crop box + * @param[out] dest cropped bounding box + */ +CGLM_INLINE +void +glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) { + dest[0].x = glm_max(box[0].x, cropBox[0].x); + dest[0].y = glm_max(box[0].y, cropBox[0].y); + dest[0].z = glm_max(box[0].z, cropBox[0].z); + + dest[1].x = glm_min(box[1].x, cropBox[1].x); + dest[1].y = glm_min(box[1].y, cropBox[1].y); + dest[1].z = glm_min(box[1].z, cropBox[1].z); +} + +/*! + * @brief crops a bounding box with another one. + * + * this could be useful for gettng a bbox which fits with view frustum and + * object bounding boxes. In this case you crop view frustum box with objects + * box + * + * @param[in] box bounding box + * @param[in] cropBox crop box + * @param[in] clampBox miniumum box + * @param[out] dest cropped bounding box + */ +CGLM_INLINE +void +glms_aabb_crop_until(vec3s box[2], + vec3s cropBox[2], + vec3s clampBox[2], + vec3s dest[2]) { + glms_aabb_crop(box, cropBox, dest); + glms_aabb_merge(clampBox, dest, dest); +} + +/*! + * @brief check if AABB intersects with frustum planes + * + * this could be useful for frustum culling using AABB. + * + * OPTIMIZATION HINT: + * if planes order is similar to LEFT, RIGHT, BOTTOM, TOP, NEAR, FAR + * then this method should run even faster because it would only use two + * planes if object is not inside the two planes + * fortunately cglm extracts planes as this order! just pass what you got! + * + * @param[in] box bounding box + * @param[in] planes frustum planes + */ +CGLM_INLINE +bool +glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { + vec4s p; + float dp; + int i; + + for (i = 0; i < 6; i++) { + p = planes[i]; + dp = p.x * box[p.x > 0.0f].x + + p.y * box[p.y > 0.0f].y + + p.z * box[p.z > 0.0f].z; + + if (dp < -p.w) + return false; + } + + return true; +} + +/*! + * @brief invalidate AABB min and max values + * + * @param[in, out] box bounding box + */ +CGLM_INLINE +void +glms_aabb_invalidate(vec3s box[2]) { + box[0] = glms_vec3_broadcast(FLT_MAX); + box[1] = glms_vec3_broadcast(-FLT_MAX); +} + +/*! + * @brief check if AABB is valid or not + * + * @param[in] box bounding box + */ +CGLM_INLINE +bool +glms_aabb_isvalid(vec3s box[2]) { + return glms_vec3_max(box[0]) != FLT_MAX && + glms_vec3_min(box[1]) != -FLT_MAX; +} + +/*! + * @brief distance between of min and max + * + * @param[in] box bounding box + */ +CGLM_INLINE +float +glms_aabb_size(vec3s box[2]) { + return glms_vec3_distance(box[0], box[1]); +} + +/*! + * @brief radius of sphere which surrounds AABB + * + * @param[in] box bounding box + */ +CGLM_INLINE +float +glms_aabb_radius(vec3s box[2]) { + return glms_aabb_size(box) * 0.5f; +} + +/*! + * @brief computes center point of AABB + * + * @param[in] box bounding box + * @param[out] dest center of bounding box + */ +CGLM_INLINE +vec3s +glms_aabb_center(vec3s box[2]) { + return glms_vec3_center(box[0], box[1]); +} + +/*! + * @brief check if two AABB intersects + * + * @param[in] box bounding box + * @param[in] other other bounding box + */ +CGLM_INLINE +bool +glms_aabb_aabb(vec3s box[2], vec3s other[2]) { + return (box[0].x <= other[1].x && box[1].x >= other[0].x) + && (box[0].y <= other[1].y && box[1].y >= other[0].y) + && (box[0].z <= other[1].z && box[1].z >= other[0].z); +} + +/*! + * @brief check if AABB intersects with sphere + * + * https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c + * Solid Box - Solid Sphere test. + * + * @param[in] box solid bounding box + * @param[in] s solid sphere + */ +CGLM_INLINE +bool +glms_aabb_sphere(vec3s box[2], vec4 s) { + float dmin; + int a, b, c; + + a = s[0] >= box[0].x; + b = s[1] >= box[0].y; + c = s[2] >= box[0].z; + + dmin = glm_pow2(s[0] - box[a].x) + + glm_pow2(s[1] - box[b].y) + + glm_pow2(s[2] - box[c].z); + + return dmin <= glm_pow2(s[3]); +} + +/*! + * @brief check if point is inside of AABB + * + * @param[in] box bounding box + * @param[in] point point + */ +CGLM_INLINE +bool +glms_aabb_point(vec3s box[2], vec3s point) { + return (point.x >= box[0].x && point.x <= box[1].x) + && (point.y >= box[0].y && point.y <= box[1].y) + && (point.z >= box[0].z && point.z <= box[1].z); +} + +/*! + * @brief check if AABB contains other AABB + * + * @param[in] box bounding box + * @param[in] other other bounding box + */ +CGLM_INLINE +bool +glms_aabb_contains(vec3s box[2], vec3s other[2]) { + return (box[0].x <= other[0].x && box[1].x >= other[1].x) + && (box[0].y <= other[0].y && box[1].y >= other[1].y) + && (box[0].z <= other[0].z && box[1].z >= other[1].z); +} + +#endif /* cglm_boxs_h */ diff --git a/include/cglm/structs/color.h b/include/cglm/structs/color.h new file mode 100644 index 0000000..62cf5a8 --- /dev/null +++ b/include/cglm/structs/color.h @@ -0,0 +1,27 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_colors_h +#define cglm_colors_h + +#include "../common.h" +#include "../types-struct.h" +#include "../color.h" +#include "vec3.h" + +/*! + * @brief averages the color channels into one value + * + * @param[in] rgb RGB color + */ +CGLM_INLINE +float +glms_luminance(vec3s rgb) { + return glm_luminance(rgb.raw); +} + +#endif /* cglm_colors_h */ diff --git a/include/cglm/structs/curve.h b/include/cglm/structs/curve.h new file mode 100644 index 0000000..724b0be --- /dev/null +++ b/include/cglm/structs/curve.h @@ -0,0 +1,40 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_curves_h +#define cglm_curves_h + +#include "../common.h" +#include "../types-struct.h" +#include "../curve.h" +#include "vec4.h" +#include "mat4.h" + +/*! + * @brief helper function to calculate S*M*C multiplication for curves + * + * This function does not encourage you to use SMC, + * instead it is a helper if you use SMC. + * + * if you want to specify S as vector then use more generic glm_mat4_rmc() func. + * + * Example usage: + * B(s) = glm_smc(s, GLM_BEZIER_MAT, (vec4){p0, c0, c1, p1}) + * + * @param[in] s parameter between 0 and 1 (this will be [s3, s2, s, 1]) + * @param[in] m basis matrix + * @param[in] c position/control vector + * + * @return B(s) + */ +CGLM_INLINE +float +glms_smc(float s, mat4s m, vec4s c) { + return glm_smc(s, m.raw, c.raw); +} + +#endif /* cglm_curves_h */ diff --git a/include/cglm/structs/frustum.h b/include/cglm/structs/frustum.h new file mode 100644 index 0000000..07340c8 --- /dev/null +++ b/include/cglm/structs/frustum.h @@ -0,0 +1,240 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_frustums_h +#define cglm_frustums_h + +#include "../common.h" +#include "../types-struct.h" +#include "../frustum.h" +#include "plane.h" +#include "vec3.h" +#include "vec4.h" +#include "mat4.h" + +/* you can override clip space coords + but you have to provide all with same name + e.g.: define GLM_CSCOORD_LBN {0.0f, 0.0f, 1.0f, 1.0f} */ +#ifndef GLM_CUSTOM_CLIPSPACE + +/* near */ +#define GLMS_CSCOORD_LBN {-1.0f, -1.0f, -1.0f, 1.0f} +#define GLMS_CSCOORD_LTN {-1.0f, 1.0f, -1.0f, 1.0f} +#define GLMS_CSCOORD_RTN { 1.0f, 1.0f, -1.0f, 1.0f} +#define GLMS_CSCOORD_RBN { 1.0f, -1.0f, -1.0f, 1.0f} + +/* far */ +#define GLMS_CSCOORD_LBF {-1.0f, -1.0f, 1.0f, 1.0f} +#define GLMS_CSCOORD_LTF {-1.0f, 1.0f, 1.0f, 1.0f} +#define GLMS_CSCOORD_RTF { 1.0f, 1.0f, 1.0f, 1.0f} +#define GLMS_CSCOORD_RBF { 1.0f, -1.0f, 1.0f, 1.0f} + +#endif + +/*! + * @brief extracts view frustum planes + * + * planes' space: + * 1- if m = proj: View Space + * 2- if m = viewProj: World Space + * 3- if m = MVP: Object Space + * + * You probably want to extract planes in world space so use viewProj as m + * Computing viewProj: + * glm_mat4_mul(proj, view, viewProj); + * + * Exracted planes order: [left, right, bottom, top, near, far] + * + * @param[in] m matrix (see brief) + * @param[out] dest extracted view frustum planes (see brief) + */ +CGLM_INLINE +void +glms_frustum_planes(mat4s m, vec4s dest[6]) { + mat4s t; + + t = glms_mat4_transpose(m); + + dest[0] = glms_vec4_add(t.col[3], t.col[0]); /* left */ + dest[1] = glms_vec4_sub(t.col[3], t.col[0]); /* right */ + dest[2] = glms_vec4_add(t.col[3], t.col[1]); /* bottom */ + dest[3] = glms_vec4_sub(t.col[3], t.col[1]); /* top */ + dest[4] = glms_vec4_add(t.col[3], t.col[2]); /* near */ + dest[5] = glms_vec4_sub(t.col[3], t.col[2]); /* far */ + + dest[0] = glms_plane_normalize(dest[0]); + dest[1] = glms_plane_normalize(dest[1]); + dest[2] = glms_plane_normalize(dest[2]); + dest[3] = glms_plane_normalize(dest[3]); + dest[4] = glms_plane_normalize(dest[4]); + dest[5] = glms_plane_normalize(dest[5]); +} + +/*! + * @brief extracts view frustum corners using clip-space coordinates + * + * corners' space: + * 1- if m = invViewProj: World Space + * 2- if m = invMVP: Object Space + * + * You probably want to extract corners in world space so use invViewProj + * Computing invViewProj: + * glm_mat4_mul(proj, view, viewProj); + * ... + * glm_mat4_inv(viewProj, invViewProj); + * + * if you have a near coord at i index, you can get it's far coord by i + 4 + * + * Find center coordinates: + * for (j = 0; j < 4; j++) { + * glm_vec3_center(corners[i], corners[i + 4], centerCorners[i]); + * } + * + * @param[in] invMat matrix (see brief) + * @param[out] dest exracted view frustum corners (see brief) + */ +CGLM_INLINE +void +glms_frustum_corners(mat4s invMat, vec4s dest[8]) { + vec4s c[8]; + + /* indexOf(nearCoord) = indexOf(farCoord) + 4 */ + vec4s csCoords[8] = { + GLMS_CSCOORD_LBN, + GLMS_CSCOORD_LTN, + GLMS_CSCOORD_RTN, + GLMS_CSCOORD_RBN, + + GLMS_CSCOORD_LBF, + GLMS_CSCOORD_LTF, + GLMS_CSCOORD_RTF, + GLMS_CSCOORD_RBF + }; + + c[0] = glms_mat4_mulv(invMat, csCoords[0]); + c[1] = glms_mat4_mulv(invMat, csCoords[1]); + c[2] = glms_mat4_mulv(invMat, csCoords[2]); + c[3] = glms_mat4_mulv(invMat, csCoords[3]); + c[4] = glms_mat4_mulv(invMat, csCoords[4]); + c[5] = glms_mat4_mulv(invMat, csCoords[5]); + c[6] = glms_mat4_mulv(invMat, csCoords[6]); + c[7] = glms_mat4_mulv(invMat, csCoords[7]); + + dest[0] = glms_vec4_scale(c[0], 1.0f / c[0].z); + dest[1] = glms_vec4_scale(c[1], 1.0f / c[1].z); + dest[2] = glms_vec4_scale(c[2], 1.0f / c[2].z); + dest[3] = glms_vec4_scale(c[3], 1.0f / c[3].z); + dest[4] = glms_vec4_scale(c[4], 1.0f / c[4].z); + dest[5] = glms_vec4_scale(c[5], 1.0f / c[5].z); + dest[6] = glms_vec4_scale(c[6], 1.0f / c[6].z); + dest[7] = glms_vec4_scale(c[7], 1.0f / c[7].z); +} + +/*! + * @brief finds center of view frustum + * + * @param[in] corners view frustum corners + * @returns view frustum center + */ +CGLM_INLINE +vec4s +glms_frustum_center(vec4s corners[8]) { + vec4s center; + + center = glms_vec4_copy(corners[0]); + + center = glms_vec4_add(corners[1], center); + center = glms_vec4_add(corners[2], center); + center = glms_vec4_add(corners[3], center); + center = glms_vec4_add(corners[4], center); + center = glms_vec4_add(corners[5], center); + center = glms_vec4_add(corners[6], center); + center = glms_vec4_add(corners[7], center); + + return glms_vec4_scale(center, 0.125f); +} + +/*! + * @brief finds bounding box of frustum relative to given matrix e.g. view mat + * + * @param[in] corners view frustum corners + * @param[in] m matrix to convert existing conners + * @param[out] box bounding box as array [min, max] + */ +CGLM_INLINE +void +glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { + vec4s v; + vec3s min, max; + int i; + + min = glms_vec3_broadcast(FLT_MAX); + max = glms_vec3_broadcast(-FLT_MAX); + + for (i = 0; i < 8; i++) { + v = glms_mat4_mulv(m, corners[i]); + + min.x = glm_min(min.x, v.x); + min.y = glm_min(min.y, v.y); + min.z = glm_min(min.z, v.z); + + max.x = glm_max(max.x, v.x); + max.y = glm_max(max.y, v.y); + max.z = glm_max(max.z, v.z); + } + + box[0] = glms_vec3_copy(min); + box[1] = glms_vec3_copy(max); +} + +/*! + * @brief finds planes corners which is between near and far planes (parallel) + * + * this will be helpful if you want to split a frustum e.g. CSM/PSSM. This will + * find planes' corners but you will need to one more plane. + * Actually you have it, it is near, far or created previously with this func ;) + * + * @param[in] corners view frustum corners + * @param[in] splitDist split distance + * @param[in] farDist far distance (zFar) + * @param[out] planeCorners plane corners [LB, LT, RT, RB] + */ +CGLM_INLINE +void +glms_frustum_corners_at(vec4s corners[8], + float splitDist, + float farDist, + vec4s planeCorners[4]) { + vec4s corner; + float dist, sc; + + /* because distance and scale is same for all */ + dist = glms_vec4_distance(corners[GLM_RTF], corners[GLM_RTN]); + sc = dist * (splitDist / farDist); + + /* left bottom */ + corner = glms_vec4_sub(corners[GLM_LBF], corners[GLM_LBN]); + corner = glms_vec4_scale_as(corner, sc); + planeCorners[0] = glms_vec4_add(corners[GLM_LBN], corner); + + /* left top */ + corner = glms_vec4_sub(corners[GLM_LTF], corners[GLM_LTN]); + corner = glms_vec4_scale_as(corner, sc); + planeCorners[1] = glms_vec4_add(corners[GLM_LTN], corner); + + /* right top */ + corner = glms_vec4_sub(corners[GLM_RTF], corners[GLM_RTN]); + corner = glms_vec4_scale_as(corner, sc); + planeCorners[2] = glms_vec4_add(corners[GLM_RTN], corner); + + /* right bottom */ + corner = glms_vec4_sub(corners[GLM_RBF], corners[GLM_RBN]); + corner = glms_vec4_scale_as(corner, sc); + planeCorners[3] = glms_vec4_add(corners[GLM_RBN], corner); +} + +#endif /* cglm_frustums_h */ diff --git a/include/cglm/structs/io.h b/include/cglm/structs/io.h new file mode 100644 index 0000000..c209a47 --- /dev/null +++ b/include/cglm/structs/io.h @@ -0,0 +1,100 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/* + Functions: + CGLM_INLINE void glm_mat4_print(mat4 matrix, FILE *ostream); + CGLM_INLINE void glm_mat3_print(mat3 matrix, FILE *ostream); + CGLM_INLINE void glm_vec4_print(vec4 vec, FILE *ostream); + CGLM_INLINE void glm_vec3_print(vec3 vec, FILE *ostream); + CGLM_INLINE void glm_ivec3_print(ivec3 vec, FILE *ostream); + CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream); + */ + +#ifndef cglm_ios_h +#define cglm_ios_h + +#include "../common.h" +#include "../io.h" +#include "mat4.h" + +#include +#include + +CGLM_INLINE +void +glms_mat4_print(mat4s matrix, + FILE * __restrict ostream) { + + glm_mat4_print(matrix.raw, ostream); +} + +CGLM_INLINE +void +glms_mat3_print(mat3s matrix, + FILE * __restrict ostream) { + glm_mat3_print(matrix.raw, ostream); +} + +CGLM_INLINE +void +glms_vec4_print(vec4s vec, + FILE * __restrict ostream) { + glm_vec4_print(vec.raw, ostream); +} + +CGLM_INLINE +void +glms_vec3_print(vec3s vec, + FILE * __restrict ostream) { + glm_vec3_print(vec.raw, ostream); +} + +CGLM_INLINE +void +glms_ivec3_print(ivec3s vec, + FILE * __restrict ostream) { + glm_ivec3_print(vec.raw, ostream); +} + +CGLM_INLINE +void +glms_versor_print(versors vec, + FILE * __restrict ostream) { + glm_versor_print(vec.raw, ostream); +} + +CGLM_INLINE +void +glms_aabb_print(vec3s bbox[2], + const char * __restrict tag, + FILE * __restrict ostream) { + int i, j; + +#define m 3 + + fprintf(ostream, "AABB (%s):\n", tag ? tag : "float"); + + for (i = 0; i < 2; i++) { + fprintf(ostream, "\t|"); + + for (j = 0; j < m; j++) { + fprintf(ostream, "%0.4f", bbox[i].raw[j]); + + if (j != m - 1) + fprintf(ostream, "\t"); + } + + fprintf(ostream, "|\n"); + } + + fprintf(ostream, "\n"); + +#undef m +} + +#endif /* cglm_ios_h */ diff --git a/include/cglm/structs/mat3.h b/include/cglm/structs/mat3.h index 63fe7c6..8072746 100644 --- a/include/cglm/structs/mat3.h +++ b/include/cglm/structs/mat3.h @@ -18,7 +18,6 @@ CGLM_INLINE void glms_mat3_identity_array(mat3s * __restrict mat, size_t count); CGLM_INLINE mat3s glms_mat3_zero(); CGLM_INLINE mat3s glms_mat3_mul(mat3s m1, mat3s m2); - CGLM_INLINE mat3s glms_mat3_transpose_to(mat3s m); CGLM_INLINE ma3s glms_mat3_transpose(mat3s m); CGLM_INLINE vec3s glms_mat3_mulv(mat3s m, vec3s v); CGLM_INLINE float glms_mat3_trace(mat3s m); @@ -140,22 +139,6 @@ glms_mat3_mul(mat3s m1, mat3s m2) { return r; } -/*! - * @brief transpose mat3 and store in dest - * - * source matrix will not be transposed unless dest is m - * - * @param[in] m matrix - * @param[out] dest result - */ -CGLM_INLINE -mat3s -glms_mat3_transpose_to(mat3s m) { - mat3s r; - glm_mat3_transpose_to(m.raw, r.raw); - return r; -} - /*! * @brief tranpose mat3 and store result in same matrix * diff --git a/include/cglm/structs/mat4.h b/include/cglm/structs/mat4.h index a61f18d..72686cd 100644 --- a/include/cglm/structs/mat4.h +++ b/include/cglm/structs/mat4.h @@ -33,7 +33,6 @@ CGLM_INLINE float glms_mat4_trace3(mat4s m); CGLM_INLINE versors glms_mat4_quat(mat4s m); CGLM_INLINE vec3s glms_mat4_mulv3(mat4s m, vec3s v, float last); - CGLM_INLINE mat4s glms_mat4_transpose_to(mat4s m); CGLM_INLINE mat4s glms_mat4_transpose(mat4s m); CGLM_INLINE mat4s glms_mat4_scale_p(mat4s m, float s); CGLM_INLINE mat4s glms_mat4_scale(mat4s m, float s); @@ -54,19 +53,19 @@ #include "vec4.h" #include "vec3.h" -#define GLMS_MAT4_IDENTITY_INIT {{1.0f, 0.0f, 0.0f, 0.0f}, \ - {0.0f, 1.0f, 0.0f, 0.0f}, \ - {0.0f, 0.0f, 1.0f, 0.0f}, \ - {0.0f, 0.0f, 0.0f, 1.0f}} +#define GLMS_MAT4_IDENTITY_INIT {1.0f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 1.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 1.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, 1.0f} -#define GLMS_MAT4_ZERO_INIT {{0.0f, 0.0f, 0.0f, 0.0f}, \ - {0.0f, 0.0f, 0.0f, 0.0f}, \ - {0.0f, 0.0f, 0.0f, 0.0f}, \ - {0.0f, 0.0f, 0.0f, 0.0f}} +#define GLMS_MAT4_ZERO_INIT {0.0f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, 0.0f} /* for C only */ -#define GLMS_MAT4_IDENTITY ((mat4)GLMS_MAT4_IDENTITY_INIT) -#define GLMS_MAT4_ZERO ((mat4)GLMS_MAT4_ZERO_INIT) +#define GLMS_MAT4_IDENTITY ((mat4s)GLMS_MAT4_IDENTITY_INIT) +#define GLMS_MAT4_ZERO ((mat4s)GLMS_MAT4_ZERO_INIT) /*! * @brief copy all members of [mat] to [dest] @@ -132,7 +131,7 @@ glms_mat4_identity() { CGLM_INLINE void glms_mat4_identity_array(mat4s * __restrict mat, size_t count) { - CGLM_ALIGN_MAT mat4 t = GLM_MAT4_IDENTITY_INIT; + CGLM_ALIGN_MAT mat4s t = GLMS_MAT4_IDENTITY_INIT; size_t i; for (i = 0; i < count; i++) { @@ -229,20 +228,25 @@ glms_mat4_mul(mat4s m1, mat4s m2) { * @code * mat m1, m2, m3, m4, res; * - * glm_mat4_mulN((mat4 *[]){&m1, &m2, &m3, &m4}, 4, res); + * res = glm_mat4_mulN((mat4 *[]){&m1, &m2, &m3, &m4}, 4); * @endcode * * @warning matrices parameter is pointer array not mat4 array! * * @param[in] matrices mat4 * array * @param[in] len matrices count - * @returns result + * @returns result matrix */ CGLM_INLINE mat4s glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { - mat4s r; - glm_mat4_mulN(matrices, len, r.raw); + CGLM_ALIGN_MAT mat4s r = GLMS_MAT4_IDENTITY_INIT; + uint32_t i; + + for (i = 0; i < len; i++) { + r = glms_mat4_mul(r, *matrices[i]); + } + return r; } @@ -317,22 +321,6 @@ glms_mat4_mulv3(mat4s m, vec3s v, float last) { return r; } -/*! - * @brief transpose mat4 and store in dest - * - * source matrix will not be transposed unless dest is m - * - * @param[in] m matrix - * @returns result - */ -CGLM_INLINE -mat4s -glms_mat4_transpose_to(mat4s m) { - mat4s r; - glm_mat4_transpose_to(m.raw, r.raw); - return r; -} - /*! * @brief tranpose mat4 and store result in same matrix * diff --git a/include/cglm/structs/plane.h b/include/cglm/structs/plane.h new file mode 100644 index 0000000..6e23482 --- /dev/null +++ b/include/cglm/structs/plane.h @@ -0,0 +1,40 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_planes_h +#define cglm_planes_h + +#include "../common.h" +#include "../types-struct.h" +#include "../plane.h" +#include "vec4.h" + +/* + Plane equation: Ax + By + Cz + D = 0; + + It stored in vec4 as [A, B, C, D]. (A, B, C) is normal and D is distance +*/ + +/* + Functions: + CGLM_INLINE vec4s glms_plane_normalize(vec4s plane); + */ + +/*! + * @brief normalizes a plane + * + * @param[in] plane plane to normalize + * @returns normalized plane + */ +CGLM_INLINE +vec4s +glms_plane_normalize(vec4s plane) { + glm_plane_normalize(plane.raw); + return plane; +} + +#endif /* cglm_planes_h */ diff --git a/include/cglm/structs/project.h b/include/cglm/structs/project.h new file mode 100644 index 0000000..1cbb137 --- /dev/null +++ b/include/cglm/structs/project.h @@ -0,0 +1,104 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +#ifndef cglm_projects_h +#define cglm_projects_h + +#include "../common.h" +#include "../types-struct.h" +#include "../project.h" +#include "vec3.h" +#include "vec4.h" +#include "mat4.h" + +/*! + * @brief maps the specified viewport coordinates into specified space [1] + * the matrix should contain projection matrix. + * + * if you don't have ( and don't want to have ) an inverse matrix then use + * glm_unproject version. You may use existing inverse of matrix in somewhere + * else, this is why glm_unprojecti exists to save save inversion cost + * + * [1] space: + * 1- if m = invProj: View Space + * 2- if m = invViewProj: World Space + * 3- if m = invMVP: Object Space + * + * You probably want to map the coordinates into object space + * so use invMVP as m + * + * Computing viewProj: + * glm_mat4_mul(proj, view, viewProj); + * glm_mat4_mul(viewProj, model, MVP); + * glm_mat4_inv(viewProj, invMVP); + * + * @param[in] pos point/position in viewport coordinates + * @param[in] invMat matrix (see brief) + * @param[in] vp viewport as [x, y, width, height] + * @returns unprojected coordinates + */ +CGLM_INLINE +vec3s +glms_unprojecti(vec3s pos, mat4s invMat, vec4s vp) { + vec3s r; + glm_unprojecti(pos.raw, invMat.raw, vp.raw, r.raw); + return r; +} + +/*! + * @brief maps the specified viewport coordinates into specified space [1] + * the matrix should contain projection matrix. + * + * this is same as glm_unprojecti except this function get inverse matrix for + * you. + * + * [1] space: + * 1- if m = proj: View Space + * 2- if m = viewProj: World Space + * 3- if m = MVP: Object Space + * + * You probably want to map the coordinates into object space + * so use MVP as m + * + * Computing viewProj and MVP: + * glm_mat4_mul(proj, view, viewProj); + * glm_mat4_mul(viewProj, model, MVP); + * + * @param[in] pos point/position in viewport coordinates + * @param[in] m matrix (see brief) + * @param[in] vp viewport as [x, y, width, height] + * @returns unprojected coordinates + */ +CGLM_INLINE +vec3s +glms_unproject(vec3s pos, mat4s m, vec4s vp) { + vec3s r; + glm_unproject(pos.raw, m.raw, vp.raw, r.raw); + return r; +} + +/*! + * @brief map object coordinates to window coordinates + * + * Computing MVP: + * glm_mat4_mul(proj, view, viewProj); + * glm_mat4_mul(viewProj, model, MVP); + * + * @param[in] pos object coordinates + * @param[in] m MVP matrix + * @param[in] vp viewport as [x, y, width, height] + * @param[out] dest projected coordinates + */ +CGLM_INLINE +vec3s +glms_project(vec3s pos, mat4s m, vec4s vp) { + vec3s r; + glm_project(pos.raw, m.raw, vp.raw, r.raw); + return r; +} + +#endif /* cglm_projects_h */ diff --git a/include/cglm/structs/sphere.h b/include/cglm/structs/sphere.h index b336c3b..164e8bc 100644 --- a/include/cglm/structs/sphere.h +++ b/include/cglm/structs/sphere.h @@ -10,8 +10,8 @@ #include "../common.h" #include "../types-struct.h" -#include "../mat4.h" #include "../sphere.h" +#include "mat4.h" /* Sphere Representation in cglm: [center.x, center.y, center.z, radii] diff --git a/include/cglm/types-struct.h b/include/cglm/types-struct.h index 13431aa..2d54aa4 100644 --- a/include/cglm/types-struct.h +++ b/include/cglm/types-struct.h @@ -21,6 +21,17 @@ typedef union vec3s { vec3 raw; } vec3s; +typedef union ivec3s { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + int x; + int y; + int z; + }; +#endif + ivec3 raw; +} ivec3s; + typedef union CGLM_ALIGN_IF(16) vec4s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { @@ -38,15 +49,9 @@ typedef vec4s versors; typedef union mat3s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { - float m00; - float m01; - float m02; - float m10; - float m11; - float m12; - float m20; - float m21; - float m22; + float m00, m01, m02; + float m10, m11, m12; + float m20, m21, m22; }; struct { vec3s col0; @@ -54,32 +59,17 @@ typedef union mat3s { vec3s col2; }; #endif + vec3s col[3]; mat3 raw; } mat3s; -#ifdef __AVX__ -typedef union CGLM_ALIGN_IF(32) mat4s { -#else -typedef union CGLM_ALIGN_IF(16) mat4s { -#endif +typedef union CGLM_ALIGN_MAT mat4s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { - float m00; - float m01; - float m02; - float m03; - float m10; - float m11; - float m12; - float m13; - float m20; - float m21; - float m22; - float m23; - float m30; - float m31; - float m32; - float m33; + float m00, m01, m02, m03; + float m10, m11, m12, m13; + float m20, m21, m22, m23; + float m30, m31, m32, m33; }; struct { vec4s col0; @@ -88,6 +78,7 @@ typedef union CGLM_ALIGN_IF(16) mat4s { vec4s col3; }; #endif + vec4s col[4]; mat4 raw; } mat4s; From 6fa5173cfd08e1f459f8a4b9ee44f8e7632e6793 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Wed, 8 May 2019 09:18:05 +0300 Subject: [PATCH 24/56] now working on v0.5.5 --- configure.ac | 2 +- docs/source/conf.py | 4 ++-- include/cglm/version.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 2c9329f..7bd3c58 100644 --- a/configure.ac +++ b/configure.ac @@ -7,7 +7,7 @@ #***************************************************************************** AC_PREREQ([2.69]) -AC_INIT([cglm], [0.5.4], [info@recp.me]) +AC_INIT([cglm], [0.5.5], [info@recp.me]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/docs/source/conf.py b/docs/source/conf.py index c2b6ba0..33fda4e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -62,9 +62,9 @@ author = u'Recep Aslantas' # built documents. # # The short X.Y version. -version = u'0.5.4' +version = u'0.5.5' # The full version, including alpha/beta/rc tags. -release = u'0.5.4' +release = u'0.5.5' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/include/cglm/version.h b/include/cglm/version.h index 3664323..d406e2c 100644 --- a/include/cglm/version.h +++ b/include/cglm/version.h @@ -10,6 +10,6 @@ #define CGLM_VERSION_MAJOR 0 #define CGLM_VERSION_MINOR 5 -#define CGLM_VERSION_PATCH 4 +#define CGLM_VERSION_PATCH 5 #endif /* cglm_version_h */ From 2adb4c55938ab69aeef4791dc7867f900d9a1f61 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Wed, 8 May 2019 09:18:11 +0300 Subject: [PATCH 25/56] use CGLM_ALIGN_MAT on mat4 typedef --- include/cglm/types.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/include/cglm/types.h b/include/cglm/types.h index 1190b73..169d70b 100644 --- a/include/cglm/types.h +++ b/include/cglm/types.h @@ -38,12 +38,7 @@ typedef int ivec3[3]; typedef CGLM_ALIGN_IF(16) float vec4[4]; typedef vec4 versor; typedef vec3 mat3[3]; - -#ifdef __AVX__ -typedef CGLM_ALIGN_IF(32) vec4 mat4[4]; -#else -typedef CGLM_ALIGN_IF(16) vec4 mat4[4]; -#endif +typedef CGLM_ALIGN_MAT vec4 mat4[4]; #define GLM_E 2.71828182845904523536028747135266250 /* e */ #define GLM_LOG2E 1.44269504088896340735992468100189214 /* log2(e) */ From 1d1bf8e91a63d8d4c6d269f4ad7526e80df366dc Mon Sep 17 00:00:00 2001 From: acoto87 Date: Thu, 16 May 2019 17:03:55 -0500 Subject: [PATCH 26/56] - Change the approach implementation of several functions - Added `glms_vec4_pack` and `glms_vec4_unpack` to pack and unpack arrays of `vec4s`. - Added `glms_vec3_pack` and `glms_vec3_unpack` to pack and unpack arrays of `vec3s`. - Fixes in functions that accumulates in one parameter - --- include/cglm/structs/affine.h | 16 ++-- include/cglm/structs/box.h | 84 ++++++++------------- include/cglm/structs/frustum.h | 131 ++++++--------------------------- include/cglm/structs/io.h | 24 +----- include/cglm/structs/mat4.h | 2 +- include/cglm/structs/vec3.h | 118 ++++++++++++----------------- include/cglm/structs/vec4.h | 73 ++++++++++++------ 7 files changed, 160 insertions(+), 288 deletions(-) diff --git a/include/cglm/structs/affine.h b/include/cglm/structs/affine.h index 6f8be48..72cab13 100644 --- a/include/cglm/structs/affine.h +++ b/include/cglm/structs/affine.h @@ -286,15 +286,9 @@ glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) { CGLM_INLINE vec3s glms_decompose_scalev(mat4s m) { - mat3s m3x3; - vec3s s; - - m3x3 = glms_mat4_pick3(m); - - s.x = glms_vec3_norm(m3x3.col[0]); - s.y = glms_vec3_norm(m3x3.col[1]); - s.z = glms_vec3_norm(m3x3.col[2]); - return s; + vec3s r; + glm_decompose_scalev(m.raw, r.raw); + return r; } /*! @@ -322,6 +316,8 @@ glms_uniscaled(mat4s m) { CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s r, vec3s s) { + // FIX: Modify param + // glm_decompose_rs(m.raw, r.raw, s.raw); } @@ -337,6 +333,8 @@ glms_decompose_rs(mat4s m, mat4s r, vec3s s) { CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s r, vec3s s) { + // FIX: Modify param + // glm_decompose(m.raw, t.raw, r.raw, s.raw); } diff --git a/include/cglm/structs/box.h b/include/cglm/structs/box.h index e9c813f..ca7c3a6 100644 --- a/include/cglm/structs/box.h +++ b/include/cglm/structs/box.h @@ -25,34 +25,12 @@ CGLM_INLINE void glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { - vec3s v[2], xa, xb, ya, yb, za, zb; - mat3s m3x3; + vec3 rawBox[2]; + vec3 rawDest[2]; - m3x3 = glms_mat4_pick3(m); - - xa = glms_vec3_scale(m3x3.col[0], box[0].x); - xb = glms_vec3_scale(m3x3.col[0], box[1].x); - - ya = glms_vec3_scale(m3x3.col[1], box[0].y); - yb = glms_vec3_scale(m3x3.col[1], box[1].y); - - za = glms_vec3_scale(m3x3.col[2], box[0].z); - zb = glms_vec3_scale(m3x3.col[2], box[1].z); - - /* translation + min(xa, xb) + min(ya, yb) + min(za, zb) */ - v[0] = m3x3.col[3]; - v[0] = glms_vec3_minadd(xa, xb); - v[0] = glms_vec3_minadd(ya, yb); - v[0] = glms_vec3_minadd(za, zb); - - /* translation + max(xa, xb) + max(ya, yb) + max(za, zb) */ - v[1] = m3x3.col[3]; - v[1] = glms_vec3_maxadd(xa, xb); - v[1] = glms_vec3_maxadd(ya, yb); - v[1] = glms_vec3_maxadd(za, zb); - - dest[0] = glms_vec3_copy(v[0]); - dest[1] = glms_vec3_copy(v[1]); + glms_vec3_unpack(rawBox, box, 2); + glm_aabb_transform(rawBox, m.raw, rawDest); + glms_vec3_pack(dest, rawDest, 2); } /*! @@ -68,13 +46,14 @@ glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { CGLM_INLINE void glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { - dest[0].x = glm_min(box1[0].x, box2[0].x); - dest[0].y = glm_min(box1[0].y, box2[0].y); - dest[0].z = glm_min(box1[0].z, box2[0].z); + vec3 rawBox1[2]; + vec3 rawBox2[2]; + vec3 rawDest[2]; - dest[1].x = glm_max(box1[1].x, box2[1].x); - dest[1].y = glm_max(box1[1].y, box2[1].y); - dest[1].z = glm_max(box1[1].z, box2[1].z); + glms_vec3_unpack(rawBox1, box1, 2); + glms_vec3_unpack(rawBox2, box2, 2); + glm_aabb_merge(rawBox1, rawBox2, rawDest); + glms_vec3_pack(dest, rawDest, 2); } /*! @@ -91,13 +70,14 @@ glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { CGLM_INLINE void glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) { - dest[0].x = glm_max(box[0].x, cropBox[0].x); - dest[0].y = glm_max(box[0].y, cropBox[0].y); - dest[0].z = glm_max(box[0].z, cropBox[0].z); + vec3 rawBox[2]; + vec3 rawCropBox[2]; + vec3 rawDest[2]; - dest[1].x = glm_min(box[1].x, cropBox[1].x); - dest[1].y = glm_min(box[1].y, cropBox[1].y); - dest[1].z = glm_min(box[1].z, cropBox[1].z); + glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawCropBox, cropBox, 2); + glm_aabb_crop(rawBox, rawCropBox, rawDest); + glms_vec3_pack(dest, rawDest, 2); } /*! @@ -139,21 +119,12 @@ glms_aabb_crop_until(vec3s box[2], CGLM_INLINE bool glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { - vec4s p; - float dp; - int i; + vec3 rawBox[2]; + vec4 rawPlanes[6]; - for (i = 0; i < 6; i++) { - p = planes[i]; - dp = p.x * box[p.x > 0.0f].x - + p.y * box[p.y > 0.0f].y - + p.z * box[p.z > 0.0f].z; - - if (dp < -p.w) - return false; - } - - return true; + glms_vec3_unpack(rawBox, box, 2); + glms_vec4_unpack(rawPlanes, planes, 6); + return glm_aabb_frustum(rawBox, rawPlanes); } /*! @@ -164,6 +135,8 @@ glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { CGLM_INLINE void glms_aabb_invalidate(vec3s box[2]) { + // FIX: Modify param + // box[0] = glms_vec3_broadcast(FLT_MAX); box[1] = glms_vec3_broadcast(-FLT_MAX); } @@ -176,8 +149,9 @@ glms_aabb_invalidate(vec3s box[2]) { CGLM_INLINE bool glms_aabb_isvalid(vec3s box[2]) { - return glms_vec3_max(box[0]) != FLT_MAX && - glms_vec3_min(box[1]) != -FLT_MAX; + vec3 rawBox[2]; + glms_vec3_unpack(rawBox, box, 2); + return glm_aabb_isvalid(rawBox); } /*! diff --git a/include/cglm/structs/frustum.h b/include/cglm/structs/frustum.h index 07340c8..56bd165 100644 --- a/include/cglm/structs/frustum.h +++ b/include/cglm/structs/frustum.h @@ -55,23 +55,9 @@ CGLM_INLINE void glms_frustum_planes(mat4s m, vec4s dest[6]) { - mat4s t; - - t = glms_mat4_transpose(m); - - dest[0] = glms_vec4_add(t.col[3], t.col[0]); /* left */ - dest[1] = glms_vec4_sub(t.col[3], t.col[0]); /* right */ - dest[2] = glms_vec4_add(t.col[3], t.col[1]); /* bottom */ - dest[3] = glms_vec4_sub(t.col[3], t.col[1]); /* top */ - dest[4] = glms_vec4_add(t.col[3], t.col[2]); /* near */ - dest[5] = glms_vec4_sub(t.col[3], t.col[2]); /* far */ - - dest[0] = glms_plane_normalize(dest[0]); - dest[1] = glms_plane_normalize(dest[1]); - dest[2] = glms_plane_normalize(dest[2]); - dest[3] = glms_plane_normalize(dest[3]); - dest[4] = glms_plane_normalize(dest[4]); - dest[5] = glms_plane_normalize(dest[5]); + vec4 rawDest[6]; + glm_frustum_planes(m.raw, rawDest); + glms_vec4_pack(dest, rawDest, 6); } /*! @@ -100,38 +86,9 @@ glms_frustum_planes(mat4s m, vec4s dest[6]) { CGLM_INLINE void glms_frustum_corners(mat4s invMat, vec4s dest[8]) { - vec4s c[8]; - - /* indexOf(nearCoord) = indexOf(farCoord) + 4 */ - vec4s csCoords[8] = { - GLMS_CSCOORD_LBN, - GLMS_CSCOORD_LTN, - GLMS_CSCOORD_RTN, - GLMS_CSCOORD_RBN, - - GLMS_CSCOORD_LBF, - GLMS_CSCOORD_LTF, - GLMS_CSCOORD_RTF, - GLMS_CSCOORD_RBF - }; - - c[0] = glms_mat4_mulv(invMat, csCoords[0]); - c[1] = glms_mat4_mulv(invMat, csCoords[1]); - c[2] = glms_mat4_mulv(invMat, csCoords[2]); - c[3] = glms_mat4_mulv(invMat, csCoords[3]); - c[4] = glms_mat4_mulv(invMat, csCoords[4]); - c[5] = glms_mat4_mulv(invMat, csCoords[5]); - c[6] = glms_mat4_mulv(invMat, csCoords[6]); - c[7] = glms_mat4_mulv(invMat, csCoords[7]); - - dest[0] = glms_vec4_scale(c[0], 1.0f / c[0].z); - dest[1] = glms_vec4_scale(c[1], 1.0f / c[1].z); - dest[2] = glms_vec4_scale(c[2], 1.0f / c[2].z); - dest[3] = glms_vec4_scale(c[3], 1.0f / c[3].z); - dest[4] = glms_vec4_scale(c[4], 1.0f / c[4].z); - dest[5] = glms_vec4_scale(c[5], 1.0f / c[5].z); - dest[6] = glms_vec4_scale(c[6], 1.0f / c[6].z); - dest[7] = glms_vec4_scale(c[7], 1.0f / c[7].z); + vec4 rawDest[8]; + glm_frustum_corners(invMat.raw, rawDest); + glms_vec4_pack(dest, rawDest, 8); } /*! @@ -143,19 +100,12 @@ glms_frustum_corners(mat4s invMat, vec4s dest[8]) { CGLM_INLINE vec4s glms_frustum_center(vec4s corners[8]) { - vec4s center; + vec4 rawCorners[8]; + vec4s r; - center = glms_vec4_copy(corners[0]); - - center = glms_vec4_add(corners[1], center); - center = glms_vec4_add(corners[2], center); - center = glms_vec4_add(corners[3], center); - center = glms_vec4_add(corners[4], center); - center = glms_vec4_add(corners[5], center); - center = glms_vec4_add(corners[6], center); - center = glms_vec4_add(corners[7], center); - - return glms_vec4_scale(center, 0.125f); + glms_vec4_unpack(rawCorners, corners, 8); + glm_frustum_center(rawCorners, r.raw); + return r; } /*! @@ -168,27 +118,12 @@ glms_frustum_center(vec4s corners[8]) { CGLM_INLINE void glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { - vec4s v; - vec3s min, max; - int i; + vec4 rawCorners[8]; + vec3 rawBox[2]; - min = glms_vec3_broadcast(FLT_MAX); - max = glms_vec3_broadcast(-FLT_MAX); - - for (i = 0; i < 8; i++) { - v = glms_mat4_mulv(m, corners[i]); - - min.x = glm_min(min.x, v.x); - min.y = glm_min(min.y, v.y); - min.z = glm_min(min.z, v.z); - - max.x = glm_max(max.x, v.x); - max.y = glm_max(max.y, v.y); - max.z = glm_max(max.z, v.z); - } - - box[0] = glms_vec3_copy(min); - box[1] = glms_vec3_copy(max); + glms_vec4_unpack(rawCorners, corners, 8); + glm_frustum_box(rawCorners, m.raw, rawBox); + glms_vec3_pack(box, rawBox, 2); } /*! @@ -205,36 +140,16 @@ glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { */ CGLM_INLINE void -glms_frustum_corners_at(vec4s corners[8], +glms_frustum_corners_at(vec4s corners[8], float splitDist, float farDist, - vec4s planeCorners[4]) { - vec4s corner; - float dist, sc; + vec4s planeCorners[4]) { + vec4 rawCorners[8]; + vec4 rawPlaneCorners[4]; - /* because distance and scale is same for all */ - dist = glms_vec4_distance(corners[GLM_RTF], corners[GLM_RTN]); - sc = dist * (splitDist / farDist); - - /* left bottom */ - corner = glms_vec4_sub(corners[GLM_LBF], corners[GLM_LBN]); - corner = glms_vec4_scale_as(corner, sc); - planeCorners[0] = glms_vec4_add(corners[GLM_LBN], corner); - - /* left top */ - corner = glms_vec4_sub(corners[GLM_LTF], corners[GLM_LTN]); - corner = glms_vec4_scale_as(corner, sc); - planeCorners[1] = glms_vec4_add(corners[GLM_LTN], corner); - - /* right top */ - corner = glms_vec4_sub(corners[GLM_RTF], corners[GLM_RTN]); - corner = glms_vec4_scale_as(corner, sc); - planeCorners[2] = glms_vec4_add(corners[GLM_RTN], corner); - - /* right bottom */ - corner = glms_vec4_sub(corners[GLM_RBF], corners[GLM_RBN]); - corner = glms_vec4_scale_as(corner, sc); - planeCorners[3] = glms_vec4_add(corners[GLM_RBN], corner); + glms_vec4_unpack(rawCorners, corners, 8); + glm_frustum_corners_at(rawCorners, splitDist, farDist, rawPlaneCorners); + glms_vec4_pack(planeCorners, rawPlaneCorners, 8); } #endif /* cglm_frustums_h */ diff --git a/include/cglm/structs/io.h b/include/cglm/structs/io.h index c209a47..2467d20 100644 --- a/include/cglm/structs/io.h +++ b/include/cglm/structs/io.h @@ -73,28 +73,10 @@ void glms_aabb_print(vec3s bbox[2], const char * __restrict tag, FILE * __restrict ostream) { - int i, j; + vec3 rawBbox[2]; -#define m 3 - - fprintf(ostream, "AABB (%s):\n", tag ? tag : "float"); - - for (i = 0; i < 2; i++) { - fprintf(ostream, "\t|"); - - for (j = 0; j < m; j++) { - fprintf(ostream, "%0.4f", bbox[i].raw[j]); - - if (j != m - 1) - fprintf(ostream, "\t"); - } - - fprintf(ostream, "|\n"); - } - - fprintf(ostream, "\n"); - -#undef m + glms_vec3_unpack(rawBbox, bbox, 2); + glm_aabb_print(rawBbox, tag, ostream); } #endif /* cglm_ios_h */ diff --git a/include/cglm/structs/mat4.h b/include/cglm/structs/mat4.h index 72686cd..40c7291 100644 --- a/include/cglm/structs/mat4.h +++ b/include/cglm/structs/mat4.h @@ -241,7 +241,7 @@ CGLM_INLINE mat4s glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { CGLM_ALIGN_MAT mat4s r = GLMS_MAT4_IDENTITY_INIT; - uint32_t i; + size_t i; for (i = 0; i < len; i++) { r = glms_mat4_mul(r, *matrices[i]); diff --git a/include/cglm/structs/vec3.h b/include/cglm/structs/vec3.h index ed77c4a..312d59a 100644 --- a/include/cglm/structs/vec3.h +++ b/include/cglm/structs/vec3.h @@ -40,6 +40,30 @@ glms_vec3_copy(vec3s v) { return r; } +CGLM_INLINE +void +glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { + size_t i; + + for (i = 0; i < len; i++) { + dst[i].x = src[i][0]; + dst[i].y = src[i][1]; + dst[i].z = src[i][2]; + } +} + +CGLM_INLINE +void +glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { + size_t i; + + for (i = 0; i < len; i++) { + dst[i][0] = src[i].x; + dst[i][1] = src[i].y; + dst[i][2] = src[i].z; + } +} + CGLM_INLINE vec3s glms_vec3_zero() { @@ -65,13 +89,13 @@ glms_vec3_dot(vec3s a, vec3s b) { CGLM_INLINE float glms_vec3_norm2(vec3s v) { - glm_vec3_norm2(v.raw); + return glm_vec3_norm2(v.raw); } CGLM_INLINE float glms_vec3_norm(vec3s v) { - glm_vec3_norm(v.raw); + return glm_vec3_norm(v.raw); } CGLM_INLINE @@ -148,50 +172,44 @@ glms_vec3_divs(vec3s a, float s) { CGLM_INLINE vec3s -glms_vec3_addadd(vec3s a, vec3s b) { - vec3s r; - glm_vec3_addadd(a.raw, b.raw, r.raw); - return r; +glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) { + glm_vec3_addadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec3s -glms_vec3_subadd(vec3s a, vec3s b) { - vec3s r; - glm_vec3_subadd(a.raw, b.raw, r.raw); - return r; +glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) { + glm_vec3_subadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec3s -glms_vec3_muladd(vec3s a, vec3s b) { - vec3s r; - glm_vec3_muladd(a.raw, b.raw, r.raw); - return r; +glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) { + glm_vec3_muladd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec3s -glms_vec3_muladds(vec3s a, float s) { - vec3s r; - glm_vec3_muladds(a.raw, s, r.raw); - return r; +glms_vec3_muladds(vec3s a, float s, vec3s dest) { + glm_vec3_muladds(a.raw, s, dest.raw); + return dest; } CGLM_INLINE vec3s -glms_vec3_maxadd(vec3s a, vec3s b) { - vec3s r; - glm_vec3_maxadd(a.raw, b.raw, r.raw); - return r; +glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) { + glm_vec3_maxadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec3s -glms_vec3_minadd(vec3s a, vec3s b) { - vec3s r; - glm_vec3_minadd(a.raw, b.raw, r.raw); - return r; +glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) { + glm_vec3_minadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE @@ -201,22 +219,6 @@ glms_vec3_flipsign(vec3s v) { return v; } -CGLM_INLINE -vec3s -glms_vec3_flipsign_to(vec3s v) { - vec3s r; - glm_vec3_flipsign_to(v.raw, r.raw); - return r; -} - -CGLM_INLINE -vec3s -glms_vec3_negate_to(vec3s v) { - vec3s r; - glm_vec3_negate_to(v.raw, r.raw); - return r; -} - CGLM_INLINE vec3s glms_vec3_negate(vec3s v) { @@ -231,14 +233,6 @@ glms_vec3_inv(vec3s v) { return v; } -CGLM_INLINE -vec3s -glms_vec3_inv_to(vec3s v) { - vec3s r; - glm_vec3_inv_to(v.raw, r.raw); - return r; -} - CGLM_INLINE vec3s glms_vec3_normalize(vec3s v) { @@ -246,14 +240,6 @@ glms_vec3_normalize(vec3s v) { return v; } -CGLM_INLINE -vec3s -glms_vec3_normalize_to(vec3s v) { - vec3s r; - glm_vec3_normalize_to(v.raw, r.raw); - return r; -} - CGLM_INLINE vec3s glms_vec3_cross(vec3s a, vec3s b) { @@ -291,17 +277,17 @@ glms_vec3_rotate(vec3s v, float angle, vec3s axis) { CGLM_INLINE vec3s -glms_vec3_rotate_m4(mat4 m, vec3s v) { +glms_vec3_rotate_m4(mat4s m, vec3s v) { vec3s r; - glm_vec3_rotate_m4(m, v.raw, r.raw); + glm_vec3_rotate_m4(m.raw, v.raw, r.raw); return r; } CGLM_INLINE vec3s -glms_vec3_rotate_m3(mat3 m, vec3s v) { +glms_vec3_rotate_m3(mat3s m, vec3s v) { vec3s r; - glm_vec3_rotate_m3(m, v.raw, r.raw); + glm_vec3_rotate_m3(m.raw, v.raw, r.raw); return r; } @@ -387,12 +373,4 @@ glms_normalize(vec3s v) { return v; } -CGLM_INLINE -vec3s -glms_normalize_to(vec3s v) { - vec3s r; - glm_normalize_to(v.raw, r.raw); - return r; -} - #endif /* cglm_vec3s_h */ diff --git a/include/cglm/structs/vec4.h b/include/cglm/structs/vec4.h index c8ec509..956fee1 100644 --- a/include/cglm/structs/vec4.h +++ b/include/cglm/structs/vec4.h @@ -54,6 +54,29 @@ glms_vec4_ucopy(vec4s v) { return r; } +CGLM_INLINE +void +glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { + size_t i; + + for (i = 0; i < len; i++) { + dst[i].x = src[i][0]; + dst[i].y = src[i][1]; + dst[i].z = src[i][2]; + } +} + +CGLM_INLINE +void +glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { + size_t i; + + for (i = 0; i < len; i++) { + dst[i][0] = src[i].x; + dst[i][1] = src[i].y; + dst[i][2] = src[i].z; + } +} CGLM_INLINE float @@ -147,50 +170,44 @@ glms_vec4_divs(vec4s v, float s) { CGLM_INLINE vec4s -glms_vec4_addadd(vec4s a, vec4s b) { - vec4s r; - glm_vec4_addadd(a.raw, b.raw, r.raw); - return r; +glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) { + glm_vec4_addadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec4s -glms_vec4_subadd(vec4s a, vec4s b) { - vec4s r; - glm_vec4_subadd(a.raw, b.raw, r.raw); - return r; +glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) { + glm_vec4_subadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec4s -glms_vec4_muladd(vec4s a, vec4s b) { - vec4s r; - glm_vec4_muladd(a.raw, b.raw, r.raw); - return r; +glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) { + glm_vec4_muladd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec4s -glms_vec4_muladds(vec4s a, float s) { - vec4s r; - glm_vec4_muladds(a.raw, s, r.raw); - return r; +glms_vec4_muladds(vec4s a, float s, vec4s dest) { + glm_vec4_muladds(a.raw, s, dest.raw); + return dest; } CGLM_INLINE vec4s -glms_vec4_maxadd(vec4s a, vec4s b) { - vec4s r; - glm_vec4_maxadd(a.raw, b.raw, r.raw); - return r; +glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) { + glm_vec4_maxadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE vec4s -glms_vec4_minadd(vec4s a, vec4s b) { - vec4s r; - glm_vec4_minadd(a.raw, b.raw, r.raw); - return r; +glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) { + glm_vec4_minadd(a.raw, b.raw, dest.raw); + return dest; } CGLM_INLINE @@ -251,4 +268,12 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) { return r; } +CGLM_INLINE +vec4s +glms_vec4_cubic(float s) { + vec4s r; + glm_vec4_cubic(s, r.raw); + return r; +} + #endif /* cglm_vec4s_h */ From fd3b0634d273929dc4dc64ad4f7617e9f3910708 Mon Sep 17 00:00:00 2001 From: acoto87 Date: Mon, 20 May 2019 17:11:10 -0500 Subject: [PATCH 27/56] Change for function that output multiple values - Now the functions that output mutliple values, such as glms_decompose_rs and glms_decompose receive pointers. - Added missing comments to struct/vec3 and struct/vec4 files. --- include/cglm/structs/affine.h | 16 +- include/cglm/structs/box.h | 45 ++-- include/cglm/structs/vec3-ext.h | 98 ++++++++ include/cglm/structs/vec3.h | 422 +++++++++++++++++++++++++++++++- include/cglm/structs/vec4-ext.h | 98 ++++++++ include/cglm/structs/vec4.h | 321 +++++++++++++++++++++++- 6 files changed, 947 insertions(+), 53 deletions(-) diff --git a/include/cglm/structs/affine.h b/include/cglm/structs/affine.h index 72cab13..481aaa3 100644 --- a/include/cglm/structs/affine.h +++ b/include/cglm/structs/affine.h @@ -25,8 +25,8 @@ CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis); CGLM_INLINE vec3s glms_decompose_scalev(mat4s m); CGLM_INLINE bool glms_uniscaled(mat4s m); - CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s r, vec3s s); - CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s r, vec3s s); + CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s); + CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s * r, vec3s * s); */ #ifndef cglm_affines_h @@ -315,10 +315,8 @@ glms_uniscaled(mat4s m) { */ CGLM_INLINE void -glms_decompose_rs(mat4s m, mat4s r, vec3s s) { - // FIX: Modify param - // - glm_decompose_rs(m.raw, r.raw, s.raw); +glms_decompose_rs(mat4s m, mat4s * __restrict r, vec3s * __restrict s) { + glm_decompose_rs(m.raw, r->raw, s->raw); } /*! @@ -332,10 +330,8 @@ glms_decompose_rs(mat4s m, mat4s r, vec3s s) { */ CGLM_INLINE void -glms_decompose(mat4s m, vec4s t, mat4s r, vec3s s) { - // FIX: Modify param - // - glm_decompose(m.raw, t.raw, r.raw, s.raw); +glms_decompose(mat4s m, vec4s * __restrict t, mat4s * __restrict r, vec3s * __restrict s) { + glm_decompose(m.raw, t->raw, r->raw, s->raw); } #endif /* cglm_affines_h */ diff --git a/include/cglm/structs/box.h b/include/cglm/structs/box.h index ca7c3a6..4251bd7 100644 --- a/include/cglm/structs/box.h +++ b/include/cglm/structs/box.h @@ -162,7 +162,7 @@ glms_aabb_isvalid(vec3s box[2]) { CGLM_INLINE float glms_aabb_size(vec3s box[2]) { - return glms_vec3_distance(box[0], box[1]); + return glm_vec3_distance(box[0].raw, box[1].raw); } /*! @@ -197,9 +197,12 @@ glms_aabb_center(vec3s box[2]) { CGLM_INLINE bool glms_aabb_aabb(vec3s box[2], vec3s other[2]) { - return (box[0].x <= other[1].x && box[1].x >= other[0].x) - && (box[0].y <= other[1].y && box[1].y >= other[0].y) - && (box[0].z <= other[1].z && box[1].z >= other[0].z); + vec3 rawBox[2]; + vec3 rawOther[2]; + + glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawOther, other, 2); + return glm_aabb_aabb(rawBox, rawOther); } /*! @@ -213,19 +216,11 @@ glms_aabb_aabb(vec3s box[2], vec3s other[2]) { */ CGLM_INLINE bool -glms_aabb_sphere(vec3s box[2], vec4 s) { - float dmin; - int a, b, c; - - a = s[0] >= box[0].x; - b = s[1] >= box[0].y; - c = s[2] >= box[0].z; - - dmin = glm_pow2(s[0] - box[a].x) - + glm_pow2(s[1] - box[b].y) - + glm_pow2(s[2] - box[c].z); - - return dmin <= glm_pow2(s[3]); +glms_aabb_sphere(vec3s box[2], vec4s s) { + vec3 rawBox[2]; + + glms_vec3_unpack(rawBox, box, 2); + return glm_aabb_sphere(rawBox, s.raw); } /*! @@ -237,9 +232,10 @@ glms_aabb_sphere(vec3s box[2], vec4 s) { CGLM_INLINE bool glms_aabb_point(vec3s box[2], vec3s point) { - return (point.x >= box[0].x && point.x <= box[1].x) - && (point.y >= box[0].y && point.y <= box[1].y) - && (point.z >= box[0].z && point.z <= box[1].z); + vec3 rawBox[2]; + + glms_vec3_unpack(rawBox, box, 2); + return glm_aabb_point(rawBox, point.raw); } /*! @@ -251,9 +247,12 @@ glms_aabb_point(vec3s box[2], vec3s point) { CGLM_INLINE bool glms_aabb_contains(vec3s box[2], vec3s other[2]) { - return (box[0].x <= other[0].x && box[1].x >= other[1].x) - && (box[0].y <= other[0].y && box[1].y >= other[1].y) - && (box[0].z <= other[0].z && box[1].z >= other[1].z); + vec3 rawBox[2]; + vec3 rawOther[2]; + + glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawOther, other, 2); + return glm_aabb_contains(rawBox, rawOther); } #endif /* cglm_boxs_h */ diff --git a/include/cglm/structs/vec3-ext.h b/include/cglm/structs/vec3-ext.h index 0449b3d..2e5e729 100644 --- a/include/cglm/structs/vec3-ext.h +++ b/include/cglm/structs/vec3-ext.h @@ -5,6 +5,27 @@ * Full license can be found in the LICENSE file */ +/*! + * @brief SIMD like functions + */ + +/* + Functions: + CGLM_INLINE vec3s glms_vec3_broadcast(float val); + CGLM_INLINE bool glms_vec3_eq(vec3s v, float val); + CGLM_INLINE bool glms_vec3_eq_eps(vec3s v, float val); + CGLM_INLINE bool glms_vec3_eq_all(vec3s v); + CGLM_INLINE bool glms_vec3_eqv(vec3s a, vec3s b); + CGLM_INLINE bool glms_vec3_eqv_eps(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_max(vec3s v); + CGLM_INLINE float glms_vec3_min(vec3s v); + CGLM_INLINE bool glms_vec3_isnan(vec3s v); + CGLM_INLINE bool glms_vec3_isinf(vec3s v); + CGLM_INLINE bool glms_vec3_isvalid(vec3s v); + CGLM_INLINE vec3s glms_vec3_sign(vec3s v); + CGLM_INLINE vec3s glms_vec3_sqrt(vec3s v); + */ + #ifndef cglm_vec3s_ext_h #define cglm_vec3s_ext_h @@ -13,6 +34,12 @@ #include "../util.h" #include "../vec3-ext.h" +/*! + * @brief fill a vector with specified value + * + * @param[in] val value + * @returns dest + */ CGLM_INLINE vec3s glms_vec3_broadcast(float val) { @@ -21,66 +48,131 @@ glms_vec3_broadcast(float val) { return r; } +/*! + * @brief check if vector is equal to value (without epsilon) + * + * @param[in] v vector + * @param[in] val value + */ CGLM_INLINE bool glms_vec3_eq(vec3s v, float val) { return glm_vec3_eq(v.raw, val); } +/*! + * @brief check if vector is equal to value (with epsilon) + * + * @param[in] v vector + * @param[in] val value + */ CGLM_INLINE bool glms_vec3_eq_eps(vec3s v, float val) { return glm_vec3_eq_eps(v.raw, val); } +/*! + * @brief check if vectors members are equal (without epsilon) + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec3_eq_all(vec3s v) { return glm_vec3_eq_all(v.raw); } +/*! + * @brief check if vector is equal to another (without epsilon) + * + * @param[in] a vector + * @param[in] b vector + */ CGLM_INLINE bool glms_vec3_eqv(vec3s a, vec3s b) { return glm_vec3_eqv(a.raw, b.raw); } +/*! + * @brief check if vector is equal to another (with epsilon) + * + * @param[in] a vector + * @param[in] b vector + */ CGLM_INLINE bool glms_vec3_eqv_eps(vec3s a, vec3s b) { return glm_vec3_eqv_eps(a.raw, b.raw); } +/*! + * @brief max value of vector + * + * @param[in] v vector + */ CGLM_INLINE float glms_vec3_max(vec3s v) { return glm_vec3_max(v.raw); } +/*! + * @brief min value of vector + * + * @param[in] v vector + */ CGLM_INLINE float glms_vec3_min(vec3s v) { return glm_vec3_min(v.raw); } +/*! + * @brief check if all items are NaN (not a number) + * you should only use this in DEBUG mode or very critical asserts + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec3_isnan(vec3s v) { return glm_vec3_isnan(v.raw); } +/*! + * @brief check if all items are INFINITY + * you should only use this in DEBUG mode or very critical asserts + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec3_isinf(vec3s v) { return glm_vec3_isinf(v.raw); } +/*! + * @brief check if all items are valid number + * you should only use this in DEBUG mode or very critical asserts + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec3_isvalid(vec3s v) { return glm_vec3_isvalid(v.raw); } +/*! + * @brief get sign of 32 bit float as +1, -1, 0 + * + * Important: It returns 0 for zero/NaN input + * + * @param v vector + * @returns sign vector + */ CGLM_INLINE vec3s glms_vec3_sign(vec3s v) { @@ -89,6 +181,12 @@ glms_vec3_sign(vec3s v) { return r; } +/*! + * @brief square root of each vector item + * + * @param[in] v vector + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_sqrt(vec3s v) { diff --git a/include/cglm/structs/vec3.h b/include/cglm/structs/vec3.h index 312d59a..766742b 100644 --- a/include/cglm/structs/vec3.h +++ b/include/cglm/structs/vec3.h @@ -5,6 +5,67 @@ * Full license can be found in the LICENSE file */ +/* + Macros: + GLMS_VEC3_ONE_INIT + GLMS_VEC3_ZERO_INIT + GLMS_VEC3_ONE + GLMS_VEC3_ZERO + GLMS_YUP + GLMS_ZUP + GLMS_XUP + + Functions: + CGLM_INLINE vec3s glms_vec3(vec4s v4); + CGLM_INLINE vec3s glms_vec3_copy(vec3s v); + CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len); + CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len); + CGLM_INLINE vec3s glms_vec3_zero(); + CGLM_INLINE vec3s glms_vec3_one(); + CGLM_INLINE float glms_vec3_dot(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_norm2(vec3s v); + CGLM_INLINE float glms_vec3_norm(vec3s v); + CGLM_INLINE vec3s glms_vec3_add(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_adds(vec3s a, float s); + CGLM_INLINE vec3s glms_vec3_sub(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_subs(vec3s a, float s); + CGLM_INLINE vec3s glms_vec3_mul(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_scale(vec3s v, float s); + CGLM_INLINE vec3s glms_vec3_scale_as(vec3s v, float s); + CGLM_INLINE vec3s glms_vec3_div(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_divs(vec3s a, float s); + CGLM_INLINE vec3s glms_vec3_addadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_subadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_muladd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest); + CGLM_INLINE vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_flipsign(vec3s v); + CGLM_INLINE vec3s glms_vec3_negate(vec3s v); + CGLM_INLINE vec3s glms_vec3_inv(vec3s v); + CGLM_INLINE vec3s glms_vec3_normalize(vec3s v); + CGLM_INLINE vec3s glms_vec3_cross(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_crossn(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_distance(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_angle(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_rotate(vec3s v, float angle, vec3s axis); + CGLM_INLINE vec3s glms_vec3_rotate_m4(mat4s m, vec3s v); + CGLM_INLINE vec3s glms_vec3_rotate_m3(mat3s m, vec3s v); + CGLM_INLINE vec3s glms_vec3_proj(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_center(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_distance2(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_maxv(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_minv(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_ortho(vec3s v); + CGLM_INLINE vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal); + CGLM_INLINE vec3s glms_vec3_lerp(vec3s from, vec3s to, float t); + + Convenient: + CGLM_INLINE vec3s glms_cross(vec3s a, vec3s b); + CGLM_INLINE float glms_dot(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_normalize(vec3s v); + */ + #ifndef cglm_vec3s_h #define cglm_vec3s_h @@ -24,6 +85,12 @@ #define GLMS_ZUP ((vec3s){0.0f, 0.0f, 1.0f}) #define GLMS_XUP ((vec3s){1.0f, 0.0f, 0.0f}) +/*! + * @brief init vec3 using vec4 + * + * @param[in] v4 vector4 + * @returns destination + */ CGLM_INLINE vec3s glms_vec3(vec4s v4) { @@ -32,6 +99,12 @@ glms_vec3(vec4s v4) { return r; } +/*! + * @brief copy all members of [a] to [dest] + * + * @param[in] a source + * @returns destination + */ CGLM_INLINE vec3s glms_vec3_copy(vec3s v) { @@ -40,6 +113,13 @@ glms_vec3_copy(vec3s v) { return r; } +/*! + * @brief pack an array of vec3 into an array of vec3s + * + * @param[out] dst array of vec3 + * @param[in] src array of vec3s + * @param[in] len number of elements + */ CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { @@ -52,6 +132,13 @@ glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { } } +/*! + * @brief unpack an array of vec3s into an array of vec3 + * + * @param[out] dst array of vec3s + * @param[in] src array of vec3 + * @param[in] len number of elements + */ CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { @@ -64,6 +151,12 @@ glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { } } +/*! + * @brief make vector zero + * + * @param[in] v vector + * @returns zero vector + */ CGLM_INLINE vec3s glms_vec3_zero() { @@ -72,6 +165,12 @@ glms_vec3_zero() { return r; } +/*! + * @brief make vector one + * + * @param[in] v vector + * @returns one vector + */ CGLM_INLINE vec3s glms_vec3_one() { @@ -80,24 +179,57 @@ glms_vec3_one() { return r; } +/*! + * @brief vec3 dot product + * + * @param[in] a vector1 + * @param[in] b vector2 + * + * @return dot product + */ CGLM_INLINE float glms_vec3_dot(vec3s a, vec3s b) { return glm_vec3_dot(a.raw, b.raw); } +/*! + * @brief norm * norm (magnitude) of vec + * + * we can use this func instead of calling norm * norm, because it would call + * sqrtf fuction twice but with this func we can avoid func call, maybe this is + * not good name for this func + * + * @param[in] v vector + * + * @return norm * norm + */ CGLM_INLINE float glms_vec3_norm2(vec3s v) { return glm_vec3_norm2(v.raw); } +/*! + * @brief norm (magnitude) of vec3 + * + * @param[in] v vector + * + * @return norm + */ CGLM_INLINE float glms_vec3_norm(vec3s v) { return glm_vec3_norm(v.raw); } +/*! + * @brief add a vector to b vector store result in dest + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_add(vec3s a, vec3s b) { @@ -106,6 +238,13 @@ glms_vec3_add(vec3s a, vec3s b) { return r; } +/*! + * @brief add scalar to v vector store result in dest (d = v + s) + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_adds(vec3s a, float s) { @@ -114,6 +253,13 @@ glms_vec3_adds(vec3s a, float s) { return r; } +/*! + * @brief subtract b vector from a vector store result in dest + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_sub(vec3s a, vec3s b) { @@ -122,6 +268,13 @@ glms_vec3_sub(vec3s a, vec3s b) { return r; } +/*! + * @brief subtract scalar from v vector store result in dest (d = v - s) + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_subs(vec3s a, float s) { @@ -130,6 +283,13 @@ glms_vec3_subs(vec3s a, float s) { return r; } +/*! + * @brief multiply two vector (component-wise multiplication) + * + * @param a vector1 + * @param b vector2 + * @returns v3 = (a[0] * b[0], a[1] * b[1], a[2] * b[2]) + */ CGLM_INLINE vec3s glms_vec3_mul(vec3s a, vec3s b) { @@ -138,6 +298,13 @@ glms_vec3_mul(vec3s a, vec3s b) { return r; } +/*! + * @brief multiply/scale vec3 vector with scalar: result = v * s + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_scale(vec3s v, float s) { @@ -146,6 +313,13 @@ glms_vec3_scale(vec3s v, float s) { return r; } +/*! + * @brief make vec3 vector scale as specified: result = unit(v) * s + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec3s glms_vec3_scale_as(vec3s v, float s) { @@ -154,6 +328,13 @@ glms_vec3_scale_as(vec3s v, float s) { return r; } +/*! + * @brief div vector with another component-wise division: d = a / b + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2]) + */ CGLM_INLINE vec3s glms_vec3_div(vec3s a, vec3s b) { @@ -162,6 +343,13 @@ glms_vec3_div(vec3s a, vec3s b) { return r; } +/*! + * @brief div vector with scalar: d = v / s + * + * @param[in] v vector + * @param[in] s scalar + * @returns result = (a[0]/s, a[1]/s, a[2]/s) + */ CGLM_INLINE vec3s glms_vec3_divs(vec3s a, float s) { @@ -170,6 +358,15 @@ glms_vec3_divs(vec3s a, float s) { return r; } +/*! + * @brief add two vectors and add result to sum + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += (a + b) + */ CGLM_INLINE vec3s glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) { @@ -177,6 +374,15 @@ glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) { return dest; } +/*! + * @brief sub two vectors and add result to dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += (a + b) + */ CGLM_INLINE vec3s glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) { @@ -184,6 +390,15 @@ glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) { return dest; } +/*! + * @brief mul two vectors and add result to dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += (a * b) + */ CGLM_INLINE vec3s glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) { @@ -191,6 +406,15 @@ glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) { return dest; } +/*! + * @brief mul vector with scalar and add result to sum + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector + * @param[in] s scalar + * @returns dest += (a * b) + */ CGLM_INLINE vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest) { @@ -198,6 +422,15 @@ glms_vec3_muladds(vec3s a, float s, vec3s dest) { return dest; } +/*! + * @brief add max of two vector to result/dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += max(a, b) + */ CGLM_INLINE vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) { @@ -205,6 +438,15 @@ glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) { return dest; } +/*! + * @brief add min of two vector to result/dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += min(a, b) + */ CGLM_INLINE vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) { @@ -212,6 +454,12 @@ glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) { return dest; } +/*! + * @brief negate vector components and store result in dest + * + * @param[in] v vector + * @returns result vector + */ CGLM_INLINE vec3s glms_vec3_flipsign(vec3s v) { @@ -219,6 +467,12 @@ glms_vec3_flipsign(vec3s v) { return v; } +/*! + * @brief negate vector components + * + * @param[in] v vector + * @returns negated vector + */ CGLM_INLINE vec3s glms_vec3_negate(vec3s v) { @@ -226,13 +480,12 @@ glms_vec3_negate(vec3s v) { return v; } -CGLM_INLINE -vec3s -glms_vec3_inv(vec3s v) { - glm_vec3_inv(v.raw); - return v; -} - +/*! + * @brief normalize vec3 and store result in same vec + * + * @param[in] v vector + * @returns normalized vector + */ CGLM_INLINE vec3s glms_vec3_normalize(vec3s v) { @@ -240,6 +493,13 @@ glms_vec3_normalize(vec3s v) { return v; } +/*! + * @brief cross product of two vector (RH) + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns destination + */ CGLM_INLINE vec3s glms_vec3_cross(vec3s a, vec3s b) { @@ -248,6 +508,13 @@ glms_vec3_cross(vec3s a, vec3s b) { return r; } +/*! + * @brief cross product of two vector (RH) and normalize the result + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns destination + */ CGLM_INLINE vec3s glms_vec3_crossn(vec3s a, vec3s b) { @@ -256,18 +523,28 @@ glms_vec3_crossn(vec3s a, vec3s b) { return r; } -CGLM_INLINE -float -glms_vec3_distance(vec3s a, vec3s b) { - return glm_vec3_distance(a.raw, b.raw); -} - +/*! + * @brief angle betwen two vector + * + * @param[in] a vector1 + * @param[in] b vector2 + * + * @return angle as radians + */ CGLM_INLINE float glms_vec3_angle(vec3s a, vec3s b) { return glm_vec3_angle(a.raw, b.raw); } +/*! + * @brief rotate vec3 around axis by angle using Rodrigues' rotation formula + * + * @param[in] v vector + * @param[in] axis axis vector (must be unit vector) + * @param[in] angle angle by radians + * @returns rotated vector + */ CGLM_INLINE vec3s glms_vec3_rotate(vec3s v, float angle, vec3s axis) { @@ -275,6 +552,19 @@ glms_vec3_rotate(vec3s v, float angle, vec3s axis) { return v; } +/*! + * @brief apply rotation matrix to vector + * + * matrix format should be (no perspective): + * a b c x + * e f g y + * i j k z + * 0 0 0 w + * + * @param[in] m affine matrix or rot matrix + * @param[in] v vector + * @returns rotated vector + */ CGLM_INLINE vec3s glms_vec3_rotate_m4(mat4s m, vec3s v) { @@ -283,6 +573,13 @@ glms_vec3_rotate_m4(mat4s m, vec3s v) { return r; } +/*! + * @brief apply rotation matrix to vector + * + * @param[in] m affine matrix or rot matrix + * @param[in] v vector + * @returns rotated vector + */ CGLM_INLINE vec3s glms_vec3_rotate_m3(mat3s m, vec3s v) { @@ -291,6 +588,13 @@ glms_vec3_rotate_m3(mat3s m, vec3s v) { return r; } +/*! + * @brief project a vector onto b vector + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns projected vector + */ CGLM_INLINE vec3s glms_vec3_proj(vec3s a, vec3s b) { @@ -299,6 +603,13 @@ glms_vec3_proj(vec3s a, vec3s b) { return r; } +/** + * @brief find center point of two vector + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns center point + */ CGLM_INLINE vec3s glms_vec3_center(vec3s a, vec3s b) { @@ -307,12 +618,39 @@ glms_vec3_center(vec3s a, vec3s b) { return r; } +/** + * @brief squared distance between two vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @return squared distance (distance * distance) + */ CGLM_INLINE float glms_vec3_distance2(vec3s a, vec3s b) { return glm_vec3_distance2(a.raw, b.raw); } +/** + * @brief distance between two vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @return distance + */ +CGLM_INLINE +float +glms_vec3_distance(vec3s a, vec3s b) { + return glm_vec3_distance(a.raw, b.raw); +} + +/*! + * @brief max values of vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination + */ CGLM_INLINE vec3s glms_vec3_maxv(vec3s a, vec3s b) { @@ -321,6 +659,13 @@ glms_vec3_maxv(vec3s a, vec3s b) { return r; } +/*! + * @brief min values of vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination + */ CGLM_INLINE vec3s glms_vec3_minv(vec3s a, vec3s b) { @@ -329,6 +674,12 @@ glms_vec3_minv(vec3s a, vec3s b) { return r; } +/*! + * @brief possible orthogonal/perpendicular vector + * + * @param[in] v vector + * @returns orthogonal/perpendicular vector + */ CGLM_INLINE vec3s glms_vec3_ortho(vec3s v) { @@ -337,6 +688,14 @@ glms_vec3_ortho(vec3s v) { return r; } +/*! + * @brief clamp vector's individual members between min and max values + * + * @param[in] v vector + * @param[in] minVal minimum value + * @param[in] maxVal maximum value + * @returns clamped vector + */ CGLM_INLINE vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal) { @@ -344,6 +703,16 @@ glms_vec3_clamp(vec3s v, float minVal, float maxVal) { return v; } +/*! + * @brief linear interpolation between two vector + * + * formula: from + s * (to - from) + * + * @param[in] from from value + * @param[in] to to value + * @param[in] t interpolant (amount) clamped between 0 and 1 + * @returns destination + */ CGLM_INLINE vec3s glms_vec3_lerp(vec3s from, vec3s to, float t) { @@ -352,6 +721,15 @@ glms_vec3_lerp(vec3s from, vec3s to, float t) { return r; } +/*! + * @brief vec3 cross product + * + * this is just convenient wrapper + * + * @param[in] a source 1 + * @param[in] b source 2 + * @returns destination + */ CGLM_INLINE vec3s glms_cross(vec3s a, vec3s b) { @@ -360,12 +738,30 @@ glms_cross(vec3s a, vec3s b) { return r; } +/*! + * @brief vec3 dot product + * + * this is just convenient wrapper + * + * @param[in] a vector1 + * @param[in] b vector2 + * + * @return dot product + */ CGLM_INLINE float glms_dot(vec3s a, vec3s b) { return glm_dot(a.raw, b.raw); } +/*! + * @brief normalize vec3 and store result in same vec + * + * this is just convenient wrapper + * + * @param[in] v vector + * @returns normalized vector + */ CGLM_INLINE vec3s glms_normalize(vec3s v) { diff --git a/include/cglm/structs/vec4-ext.h b/include/cglm/structs/vec4-ext.h index 4fbb2d3..0b81b49 100644 --- a/include/cglm/structs/vec4-ext.h +++ b/include/cglm/structs/vec4-ext.h @@ -5,6 +5,27 @@ * Full license can be found in the LICENSE file */ +/*! + * @brief SIMD like functions + */ + +/* + Functions: + CGLM_INLINE vec4s glms_vec4_broadcast(float val); + CGLM_INLINE bool glms_vec4_eq(vec4s v, float val); + CGLM_INLINE bool glms_vec4_eq_eps(vec4s v, float val); + CGLM_INLINE bool glms_vec4_eq_all(vec4s v); + CGLM_INLINE bool glms_vec4_eqv(vec4s a, vec4s b); + CGLM_INLINE bool glms_vec4_eqv_eps(vec4s a, vec4s b); + CGLM_INLINE float glms_vec4_max(vec4s v); + CGLM_INLINE float glms_vec4_min(vec4s v); + CGLM_INLINE bool glms_vec4_isnan(vec4s v); + CGLM_INLINE bool glms_vec4_isinf(vec4s v); + CGLM_INLINE bool glms_vec4_isvalid(vec4s v); + CGLM_INLINE vec4s glms_vec4_sign(vec4s v); + CGLM_INLINE vec4s glms_vec4_sqrt(vec4s v); + */ + #ifndef cglm_vec4s_ext_h #define cglm_vec4s_ext_h @@ -13,6 +34,12 @@ #include "../util.h" #include "../vec4-ext.h" +/*! + * @brief fill a vector with specified value + * + * @param val value + * @returns dest + */ CGLM_INLINE vec4s glms_vec4_broadcast(float val) { @@ -21,66 +48,131 @@ glms_vec4_broadcast(float val) { return r; } +/*! + * @brief check if vector is equal to value (without epsilon) + * + * @param v vector + * @param val value + */ CGLM_INLINE bool glms_vec4_eq(vec4s v, float val) { return glm_vec4_eq(v.raw, val); } +/*! + * @brief check if vector is equal to value (with epsilon) + * + * @param v vector + * @param val value + */ CGLM_INLINE bool glms_vec4_eq_eps(vec4s v, float val) { return glm_vec4_eq_eps(v.raw, val); } +/*! + * @brief check if vectors members are equal (without epsilon) + * + * @param v vector + */ CGLM_INLINE bool glms_vec4_eq_all(vec4s v) { return glm_vec4_eq_all(v.raw); } +/*! + * @brief check if vector is equal to another (without epsilon) + * + * @param a vector + * @param b vector + */ CGLM_INLINE bool glms_vec4_eqv(vec4s a, vec4s b) { return glm_vec4_eqv(a.raw, b.raw); } +/*! + * @brief check if vector is equal to another (with epsilon) + * + * @param a vector + * @param b vector + */ CGLM_INLINE bool glms_vec4_eqv_eps(vec4s a, vec4s b) { return glm_vec4_eqv_eps(a.raw, b.raw); } +/*! + * @brief max value of vector + * + * @param v vector + */ CGLM_INLINE float glms_vec4_max(vec4s v) { return glm_vec4_max(v.raw); } +/*! + * @brief min value of vector + * + * @param v vector + */ CGLM_INLINE float glms_vec4_min(vec4s v) { return glm_vec4_min(v.raw); } +/*! + * @brief check if one of items is NaN (not a number) + * you should only use this in DEBUG mode or very critical asserts + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec4_isnan(vec4s v) { return glm_vec4_isnan(v.raw); } +/*! + * @brief check if one of items is INFINITY + * you should only use this in DEBUG mode or very critical asserts + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec4_isinf(vec4s v) { return glm_vec4_isinf(v.raw); } +/*! + * @brief check if all items are valid number + * you should only use this in DEBUG mode or very critical asserts + * + * @param[in] v vector + */ CGLM_INLINE bool glms_vec4_isvalid(vec4s v) { return glm_vec4_isvalid(v.raw); } +/*! + * @brief get sign of 32 bit float as +1, -1, 0 + * + * Important: It returns 0 for zero/NaN input + * + * @param v vector + * @returns sign vector + */ CGLM_INLINE vec4s glms_vec4_sign(vec4s v) { @@ -89,6 +181,12 @@ glms_vec4_sign(vec4s v) { return r; } +/*! + * @brief square root of each vector item + * + * @param[in] v vector + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_sqrt(vec4s v) { diff --git a/include/cglm/structs/vec4.h b/include/cglm/structs/vec4.h index 956fee1..2f950a7 100644 --- a/include/cglm/structs/vec4.h +++ b/include/cglm/structs/vec4.h @@ -5,6 +5,51 @@ * Full license can be found in the LICENSE file */ +/* + Macros: + GLM_VEC4_ONE_INIT + GLM_VEC4_BLACK_INIT + GLM_VEC4_ZERO_INIT + GLM_VEC4_ONE + GLM_VEC4_BLACK + GLM_VEC4_ZERO + + Functions: + CGLM_INLINE vec4s glms_vec4(vec3s v3, float last); + CGLM_INLINE vec3s glms_vec4_copy3(vec4s v); + CGLM_INLINE vec4s glms_vec4_copy(vec4s v); + CGLM_INLINE vec4s glms_vec4_ucopy(vec4s v); + CGLM_INLINE void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len); + CGLM_INLINE void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len); + CGLM_INLINE float glms_vec4_dot(vec4s a, vec4s b); + CGLM_INLINE float glms_vec4_norm2(vec4s v); + CGLM_INLINE float glms_vec4_norm(vec4s v); + CGLM_INLINE vec4s glms_vec4_add(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_adds(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_sub(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_subs(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_mul(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_scale(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_scale_as(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_div(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_divs(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_addadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_subadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_muladd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest); + CGLM_INLINE vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_negate(vec4s v); + CGLM_INLINE vec4s glms_vec4_inv(vec4s v); + CGLM_INLINE vec4s glms_vec4_normalize(vec4s v); + CGLM_INLINE float glms_vec4_distance(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_maxv(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_minv(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal); + CGLM_INLINE vec4s glms_vec4_lerp(vec4s from, vec4s to, float t); + CGLM_INLINE vec4s glms_vec4_cubic(float s); + */ + #ifndef cglm_vec4s_h #define cglm_vec4s_h @@ -22,6 +67,13 @@ #define GLMS_VEC4_BLACK ((vec4s)GLM_VEC4_BLACK_INIT) #define GLMS_VEC4_ZERO ((vec4s)GLM_VEC4_ZERO_INIT) +/*! + * @brief init vec4 using vec3 + * + * @param[in] v3 vector3 + * @param[in] last last item + * @returns destination + */ CGLM_INLINE vec4s glms_vec4(vec3s v3, float last) { @@ -30,6 +82,12 @@ glms_vec4(vec3s v3, float last) { return r; } +/*! + * @brief copy first 3 members of [a] to [dest] + * + * @param[in] a source + * @returns destination + */ CGLM_INLINE vec3s glms_vec4_copy3(vec4s v) { @@ -38,6 +96,12 @@ glms_vec4_copy3(vec4s v) { return r; } +/*! + * @brief copy all members of [a] to [dest] + * + * @param[in] v source + * @returns destination + */ CGLM_INLINE vec4s glms_vec4_copy(vec4s v) { @@ -46,6 +110,14 @@ glms_vec4_copy(vec4s v) { return r; } +/*! + * @brief copy all members of [a] to [dest] + * + * alignment is not required + * + * @param[in] v source + * @returns destination + */ CGLM_INLINE vec4s glms_vec4_ucopy(vec4s v) { @@ -54,6 +126,13 @@ glms_vec4_ucopy(vec4s v) { return r; } +/*! + * @brief pack an array of vec4 into an array of vec4s + * + * @param[out] dst array of vec4 + * @param[in] src array of vec4s + * @param[in] len number of elements + */ CGLM_INLINE void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { @@ -66,6 +145,13 @@ glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { } } +/*! + * @brief unpack an array of vec4s into an array of vec4 + * + * @param[out] dst array of vec4s + * @param[in] src array of vec4 + * @param[in] len number of elements + */ CGLM_INLINE void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { @@ -78,24 +164,85 @@ glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { } } +/*! + * @brief make vector zero + * + * @param[in] v vector + * @returns zero vector + */ +CGLM_INLINE +vec4s +glms_vec4_zero() { + vec4s r; + glm_vec4_zero(r.raw); + return r; +} + +/*! + * @brief make vector one + * + * @param[in] v vector + * @returns one vector + */ +CGLM_INLINE +vec4s +glms_vec4_one() { + vec4s r; + glm_vec4_one(r.raw); + return r; +} + +/*! + * @brief vec4 dot product + * + * @param[in] a vector1 + * @param[in] b vector2 + * + * @return dot product + */ CGLM_INLINE float glms_vec4_dot(vec4s a, vec4s b) { return glm_vec4_dot(a.raw, b.raw); } +/*! + * @brief norm * norm (magnitude) of vec + * + * we can use this func instead of calling norm * norm, because it would call + * sqrtf fuction twice but with this func we can avoid func call, maybe this is + * not good name for this func + * + * @param[in] v vec4 + * + * @return norm * norm + */ CGLM_INLINE float glms_vec4_norm2(vec4s v) { return glm_vec4_norm2(v.raw); } +/*! + * @brief norm (magnitude) of vec4 + * + * @param[in] v vector + * + * @return norm + */ CGLM_INLINE float glms_vec4_norm(vec4s v) { return glm_vec4_norm(v.raw); } +/*! + * @brief add b vector to a vector store result in dest + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_add(vec4s a, vec4s b) { @@ -104,6 +251,13 @@ glms_vec4_add(vec4s a, vec4s b) { return r; } +/*! + * @brief add scalar to v vector store result in dest (d = v + vec(s)) + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_adds(vec4s v, float s) { @@ -112,6 +266,13 @@ glms_vec4_adds(vec4s v, float s) { return r; } +/*! + * @brief subtract b vector from a vector store result in dest (d = a - b) + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_sub(vec4s a, vec4s b) { @@ -120,6 +281,13 @@ glms_vec4_sub(vec4s a, vec4s b) { return r; } +/*! + * @brief subtract scalar from v vector store result in dest (d = v - vec(s)) + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_subs(vec4s v, float s) { @@ -128,6 +296,13 @@ glms_vec4_subs(vec4s v, float s) { return r; } +/*! + * @brief multiply two vector (component-wise multiplication) + * + * @param a vector1 + * @param b vector2 + * @returns dest = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]) + */ CGLM_INLINE vec4s glms_vec4_mul(vec4s a, vec4s b) { @@ -136,6 +311,13 @@ glms_vec4_mul(vec4s a, vec4s b) { return r; } +/*! + * @brief multiply/scale vec4 vector with scalar: result = v * s + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_scale(vec4s v, float s) { @@ -144,6 +326,13 @@ glms_vec4_scale(vec4s v, float s) { return r; } +/*! + * @brief make vec4 vector scale as specified: result = unit(v) * s + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_scale_as(vec4s v, float s) { @@ -152,6 +341,13 @@ glms_vec4_scale_as(vec4s v, float s) { return r; } +/*! + * @brief div vector with another component-wise division: d = a / b + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2], a[3]/b[3]) + */ CGLM_INLINE vec4s glms_vec4_div(vec4s a, vec4s b) { @@ -160,6 +356,13 @@ glms_vec4_div(vec4s a, vec4s b) { return r; } +/*! + * @brief div vec4 vector with scalar: d = v / s + * + * @param[in] v vector + * @param[in] s scalar + * @returns destination vector + */ CGLM_INLINE vec4s glms_vec4_divs(vec4s v, float s) { @@ -168,6 +371,15 @@ glms_vec4_divs(vec4s v, float s) { return r; } +/*! + * @brief add two vectors and add result to sum + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += (a + b) + */ CGLM_INLINE vec4s glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) { @@ -175,6 +387,15 @@ glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) { return dest; } +/*! + * @brief sub two vectors and add result to dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += (a - b) + */ CGLM_INLINE vec4s glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) { @@ -182,6 +403,15 @@ glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) { return dest; } +/*! + * @brief mul two vectors and add result to dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += (a * b) + */ CGLM_INLINE vec4s glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) { @@ -189,6 +419,15 @@ glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) { return dest; } +/*! + * @brief mul vector with scalar and add result to sum + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector + * @param[in] s scalar + * @returns dest += (a * b) + */ CGLM_INLINE vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest) { @@ -196,6 +435,15 @@ glms_vec4_muladds(vec4s a, float s, vec4s dest) { return dest; } +/*! + * @brief add max of two vector to result/dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += max(a, b) + */ CGLM_INLINE vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) { @@ -203,6 +451,15 @@ glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) { return dest; } +/*! + * @brief add min of two vector to result/dest + * + * it applies += operator so dest must be initialized + * + * @param[in] a vector 1 + * @param[in] b vector 2 + * @returns dest += min(a, b) + */ CGLM_INLINE vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) { @@ -210,6 +467,12 @@ glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) { return dest; } +/*! + * @brief negate vector components and store result in dest + * + * @param[in] v vector + * @returns result vector + */ CGLM_INLINE vec4s glms_vec4_negate(vec4s v) { @@ -217,13 +480,12 @@ glms_vec4_negate(vec4s v) { return v; } -CGLM_INLINE -vec4s -glms_vec4_inv(vec4s v) { - glm_vec4_inv(v.raw); - return v; -} - +/*! + * @brief normalize vec4 and store result in same vec + * + * @param[in] v vector + * @returns normalized vector + */ CGLM_INLINE vec4s glms_vec4_normalize(vec4s v) { @@ -231,12 +493,26 @@ glms_vec4_normalize(vec4s v) { return v; } +/** + * @brief distance between two vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @return returns distance + */ CGLM_INLINE float glms_vec4_distance(vec4s a, vec4s b) { return glm_vec4_distance(a.raw, b.raw); } +/*! + * @brief max values of vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination + */ CGLM_INLINE vec4s glms_vec4_maxv(vec4s a, vec4s b) { @@ -245,6 +521,13 @@ glms_vec4_maxv(vec4s a, vec4s b) { return r; } +/*! + * @brief min values of vectors + * + * @param[in] a vector1 + * @param[in] b vector2 + * @returns destination + */ CGLM_INLINE vec4s glms_vec4_minv(vec4s a, vec4s b) { @@ -253,6 +536,14 @@ glms_vec4_minv(vec4s a, vec4s b) { return r; } +/*! + * @brief clamp vector's individual members between min and max values + * + * @param[in] v vector + * @param[in] minVal minimum value + * @param[in] maxVal maximum value + * @returns clamped vector + */ CGLM_INLINE vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal) { @@ -260,6 +551,16 @@ glms_vec4_clamp(vec4s v, float minVal, float maxVal) { return v; } +/*! + * @brief linear interpolation between two vector + * + * formula: from + s * (to - from) + * + * @param[in] from from value + * @param[in] to to value + * @param[in] t interpolant (amount) clamped between 0 and 1 + * @returns destination + */ CGLM_INLINE vec4s glms_vec4_lerp(vec4s from, vec4s to, float t) { @@ -268,6 +569,12 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) { return r; } +/*! + * @brief helper to fill vec4 as [S^3, S^2, S, 1] + * + * @param[in] s parameter + * @returns destination + */ CGLM_INLINE vec4s glms_vec4_cubic(float s) { From ba2031d977a846786d8ef373d02c0f12e790d4dc Mon Sep 17 00:00:00 2001 From: acoto87 Date: Tue, 21 May 2019 16:45:34 -0500 Subject: [PATCH 28/56] - Rename `structs` folder to `struct` - Include files in `cglms.h` - Fix style issues (tabs to spaces, open brace without newline) --- include/cglm/cglms.h | 18 +- include/cglm/{structs => struct}/affine.h | 206 +++++++++--------- include/cglm/{structs => struct}/box.h | 86 ++++---- include/cglm/{structs => struct}/color.h | 2 +- include/cglm/{structs => struct}/curve.h | 2 +- include/cglm/{structs => struct}/frustum.h | 42 ++-- include/cglm/{structs => struct}/io.h | 10 +- include/cglm/{structs => struct}/mat3.h | 0 include/cglm/{structs => struct}/mat4.h | 6 +- include/cglm/{structs => struct}/plane.h | 4 +- include/cglm/{structs => struct}/project.h | 22 +- include/cglm/{structs => struct}/sphere.h | 0 include/cglm/{structs => struct}/vec3-ext.h | 32 +-- include/cglm/{structs => struct}/vec3.h | 225 ++++++++++---------- include/cglm/{structs => struct}/vec4-ext.h | 34 +-- include/cglm/{structs => struct}/vec4.h | 182 ++++++++-------- include/cglm/types-struct.h | 21 +- test/src/test_common.c | 12 +- 18 files changed, 447 insertions(+), 457 deletions(-) rename include/cglm/{structs => struct}/affine.h (53%) rename include/cglm/{structs => struct}/box.h (78%) rename include/cglm/{structs => struct}/color.h (93%) rename include/cglm/{structs => struct}/curve.h (96%) rename include/cglm/{structs => struct}/frustum.h (83%) rename include/cglm/{structs => struct}/io.h (90%) rename include/cglm/{structs => struct}/mat3.h (100%) rename include/cglm/{structs => struct}/mat4.h (99%) rename include/cglm/{structs => struct}/plane.h (93%) rename include/cglm/{structs => struct}/project.h (89%) rename include/cglm/{structs => struct}/sphere.h (100%) rename include/cglm/{structs => struct}/vec3-ext.h (81%) rename include/cglm/{structs => struct}/vec3.h (70%) rename include/cglm/{structs => struct}/vec4-ext.h (79%) rename include/cglm/{structs => struct}/vec4.h (70%) diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h index 67dbfa4..0ecc8de 100644 --- a/include/cglm/cglms.h +++ b/include/cglm/cglms.h @@ -13,11 +13,19 @@ extern "C" { #include "cglm.h" #include "types-struct.h" -#include "structs/vec3.h" -#include "structs/vec4.h" -#include "structs/mat3.h" -#include "structs/mat4.h" -#include "structs/sphere.h" +#include "struct/vec3.h" +#include "struct/vec4.h" +#include "struct/mat3.h" +#include "struct/mat4.h" +#include "struct/affine.h" +#include "struct/frustum.h" +#include "struct/plane.h" +#include "struct/box.h" +#include "struct/color.h" +#include "struct/io.h" +#include "struct/project.h" +#include "struct/sphere.h" +#include "struct/curve.h" #ifdef __cplusplus } diff --git a/include/cglm/structs/affine.h b/include/cglm/struct/affine.h similarity index 53% rename from include/cglm/structs/affine.h rename to include/cglm/struct/affine.h index 481aaa3..0f753c5 100644 --- a/include/cglm/structs/affine.h +++ b/include/cglm/struct/affine.h @@ -8,25 +8,25 @@ /* Functions: CGLM_INLINE mat4s glms_translate(mat4s m, vec3s v); - CGLM_INLINE mat4s glms_translate_x(mat4s m, float x); - CGLM_INLINE mat4s glms_translate_y(mat4s m, float y); - CGLM_INLINE mat4s glms_translate_z(mat4s m, float z); - CGLM_INLINE mat4s glms_translate_make(vec3s v); - CGLM_INLINE mat4s glms_scale_to(mat4s m, vec3s v); - CGLM_INLINE mat4s glms_scale_make(vec3s v); - CGLM_INLINE mat4s glms_scale(mat4s m, vec3s v); - CGLM_INLINE mat4s glms_scale_uni(mat4s m, float s); - CGLM_INLINE mat4s glmx_rotate_x(mat4s m, float angle); - CGLM_INLINE mat4s glms_rotate_y(mat4s m, float angle); - CGLM_INLINE mat4s glms_rotate_z(mat4s m, float angle); - CGLM_INLINE mat4s glms_rotate_make(float angle, vec3s axis); - CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis); - CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis); - CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis); - CGLM_INLINE vec3s glms_decompose_scalev(mat4s m); - CGLM_INLINE bool glms_uniscaled(mat4s m); - CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s); - CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s * r, vec3s * s); + CGLM_INLINE mat4s glms_translate_x(mat4s m, float x); + CGLM_INLINE mat4s glms_translate_y(mat4s m, float y); + CGLM_INLINE mat4s glms_translate_z(mat4s m, float z); + CGLM_INLINE mat4s glms_translate_make(vec3s v); + CGLM_INLINE mat4s glms_scale_to(mat4s m, vec3s v); + CGLM_INLINE mat4s glms_scale_make(vec3s v); + CGLM_INLINE mat4s glms_scale(mat4s m, vec3s v); + CGLM_INLINE mat4s glms_scale_uni(mat4s m, float s); + CGLM_INLINE mat4s glmx_rotate_x(mat4s m, float angle); + CGLM_INLINE mat4s glms_rotate_y(mat4s m, float angle); + CGLM_INLINE mat4s glms_rotate_z(mat4s m, float angle); + CGLM_INLINE mat4s glms_rotate_make(float angle, vec3s axis); + CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis); + CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis); + CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis); + CGLM_INLINE vec3s glms_decompose_scalev(mat4s m); + CGLM_INLINE bool glms_uniscaled(mat4s m); + CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * r, vec3s * s); + CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s * r, vec3s * s); */ #ifndef cglm_affines_h @@ -47,71 +47,71 @@ glms_mat4_mul(mat4s m1, mat4s m2); * @brief translate existing transform matrix by v vector * and stores result in same matrix * - * @param[in] m affine transfrom - * @param[in] v translate vector [x, y, z] - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] v translate vector [x, y, z] + * @returns affine transfrom */ CGLM_INLINE mat4s glms_translate(mat4s m, vec3s v) { - glm_translate(m.raw, v.raw); - return m; + glm_translate(m.raw, v.raw); + return m; } /*! * @brief translate existing transform matrix by x factor * - * @param[in] m affine transfrom - * @param[in] x x factor - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] x x factor + * @returns affine transfrom */ CGLM_INLINE mat4s glms_translate_x(mat4s m, float x) { - glm_translate_x(m.raw, x); - return m; + glm_translate_x(m.raw, x); + return m; } /*! * @brief translate existing transform matrix by y factor * - * @param[in] m affine transfrom - * @param[in] y y factor - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] y y factor + * @returns affine transfrom */ CGLM_INLINE mat4s glms_translate_y(mat4s m, float y) { - glm_translate_y(m.raw, y); - return m; + glm_translate_y(m.raw, y); + return m; } /*! * @brief translate existing transform matrix by z factor * - * @param[in] m affine transfrom - * @param[in] z z factor - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] z z factor + * @returns affine transfrom */ CGLM_INLINE mat4s glms_translate_z(mat4s m, float z) { - glm_translate_z(m.raw, z); - return m; + glm_translate_z(m.raw, z); + return m; } /*! * @brief creates NEW translate transform matrix by v vector * - * @param[in] v translate vector [x, y, z] - * @returns affine transfrom + * @param[in] v translate vector [x, y, z] + * @returns affine transfrom */ CGLM_INLINE mat4s glms_translate_make(vec3s v) { - mat4s m; - glm_translate_make(m.raw, v.raw); - return m; + mat4s m; + glm_translate_make(m.raw, v.raw); + return m; } /*! @@ -123,88 +123,88 @@ glms_translate_make(vec3s v) { CGLM_INLINE mat4s glms_scale_make(vec3s v) { - mat4s m; - glm_scale_make(m.raw, v.raw); - return m; + mat4s m; + glm_scale_make(m.raw, v.raw); + return m; } /*! * @brief scales existing transform matrix by v vector * and stores result in same matrix * - * @param[in] m affine transfrom - * @param[in] v scale vector [x, y, z] - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] v scale vector [x, y, z] + * @returns affine transfrom */ CGLM_INLINE mat4s glms_scale(mat4s m, vec3s v) { - mat4s r; + mat4s r; glm_scale_to(m.raw, v.raw, r.raw); - return r; + return r; } /*! * @brief applies uniform scale to existing transform matrix v = [s, s, s] * and stores result in same matrix * - * @param[in] m affine transfrom - * @param[in] s scale factor - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] s scale factor + * @returns affine transfrom */ CGLM_INLINE mat4s glms_scale_uni(mat4s m, float s) { - glm_scale_uni(m.raw, s); - return m; + glm_scale_uni(m.raw, s); + return m; } /*! * @brief rotate existing transform matrix around X axis by angle * and store result in dest * - * @param[in] m affine transfrom - * @param[in] angle angle (radians) - * @returns rotated matrix + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @returns rotated matrix */ CGLM_INLINE mat4s glmx_rotate_x(mat4s m, float angle) { - mat4s r; - glm_rotate_x(m.raw, angle, r.raw); - return r; + mat4s r; + glm_rotate_x(m.raw, angle, r.raw); + return r; } /*! * @brief rotate existing transform matrix around Y axis by angle * and store result in dest * - * @param[in] m affine transfrom - * @param[in] angle angle (radians) - * @returns rotated matrix + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @returns rotated matrix */ CGLM_INLINE mat4s glms_rotate_y(mat4s m, float angle) { - mat4s r; - glm_rotate_y(m.raw, angle, r.raw); - return r; + mat4s r; + glm_rotate_y(m.raw, angle, r.raw); + return r; } /*! * @brief rotate existing transform matrix around Z axis by angle * and store result in dest * - * @param[in] m affine transfrom - * @param[in] angle angle (radians) - * @returns rotated matrix + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @returns rotated matrix */ CGLM_INLINE mat4s glms_rotate_z(mat4s m, float angle) { - mat4s r; - glm_rotate_z(m.raw, angle, r.raw); - return r; + mat4s r; + glm_rotate_z(m.raw, angle, r.raw); + return r; } /*! @@ -212,48 +212,48 @@ glms_rotate_z(mat4s m, float angle) { * * axis will be normalized so you don't need to normalize it * - * @param[in] angle angle (radians) - * @param[in] axis axis - * @returns affine transfrom + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom */ CGLM_INLINE mat4s glms_rotate_make(float angle, vec3s axis) { - mat4s m; - glm_rotate_make(m.raw, angle, axis.raw); - return m; + mat4s m; + glm_rotate_make(m.raw, angle, axis.raw); + return m; } /*! * @brief rotate existing transform matrix around given axis by angle * - * @param[in] m affine transfrom - * @param[in] angle angle (radians) - * @param[in] axis axis - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom */ CGLM_INLINE mat4s glms_rotate(mat4s m, float angle, vec3s axis) { - glm_rotate(m.raw, angle, axis.raw); - return m; + glm_rotate(m.raw, angle, axis.raw); + return m; } /*! * @brief rotate existing transform * around given axis by angle at given pivot point (rotation center) * - * @param[in] m affine transfrom - * @param[in] pivot rotation center - * @param[in] angle angle (radians) - * @param[in] axis axis - * @returns affine transfrom + * @param[in] m affine transfrom + * @param[in] pivot rotation center + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns affine transfrom */ CGLM_INLINE mat4s glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) { - glm_rotate_at(m.raw, pivot.raw, angle, axis.raw); - return m; + glm_rotate_at(m.raw, pivot.raw, angle, axis.raw); + return m; } /*! @@ -268,27 +268,27 @@ glms_rotate_at(mat4s m, vec3s pivot, float angle, vec3s axis) { * @param[in] pivot rotation center * @param[in] angle angle (radians) * @param[in] axis axis - * @returns affine transfrom + * @returns affine transfrom */ CGLM_INLINE mat4s glms_rotate_atm(mat4s m, vec3s pivot, float angle, vec3s axis) { - glm_rotate_atm(m.raw, pivot.raw, angle, axis.raw); - return m; + glm_rotate_atm(m.raw, pivot.raw, angle, axis.raw); + return m; } /*! * @brief decompose scale vector * * @param[in] m affine transform - * @returns scale vector (Sx, Sy, Sz) + * @returns scale vector (Sx, Sy, Sz) */ CGLM_INLINE vec3s glms_decompose_scalev(mat4s m) { - vec3s r; - glm_decompose_scalev(m.raw, r.raw); - return r; + vec3s r; + glm_decompose_scalev(m.raw, r.raw); + return r; } /*! @@ -302,7 +302,7 @@ glms_decompose_scalev(mat4s m) { CGLM_INLINE bool glms_uniscaled(mat4s m) { - return glm_uniscaled(m.raw); + return glm_uniscaled(m.raw); } /*! @@ -316,7 +316,7 @@ glms_uniscaled(mat4s m) { CGLM_INLINE void glms_decompose_rs(mat4s m, mat4s * __restrict r, vec3s * __restrict s) { - glm_decompose_rs(m.raw, r->raw, s->raw); + glm_decompose_rs(m.raw, r->raw, s->raw); } /*! diff --git a/include/cglm/structs/box.h b/include/cglm/struct/box.h similarity index 78% rename from include/cglm/structs/box.h rename to include/cglm/struct/box.h index 4251bd7..9dc915e 100644 --- a/include/cglm/structs/box.h +++ b/include/cglm/struct/box.h @@ -25,12 +25,12 @@ CGLM_INLINE void glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { - vec3 rawBox[2]; - vec3 rawDest[2]; + vec3 rawBox[2]; + vec3 rawDest[2]; - glms_vec3_unpack(rawBox, box, 2); - glm_aabb_transform(rawBox, m.raw, rawDest); - glms_vec3_pack(dest, rawDest, 2); + glms_vec3_unpack(rawBox, box, 2); + glm_aabb_transform(rawBox, m.raw, rawDest); + glms_vec3_pack(dest, rawDest, 2); } /*! @@ -46,14 +46,14 @@ glms_aabb_transform(vec3s box[2], mat4s m, vec3s dest[2]) { CGLM_INLINE void glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { - vec3 rawBox1[2]; - vec3 rawBox2[2]; - vec3 rawDest[2]; + vec3 rawBox1[2]; + vec3 rawBox2[2]; + vec3 rawDest[2]; - glms_vec3_unpack(rawBox1, box1, 2); - glms_vec3_unpack(rawBox2, box2, 2); - glm_aabb_merge(rawBox1, rawBox2, rawDest); - glms_vec3_pack(dest, rawDest, 2); + glms_vec3_unpack(rawBox1, box1, 2); + glms_vec3_unpack(rawBox2, box2, 2); + glm_aabb_merge(rawBox1, rawBox2, rawDest); + glms_vec3_pack(dest, rawDest, 2); } /*! @@ -70,14 +70,14 @@ glms_aabb_merge(vec3s box1[2], vec3s box2[2], vec3s dest[2]) { CGLM_INLINE void glms_aabb_crop(vec3s box[2], vec3s cropBox[2], vec3s dest[2]) { - vec3 rawBox[2]; - vec3 rawCropBox[2]; - vec3 rawDest[2]; + vec3 rawBox[2]; + vec3 rawCropBox[2]; + vec3 rawDest[2]; - glms_vec3_unpack(rawBox, box, 2); - glms_vec3_unpack(rawCropBox, cropBox, 2); - glm_aabb_crop(rawBox, rawCropBox, rawDest); - glms_vec3_pack(dest, rawDest, 2); + glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawCropBox, cropBox, 2); + glm_aabb_crop(rawBox, rawCropBox, rawDest); + glms_vec3_pack(dest, rawDest, 2); } /*! @@ -119,12 +119,12 @@ glms_aabb_crop_until(vec3s box[2], CGLM_INLINE bool glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { - vec3 rawBox[2]; - vec4 rawPlanes[6]; + vec3 rawBox[2]; + vec4 rawPlanes[6]; - glms_vec3_unpack(rawBox, box, 2); - glms_vec4_unpack(rawPlanes, planes, 6); - return glm_aabb_frustum(rawBox, rawPlanes); + glms_vec3_unpack(rawBox, box, 2); + glms_vec4_unpack(rawPlanes, planes, 6); + return glm_aabb_frustum(rawBox, rawPlanes); } /*! @@ -135,8 +135,6 @@ glms_aabb_frustum(vec3s box[2], vec4s planes[6]) { CGLM_INLINE void glms_aabb_invalidate(vec3s box[2]) { - // FIX: Modify param - // box[0] = glms_vec3_broadcast(FLT_MAX); box[1] = glms_vec3_broadcast(-FLT_MAX); } @@ -149,9 +147,9 @@ glms_aabb_invalidate(vec3s box[2]) { CGLM_INLINE bool glms_aabb_isvalid(vec3s box[2]) { - vec3 rawBox[2]; - glms_vec3_unpack(rawBox, box, 2); - return glm_aabb_isvalid(rawBox); + vec3 rawBox[2]; + glms_vec3_unpack(rawBox, box, 2); + return glm_aabb_isvalid(rawBox); } /*! @@ -197,11 +195,11 @@ glms_aabb_center(vec3s box[2]) { CGLM_INLINE bool glms_aabb_aabb(vec3s box[2], vec3s other[2]) { - vec3 rawBox[2]; - vec3 rawOther[2]; + vec3 rawBox[2]; + vec3 rawOther[2]; - glms_vec3_unpack(rawBox, box, 2); - glms_vec3_unpack(rawOther, other, 2); + glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawOther, other, 2); return glm_aabb_aabb(rawBox, rawOther); } @@ -217,10 +215,10 @@ glms_aabb_aabb(vec3s box[2], vec3s other[2]) { CGLM_INLINE bool glms_aabb_sphere(vec3s box[2], vec4s s) { - vec3 rawBox[2]; - - glms_vec3_unpack(rawBox, box, 2); - return glm_aabb_sphere(rawBox, s.raw); + vec3 rawBox[2]; + + glms_vec3_unpack(rawBox, box, 2); + return glm_aabb_sphere(rawBox, s.raw); } /*! @@ -232,9 +230,9 @@ glms_aabb_sphere(vec3s box[2], vec4s s) { CGLM_INLINE bool glms_aabb_point(vec3s box[2], vec3s point) { - vec3 rawBox[2]; + vec3 rawBox[2]; - glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawBox, box, 2); return glm_aabb_point(rawBox, point.raw); } @@ -247,12 +245,12 @@ glms_aabb_point(vec3s box[2], vec3s point) { CGLM_INLINE bool glms_aabb_contains(vec3s box[2], vec3s other[2]) { - vec3 rawBox[2]; - vec3 rawOther[2]; + vec3 rawBox[2]; + vec3 rawOther[2]; - glms_vec3_unpack(rawBox, box, 2); - glms_vec3_unpack(rawOther, other, 2); - return glm_aabb_contains(rawBox, rawOther); + glms_vec3_unpack(rawBox, box, 2); + glms_vec3_unpack(rawOther, other, 2); + return glm_aabb_contains(rawBox, rawOther); } #endif /* cglm_boxs_h */ diff --git a/include/cglm/structs/color.h b/include/cglm/struct/color.h similarity index 93% rename from include/cglm/structs/color.h rename to include/cglm/struct/color.h index 62cf5a8..e9ddc0c 100644 --- a/include/cglm/structs/color.h +++ b/include/cglm/struct/color.h @@ -21,7 +21,7 @@ CGLM_INLINE float glms_luminance(vec3s rgb) { - return glm_luminance(rgb.raw); + return glm_luminance(rgb.raw); } #endif /* cglm_colors_h */ diff --git a/include/cglm/structs/curve.h b/include/cglm/struct/curve.h similarity index 96% rename from include/cglm/structs/curve.h rename to include/cglm/struct/curve.h index 724b0be..0972f0f 100644 --- a/include/cglm/structs/curve.h +++ b/include/cglm/struct/curve.h @@ -34,7 +34,7 @@ CGLM_INLINE float glms_smc(float s, mat4s m, vec4s c) { - return glm_smc(s, m.raw, c.raw); + return glm_smc(s, m.raw, c.raw); } #endif /* cglm_curves_h */ diff --git a/include/cglm/structs/frustum.h b/include/cglm/struct/frustum.h similarity index 83% rename from include/cglm/structs/frustum.h rename to include/cglm/struct/frustum.h index 56bd165..98931f4 100644 --- a/include/cglm/structs/frustum.h +++ b/include/cglm/struct/frustum.h @@ -55,9 +55,9 @@ CGLM_INLINE void glms_frustum_planes(mat4s m, vec4s dest[6]) { - vec4 rawDest[6]; - glm_frustum_planes(m.raw, rawDest); - glms_vec4_pack(dest, rawDest, 6); + vec4 rawDest[6]; + glm_frustum_planes(m.raw, rawDest); + glms_vec4_pack(dest, rawDest, 6); } /*! @@ -86,9 +86,9 @@ glms_frustum_planes(mat4s m, vec4s dest[6]) { CGLM_INLINE void glms_frustum_corners(mat4s invMat, vec4s dest[8]) { - vec4 rawDest[8]; - glm_frustum_corners(invMat.raw, rawDest); - glms_vec4_pack(dest, rawDest, 8); + vec4 rawDest[8]; + glm_frustum_corners(invMat.raw, rawDest); + glms_vec4_pack(dest, rawDest, 8); } /*! @@ -100,12 +100,12 @@ glms_frustum_corners(mat4s invMat, vec4s dest[8]) { CGLM_INLINE vec4s glms_frustum_center(vec4s corners[8]) { - vec4 rawCorners[8]; - vec4s r; + vec4 rawCorners[8]; + vec4s r; - glms_vec4_unpack(rawCorners, corners, 8); - glm_frustum_center(rawCorners, r.raw); - return r; + glms_vec4_unpack(rawCorners, corners, 8); + glm_frustum_center(rawCorners, r.raw); + return r; } /*! @@ -118,12 +118,12 @@ glms_frustum_center(vec4s corners[8]) { CGLM_INLINE void glms_frustum_box(vec4s corners[8], mat4s m, vec3s box[2]) { - vec4 rawCorners[8]; - vec3 rawBox[2]; + vec4 rawCorners[8]; + vec3 rawBox[2]; - glms_vec4_unpack(rawCorners, corners, 8); - glm_frustum_box(rawCorners, m.raw, rawBox); - glms_vec3_pack(box, rawBox, 2); + glms_vec4_unpack(rawCorners, corners, 8); + glm_frustum_box(rawCorners, m.raw, rawBox); + glms_vec3_pack(box, rawBox, 2); } /*! @@ -144,12 +144,12 @@ glms_frustum_corners_at(vec4s corners[8], float splitDist, float farDist, vec4s planeCorners[4]) { - vec4 rawCorners[8]; - vec4 rawPlaneCorners[4]; + vec4 rawCorners[8]; + vec4 rawPlaneCorners[4]; - glms_vec4_unpack(rawCorners, corners, 8); - glm_frustum_corners_at(rawCorners, splitDist, farDist, rawPlaneCorners); - glms_vec4_pack(planeCorners, rawPlaneCorners, 8); + glms_vec4_unpack(rawCorners, corners, 8); + glm_frustum_corners_at(rawCorners, splitDist, farDist, rawPlaneCorners); + glms_vec4_pack(planeCorners, rawPlaneCorners, 8); } #endif /* cglm_frustums_h */ diff --git a/include/cglm/structs/io.h b/include/cglm/struct/io.h similarity index 90% rename from include/cglm/structs/io.h rename to include/cglm/struct/io.h index 2467d20..0a084e4 100644 --- a/include/cglm/structs/io.h +++ b/include/cglm/struct/io.h @@ -30,14 +30,14 @@ void glms_mat4_print(mat4s matrix, FILE * __restrict ostream) { - glm_mat4_print(matrix.raw, ostream); + glm_mat4_print(matrix.raw, ostream); } CGLM_INLINE void glms_mat3_print(mat3s matrix, FILE * __restrict ostream) { - glm_mat3_print(matrix.raw, ostream); + glm_mat3_print(matrix.raw, ostream); } CGLM_INLINE @@ -73,10 +73,10 @@ void glms_aabb_print(vec3s bbox[2], const char * __restrict tag, FILE * __restrict ostream) { - vec3 rawBbox[2]; + vec3 rawBbox[2]; - glms_vec3_unpack(rawBbox, bbox, 2); - glm_aabb_print(rawBbox, tag, ostream); + glms_vec3_unpack(rawBbox, bbox, 2); + glm_aabb_print(rawBbox, tag, ostream); } #endif /* cglm_ios_h */ diff --git a/include/cglm/structs/mat3.h b/include/cglm/struct/mat3.h similarity index 100% rename from include/cglm/structs/mat3.h rename to include/cglm/struct/mat3.h diff --git a/include/cglm/structs/mat4.h b/include/cglm/struct/mat4.h similarity index 99% rename from include/cglm/structs/mat4.h rename to include/cglm/struct/mat4.h index 40c7291..5947dc0 100644 --- a/include/cglm/structs/mat4.h +++ b/include/cglm/struct/mat4.h @@ -241,11 +241,11 @@ CGLM_INLINE mat4s glms_mat4_mulN(mat4s * __restrict matrices[], uint32_t len) { CGLM_ALIGN_MAT mat4s r = GLMS_MAT4_IDENTITY_INIT; - size_t i; + size_t i; for (i = 0; i < len; i++) { - r = glms_mat4_mul(r, *matrices[i]); - } + r = glms_mat4_mul(r, *matrices[i]); + } return r; } diff --git a/include/cglm/structs/plane.h b/include/cglm/struct/plane.h similarity index 93% rename from include/cglm/structs/plane.h rename to include/cglm/struct/plane.h index 6e23482..cea7e8c 100644 --- a/include/cglm/structs/plane.h +++ b/include/cglm/struct/plane.h @@ -33,8 +33,8 @@ CGLM_INLINE vec4s glms_plane_normalize(vec4s plane) { - glm_plane_normalize(plane.raw); - return plane; + glm_plane_normalize(plane.raw); + return plane; } #endif /* cglm_planes_h */ diff --git a/include/cglm/structs/project.h b/include/cglm/struct/project.h similarity index 89% rename from include/cglm/structs/project.h rename to include/cglm/struct/project.h index 1cbb137..d45ba3d 100644 --- a/include/cglm/structs/project.h +++ b/include/cglm/struct/project.h @@ -39,14 +39,14 @@ * @param[in] pos point/position in viewport coordinates * @param[in] invMat matrix (see brief) * @param[in] vp viewport as [x, y, width, height] - * @returns unprojected coordinates + * @returns unprojected coordinates */ CGLM_INLINE vec3s glms_unprojecti(vec3s pos, mat4s invMat, vec4s vp) { - vec3s r; - glm_unprojecti(pos.raw, invMat.raw, vp.raw, r.raw); - return r; + vec3s r; + glm_unprojecti(pos.raw, invMat.raw, vp.raw, r.raw); + return r; } /*! @@ -71,14 +71,14 @@ glms_unprojecti(vec3s pos, mat4s invMat, vec4s vp) { * @param[in] pos point/position in viewport coordinates * @param[in] m matrix (see brief) * @param[in] vp viewport as [x, y, width, height] - * @returns unprojected coordinates + * @returns unprojected coordinates */ CGLM_INLINE vec3s glms_unproject(vec3s pos, mat4s m, vec4s vp) { - vec3s r; - glm_unproject(pos.raw, m.raw, vp.raw, r.raw); - return r; + vec3s r; + glm_unproject(pos.raw, m.raw, vp.raw, r.raw); + return r; } /*! @@ -96,9 +96,9 @@ glms_unproject(vec3s pos, mat4s m, vec4s vp) { CGLM_INLINE vec3s glms_project(vec3s pos, mat4s m, vec4s vp) { - vec3s r; - glm_project(pos.raw, m.raw, vp.raw, r.raw); - return r; + vec3s r; + glm_project(pos.raw, m.raw, vp.raw, r.raw); + return r; } #endif /* cglm_projects_h */ diff --git a/include/cglm/structs/sphere.h b/include/cglm/struct/sphere.h similarity index 100% rename from include/cglm/structs/sphere.h rename to include/cglm/struct/sphere.h diff --git a/include/cglm/structs/vec3-ext.h b/include/cglm/struct/vec3-ext.h similarity index 81% rename from include/cglm/structs/vec3-ext.h rename to include/cglm/struct/vec3-ext.h index 2e5e729..53a1199 100644 --- a/include/cglm/structs/vec3-ext.h +++ b/include/cglm/struct/vec3-ext.h @@ -12,17 +12,17 @@ /* Functions: CGLM_INLINE vec3s glms_vec3_broadcast(float val); - CGLM_INLINE bool glms_vec3_eq(vec3s v, float val); - CGLM_INLINE bool glms_vec3_eq_eps(vec3s v, float val); - CGLM_INLINE bool glms_vec3_eq_all(vec3s v); - CGLM_INLINE bool glms_vec3_eqv(vec3s a, vec3s b); - CGLM_INLINE bool glms_vec3_eqv_eps(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_max(vec3s v); - CGLM_INLINE float glms_vec3_min(vec3s v); - CGLM_INLINE bool glms_vec3_isnan(vec3s v); - CGLM_INLINE bool glms_vec3_isinf(vec3s v); - CGLM_INLINE bool glms_vec3_isvalid(vec3s v); - CGLM_INLINE vec3s glms_vec3_sign(vec3s v); + CGLM_INLINE bool glms_vec3_eq(vec3s v, float val); + CGLM_INLINE bool glms_vec3_eq_eps(vec3s v, float val); + CGLM_INLINE bool glms_vec3_eq_all(vec3s v); + CGLM_INLINE bool glms_vec3_eqv(vec3s a, vec3s b); + CGLM_INLINE bool glms_vec3_eqv_eps(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_max(vec3s v); + CGLM_INLINE float glms_vec3_min(vec3s v); + CGLM_INLINE bool glms_vec3_isnan(vec3s v); + CGLM_INLINE bool glms_vec3_isinf(vec3s v); + CGLM_INLINE bool glms_vec3_isvalid(vec3s v); + CGLM_INLINE vec3s glms_vec3_sign(vec3s v); CGLM_INLINE vec3s glms_vec3_sqrt(vec3s v); */ @@ -37,8 +37,8 @@ /*! * @brief fill a vector with specified value * - * @param[in] val value - * @returns dest + * @param[in] val value + * @returns dest */ CGLM_INLINE vec3s @@ -170,8 +170,8 @@ glms_vec3_isvalid(vec3s v) { * * Important: It returns 0 for zero/NaN input * - * @param v vector - * @returns sign vector + * @param v vector + * @returns sign vector */ CGLM_INLINE vec3s @@ -185,7 +185,7 @@ glms_vec3_sign(vec3s v) { * @brief square root of each vector item * * @param[in] v vector - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s diff --git a/include/cglm/structs/vec3.h b/include/cglm/struct/vec3.h similarity index 70% rename from include/cglm/structs/vec3.h rename to include/cglm/struct/vec3.h index 766742b..06ad75f 100644 --- a/include/cglm/structs/vec3.h +++ b/include/cglm/struct/vec3.h @@ -17,53 +17,53 @@ Functions: CGLM_INLINE vec3s glms_vec3(vec4s v4); - CGLM_INLINE vec3s glms_vec3_copy(vec3s v); - CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len); - CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len); - CGLM_INLINE vec3s glms_vec3_zero(); - CGLM_INLINE vec3s glms_vec3_one(); - CGLM_INLINE float glms_vec3_dot(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_norm2(vec3s v); - CGLM_INLINE float glms_vec3_norm(vec3s v); - CGLM_INLINE vec3s glms_vec3_add(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_adds(vec3s a, float s); - CGLM_INLINE vec3s glms_vec3_sub(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_subs(vec3s a, float s); - CGLM_INLINE vec3s glms_vec3_mul(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_scale(vec3s v, float s); - CGLM_INLINE vec3s glms_vec3_scale_as(vec3s v, float s); - CGLM_INLINE vec3s glms_vec3_div(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_divs(vec3s a, float s); - CGLM_INLINE vec3s glms_vec3_addadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_subadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_muladd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest); - CGLM_INLINE vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest); - CGLM_INLINE vec3s glms_vec3_flipsign(vec3s v); - CGLM_INLINE vec3s glms_vec3_negate(vec3s v); - CGLM_INLINE vec3s glms_vec3_inv(vec3s v); - CGLM_INLINE vec3s glms_vec3_normalize(vec3s v); - CGLM_INLINE vec3s glms_vec3_cross(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_crossn(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_distance(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_angle(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_rotate(vec3s v, float angle, vec3s axis); - CGLM_INLINE vec3s glms_vec3_rotate_m4(mat4s m, vec3s v); - CGLM_INLINE vec3s glms_vec3_rotate_m3(mat3s m, vec3s v); - CGLM_INLINE vec3s glms_vec3_proj(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_center(vec3s a, vec3s b); - CGLM_INLINE float glms_vec3_distance2(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_maxv(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_minv(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_vec3_ortho(vec3s v); - CGLM_INLINE vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal); - CGLM_INLINE vec3s glms_vec3_lerp(vec3s from, vec3s to, float t); + CGLM_INLINE vec3s glms_vec3_copy(vec3s v); + CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len); + CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len); + CGLM_INLINE vec3s glms_vec3_zero(); + CGLM_INLINE vec3s glms_vec3_one(); + CGLM_INLINE float glms_vec3_dot(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_norm2(vec3s v); + CGLM_INLINE float glms_vec3_norm(vec3s v); + CGLM_INLINE vec3s glms_vec3_add(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_adds(vec3s a, float s); + CGLM_INLINE vec3s glms_vec3_sub(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_subs(vec3s a, float s); + CGLM_INLINE vec3s glms_vec3_mul(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_scale(vec3s v, float s); + CGLM_INLINE vec3s glms_vec3_scale_as(vec3s v, float s); + CGLM_INLINE vec3s glms_vec3_div(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_divs(vec3s a, float s); + CGLM_INLINE vec3s glms_vec3_addadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_subadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_muladd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest); + CGLM_INLINE vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest); + CGLM_INLINE vec3s glms_vec3_flipsign(vec3s v); + CGLM_INLINE vec3s glms_vec3_negate(vec3s v); + CGLM_INLINE vec3s glms_vec3_inv(vec3s v); + CGLM_INLINE vec3s glms_vec3_normalize(vec3s v); + CGLM_INLINE vec3s glms_vec3_cross(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_crossn(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_distance(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_angle(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_rotate(vec3s v, float angle, vec3s axis); + CGLM_INLINE vec3s glms_vec3_rotate_m4(mat4s m, vec3s v); + CGLM_INLINE vec3s glms_vec3_rotate_m3(mat3s m, vec3s v); + CGLM_INLINE vec3s glms_vec3_proj(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_center(vec3s a, vec3s b); + CGLM_INLINE float glms_vec3_distance2(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_maxv(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_minv(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_vec3_ortho(vec3s v); + CGLM_INLINE vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal); + CGLM_INLINE vec3s glms_vec3_lerp(vec3s from, vec3s to, float t); Convenient: CGLM_INLINE vec3s glms_cross(vec3s a, vec3s b); - CGLM_INLINE float glms_dot(vec3s a, vec3s b); - CGLM_INLINE vec3s glms_normalize(vec3s v); + CGLM_INLINE float glms_dot(vec3s a, vec3s b); + CGLM_INLINE vec3s glms_normalize(vec3s v); */ #ifndef cglm_vec3s_h @@ -89,7 +89,7 @@ * @brief init vec3 using vec4 * * @param[in] v4 vector4 - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -103,7 +103,7 @@ glms_vec3(vec4s v4) { * @brief copy all members of [a] to [dest] * * @param[in] a source - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -123,13 +123,13 @@ glms_vec3_copy(vec3s v) { CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { - size_t i; - - for (i = 0; i < len; i++) { - dst[i].x = src[i][0]; - dst[i].y = src[i][1]; - dst[i].z = src[i][2]; - } + size_t i; + + for (i = 0; i < len; i++) { + dst[i].x = src[i][0]; + dst[i].y = src[i][1]; + dst[i].z = src[i][2]; + } } /*! @@ -142,20 +142,20 @@ glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { - size_t i; + size_t i; - for (i = 0; i < len; i++) { - dst[i][0] = src[i].x; - dst[i][1] = src[i].y; - dst[i][2] = src[i].z; - } + for (i = 0; i < len; i++) { + dst[i][0] = src[i].x; + dst[i][1] = src[i].y; + dst[i][2] = src[i].z; + } } /*! * @brief make vector zero * - * @param[in] v vector - * @returns zero vector + * @param[in] v vector + * @returns zero vector */ CGLM_INLINE vec3s @@ -168,8 +168,8 @@ glms_vec3_zero() { /*! * @brief make vector one * - * @param[in] v vector - * @returns one vector + * @param[in] v vector + * @returns one vector */ CGLM_INLINE vec3s @@ -228,7 +228,7 @@ glms_vec3_norm(vec3s v) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s @@ -243,7 +243,7 @@ glms_vec3_add(vec3s a, vec3s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s @@ -258,7 +258,7 @@ glms_vec3_adds(vec3s a, float s) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s @@ -273,7 +273,7 @@ glms_vec3_sub(vec3s a, vec3s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s @@ -286,9 +286,9 @@ glms_vec3_subs(vec3s a, float s) { /*! * @brief multiply two vector (component-wise multiplication) * - * @param a vector1 - * @param b vector2 - * @returns v3 = (a[0] * b[0], a[1] * b[1], a[2] * b[2]) + * @param a vector1 + * @param b vector2 + * @returns v3 = (a[0] * b[0], a[1] * b[1], a[2] * b[2]) */ CGLM_INLINE vec3s @@ -303,7 +303,7 @@ glms_vec3_mul(vec3s a, vec3s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s @@ -318,7 +318,7 @@ glms_vec3_scale(vec3s v, float s) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec3s @@ -333,7 +333,7 @@ glms_vec3_scale_as(vec3s v, float s) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2]) + * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2]) */ CGLM_INLINE vec3s @@ -348,7 +348,7 @@ glms_vec3_div(vec3s a, vec3s b) { * * @param[in] v vector * @param[in] s scalar - * @returns result = (a[0]/s, a[1]/s, a[2]/s) + * @returns result = (a[0]/s, a[1]/s, a[2]/s) */ CGLM_INLINE vec3s @@ -365,7 +365,7 @@ glms_vec3_divs(vec3s a, float s) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += (a + b) + * @returns dest += (a + b) */ CGLM_INLINE vec3s @@ -381,7 +381,7 @@ glms_vec3_addadd(vec3s a, vec3s b, vec3s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += (a + b) + * @returns dest += (a + b) */ CGLM_INLINE vec3s @@ -397,7 +397,7 @@ glms_vec3_subadd(vec3s a, vec3s b, vec3s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += (a * b) + * @returns dest += (a * b) */ CGLM_INLINE vec3s @@ -413,7 +413,7 @@ glms_vec3_muladd(vec3s a, vec3s b, vec3s dest) { * * @param[in] a vector * @param[in] s scalar - * @returns dest += (a * b) + * @returns dest += (a * b) */ CGLM_INLINE vec3s @@ -429,7 +429,7 @@ glms_vec3_muladds(vec3s a, float s, vec3s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += max(a, b) + * @returns dest += max(a, b) */ CGLM_INLINE vec3s @@ -445,7 +445,7 @@ glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += min(a, b) + * @returns dest += min(a, b) */ CGLM_INLINE vec3s @@ -458,7 +458,7 @@ glms_vec3_minadd(vec3s a, vec3s b, vec3s dest) { * @brief negate vector components and store result in dest * * @param[in] v vector - * @returns result vector + * @returns result vector */ CGLM_INLINE vec3s @@ -471,7 +471,7 @@ glms_vec3_flipsign(vec3s v) { * @brief negate vector components * * @param[in] v vector - * @returns negated vector + * @returns negated vector */ CGLM_INLINE vec3s @@ -484,7 +484,7 @@ glms_vec3_negate(vec3s v) { * @brief normalize vec3 and store result in same vec * * @param[in] v vector - * @returns normalized vector + * @returns normalized vector */ CGLM_INLINE vec3s @@ -498,7 +498,7 @@ glms_vec3_normalize(vec3s v) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -513,7 +513,7 @@ glms_vec3_cross(vec3s a, vec3s b) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -540,10 +540,10 @@ glms_vec3_angle(vec3s a, vec3s b) { /*! * @brief rotate vec3 around axis by angle using Rodrigues' rotation formula * - * @param[in] v vector - * @param[in] axis axis vector (must be unit vector) - * @param[in] angle angle by radians - * @returns rotated vector + * @param[in] v vector + * @param[in] axis axis vector (must be unit vector) + * @param[in] angle angle by radians + * @returns rotated vector */ CGLM_INLINE vec3s @@ -563,7 +563,7 @@ glms_vec3_rotate(vec3s v, float angle, vec3s axis) { * * @param[in] m affine matrix or rot matrix * @param[in] v vector - * @returns rotated vector + * @returns rotated vector */ CGLM_INLINE vec3s @@ -578,7 +578,7 @@ glms_vec3_rotate_m4(mat4s m, vec3s v) { * * @param[in] m affine matrix or rot matrix * @param[in] v vector - * @returns rotated vector + * @returns rotated vector */ CGLM_INLINE vec3s @@ -593,7 +593,7 @@ glms_vec3_rotate_m3(mat3s m, vec3s v) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns projected vector + * @returns projected vector */ CGLM_INLINE vec3s @@ -608,7 +608,7 @@ glms_vec3_proj(vec3s a, vec3s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns center point + * @returns center point */ CGLM_INLINE vec3s @@ -623,7 +623,7 @@ glms_vec3_center(vec3s a, vec3s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @return squared distance (distance * distance) + * @return squared distance (distance * distance) */ CGLM_INLINE float @@ -636,7 +636,7 @@ glms_vec3_distance2(vec3s a, vec3s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @return distance + * @return distance */ CGLM_INLINE float @@ -649,7 +649,7 @@ glms_vec3_distance(vec3s a, vec3s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -664,7 +664,7 @@ glms_vec3_maxv(vec3s a, vec3s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -678,7 +678,7 @@ glms_vec3_minv(vec3s a, vec3s b) { * @brief possible orthogonal/perpendicular vector * * @param[in] v vector - * @returns orthogonal/perpendicular vector + * @returns orthogonal/perpendicular vector */ CGLM_INLINE vec3s @@ -691,10 +691,10 @@ glms_vec3_ortho(vec3s v) { /*! * @brief clamp vector's individual members between min and max values * - * @param[in] v vector - * @param[in] minVal minimum value - * @param[in] maxVal maximum value - * @returns clamped vector + * @param[in] v vector + * @param[in] minVal minimum value + * @param[in] maxVal maximum value + * @returns clamped vector */ CGLM_INLINE vec3s @@ -708,10 +708,10 @@ glms_vec3_clamp(vec3s v, float minVal, float maxVal) { * * formula: from + s * (to - from) * - * @param[in] from from value - * @param[in] to to value - * @param[in] t interpolant (amount) clamped between 0 and 1 - * @returns destination + * @param[in] from from value + * @param[in] to to value + * @param[in] t interpolant (amount) clamped between 0 and 1 + * @returns destination */ CGLM_INLINE vec3s @@ -726,9 +726,9 @@ glms_vec3_lerp(vec3s from, vec3s to, float t) { * * this is just convenient wrapper * - * @param[in] a source 1 - * @param[in] b source 2 - * @returns destination + * @param[in] a source 1 + * @param[in] b source 2 + * @returns destination */ CGLM_INLINE vec3s @@ -745,8 +745,7 @@ glms_cross(vec3s a, vec3s b) { * * @param[in] a vector1 * @param[in] b vector2 - * - * @return dot product + * @return dot product */ CGLM_INLINE float @@ -759,8 +758,8 @@ glms_dot(vec3s a, vec3s b) { * * this is just convenient wrapper * - * @param[in] v vector - * @returns normalized vector + * @param[in] v vector + * @returns normalized vector */ CGLM_INLINE vec3s diff --git a/include/cglm/structs/vec4-ext.h b/include/cglm/struct/vec4-ext.h similarity index 79% rename from include/cglm/structs/vec4-ext.h rename to include/cglm/struct/vec4-ext.h index 0b81b49..fdc5059 100644 --- a/include/cglm/structs/vec4-ext.h +++ b/include/cglm/struct/vec4-ext.h @@ -11,19 +11,19 @@ /* Functions: - CGLM_INLINE vec4s glms_vec4_broadcast(float val); - CGLM_INLINE bool glms_vec4_eq(vec4s v, float val); - CGLM_INLINE bool glms_vec4_eq_eps(vec4s v, float val); - CGLM_INLINE bool glms_vec4_eq_all(vec4s v); - CGLM_INLINE bool glms_vec4_eqv(vec4s a, vec4s b); - CGLM_INLINE bool glms_vec4_eqv_eps(vec4s a, vec4s b); - CGLM_INLINE float glms_vec4_max(vec4s v); - CGLM_INLINE float glms_vec4_min(vec4s v); - CGLM_INLINE bool glms_vec4_isnan(vec4s v); - CGLM_INLINE bool glms_vec4_isinf(vec4s v); - CGLM_INLINE bool glms_vec4_isvalid(vec4s v); - CGLM_INLINE vec4s glms_vec4_sign(vec4s v); - CGLM_INLINE vec4s glms_vec4_sqrt(vec4s v); + CGLM_INLINE vec4s glms_vec4_broadcast(float val); + CGLM_INLINE bool glms_vec4_eq(vec4s v, float val); + CGLM_INLINE bool glms_vec4_eq_eps(vec4s v, float val); + CGLM_INLINE bool glms_vec4_eq_all(vec4s v); + CGLM_INLINE bool glms_vec4_eqv(vec4s a, vec4s b); + CGLM_INLINE bool glms_vec4_eqv_eps(vec4s a, vec4s b); + CGLM_INLINE float glms_vec4_max(vec4s v); + CGLM_INLINE float glms_vec4_min(vec4s v); + CGLM_INLINE bool glms_vec4_isnan(vec4s v); + CGLM_INLINE bool glms_vec4_isinf(vec4s v); + CGLM_INLINE bool glms_vec4_isvalid(vec4s v); + CGLM_INLINE vec4s glms_vec4_sign(vec4s v); + CGLM_INLINE vec4s glms_vec4_sqrt(vec4s v); */ #ifndef cglm_vec4s_ext_h @@ -38,7 +38,7 @@ * @brief fill a vector with specified value * * @param val value - * @returns dest + * @returns dest */ CGLM_INLINE vec4s @@ -170,8 +170,8 @@ glms_vec4_isvalid(vec4s v) { * * Important: It returns 0 for zero/NaN input * - * @param v vector - * @returns sign vector + * @param v vector + * @returns sign vector */ CGLM_INLINE vec4s @@ -185,7 +185,7 @@ glms_vec4_sign(vec4s v) { * @brief square root of each vector item * * @param[in] v vector - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s diff --git a/include/cglm/structs/vec4.h b/include/cglm/struct/vec4.h similarity index 70% rename from include/cglm/structs/vec4.h rename to include/cglm/struct/vec4.h index 2f950a7..8ae7dc9 100644 --- a/include/cglm/structs/vec4.h +++ b/include/cglm/struct/vec4.h @@ -15,39 +15,39 @@ GLM_VEC4_ZERO Functions: - CGLM_INLINE vec4s glms_vec4(vec3s v3, float last); - CGLM_INLINE vec3s glms_vec4_copy3(vec4s v); - CGLM_INLINE vec4s glms_vec4_copy(vec4s v); - CGLM_INLINE vec4s glms_vec4_ucopy(vec4s v); - CGLM_INLINE void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len); - CGLM_INLINE void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len); - CGLM_INLINE float glms_vec4_dot(vec4s a, vec4s b); - CGLM_INLINE float glms_vec4_norm2(vec4s v); - CGLM_INLINE float glms_vec4_norm(vec4s v); - CGLM_INLINE vec4s glms_vec4_add(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_adds(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_sub(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_subs(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_mul(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_scale(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_scale_as(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_div(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_divs(vec4s v, float s); - CGLM_INLINE vec4s glms_vec4_addadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_subadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_muladd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest); - CGLM_INLINE vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest); - CGLM_INLINE vec4s glms_vec4_negate(vec4s v); - CGLM_INLINE vec4s glms_vec4_inv(vec4s v); - CGLM_INLINE vec4s glms_vec4_normalize(vec4s v); - CGLM_INLINE float glms_vec4_distance(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_maxv(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_minv(vec4s a, vec4s b); - CGLM_INLINE vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal); - CGLM_INLINE vec4s glms_vec4_lerp(vec4s from, vec4s to, float t); - CGLM_INLINE vec4s glms_vec4_cubic(float s); + CGLM_INLINE vec4s glms_vec4(vec3s v3, float last); + CGLM_INLINE vec3s glms_vec4_copy3(vec4s v); + CGLM_INLINE vec4s glms_vec4_copy(vec4s v); + CGLM_INLINE vec4s glms_vec4_ucopy(vec4s v); + CGLM_INLINE void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len); + CGLM_INLINE void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len); + CGLM_INLINE float glms_vec4_dot(vec4s a, vec4s b); + CGLM_INLINE float glms_vec4_norm2(vec4s v); + CGLM_INLINE float glms_vec4_norm(vec4s v); + CGLM_INLINE vec4s glms_vec4_add(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_adds(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_sub(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_subs(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_mul(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_scale(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_scale_as(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_div(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_divs(vec4s v, float s); + CGLM_INLINE vec4s glms_vec4_addadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_subadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_muladd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest); + CGLM_INLINE vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest); + CGLM_INLINE vec4s glms_vec4_negate(vec4s v); + CGLM_INLINE vec4s glms_vec4_inv(vec4s v); + CGLM_INLINE vec4s glms_vec4_normalize(vec4s v); + CGLM_INLINE float glms_vec4_distance(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_maxv(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_minv(vec4s a, vec4s b); + CGLM_INLINE vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal); + CGLM_INLINE vec4s glms_vec4_lerp(vec4s from, vec4s to, float t); + CGLM_INLINE vec4s glms_vec4_cubic(float s); */ #ifndef cglm_vec4s_h @@ -72,7 +72,7 @@ * * @param[in] v3 vector3 * @param[in] last last item - * @returns destination + * @returns destination */ CGLM_INLINE vec4s @@ -86,7 +86,7 @@ glms_vec4(vec3s v3, float last) { * @brief copy first 3 members of [a] to [dest] * * @param[in] a source - * @returns destination + * @returns destination */ CGLM_INLINE vec3s @@ -100,7 +100,7 @@ glms_vec4_copy3(vec4s v) { * @brief copy all members of [a] to [dest] * * @param[in] v source - * @returns destination + * @returns destination */ CGLM_INLINE vec4s @@ -116,7 +116,7 @@ glms_vec4_copy(vec4s v) { * alignment is not required * * @param[in] v source - * @returns destination + * @returns destination */ CGLM_INLINE vec4s @@ -136,13 +136,13 @@ glms_vec4_ucopy(vec4s v) { CGLM_INLINE void glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { - size_t i; - - for (i = 0; i < len; i++) { - dst[i].x = src[i][0]; - dst[i].y = src[i][1]; - dst[i].z = src[i][2]; - } + size_t i; + + for (i = 0; i < len; i++) { + dst[i].x = src[i][0]; + dst[i].y = src[i][1]; + dst[i].z = src[i][2]; + } } /*! @@ -155,41 +155,41 @@ glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { CGLM_INLINE void glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { - size_t i; + size_t i; - for (i = 0; i < len; i++) { - dst[i][0] = src[i].x; - dst[i][1] = src[i].y; - dst[i][2] = src[i].z; - } + for (i = 0; i < len; i++) { + dst[i][0] = src[i].x; + dst[i][1] = src[i].y; + dst[i][2] = src[i].z; + } } /*! * @brief make vector zero * * @param[in] v vector - * @returns zero vector + * @returns zero vector */ CGLM_INLINE vec4s glms_vec4_zero() { - vec4s r; - glm_vec4_zero(r.raw); - return r; + vec4s r; + glm_vec4_zero(r.raw); + return r; } /*! * @brief make vector one * * @param[in] v vector - * @returns one vector + * @returns one vector */ CGLM_INLINE vec4s glms_vec4_one() { - vec4s r; - glm_vec4_one(r.raw); - return r; + vec4s r; + glm_vec4_one(r.raw); + return r; } /*! @@ -241,7 +241,7 @@ glms_vec4_norm(vec4s v) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -256,7 +256,7 @@ glms_vec4_add(vec4s a, vec4s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -271,7 +271,7 @@ glms_vec4_adds(vec4s v, float s) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -286,7 +286,7 @@ glms_vec4_sub(vec4s a, vec4s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -301,7 +301,7 @@ glms_vec4_subs(vec4s v, float s) { * * @param a vector1 * @param b vector2 - * @returns dest = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]) + * @returns dest = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]) */ CGLM_INLINE vec4s @@ -316,7 +316,7 @@ glms_vec4_mul(vec4s a, vec4s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -331,7 +331,7 @@ glms_vec4_scale(vec4s v, float s) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -346,7 +346,7 @@ glms_vec4_scale_as(vec4s v, float s) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2], a[3]/b[3]) + * @returns result = (a[0]/b[0], a[1]/b[1], a[2]/b[2], a[3]/b[3]) */ CGLM_INLINE vec4s @@ -361,7 +361,7 @@ glms_vec4_div(vec4s a, vec4s b) { * * @param[in] v vector * @param[in] s scalar - * @returns destination vector + * @returns destination vector */ CGLM_INLINE vec4s @@ -378,7 +378,7 @@ glms_vec4_divs(vec4s v, float s) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += (a + b) + * @returns dest += (a + b) */ CGLM_INLINE vec4s @@ -394,7 +394,7 @@ glms_vec4_addadd(vec4s a, vec4s b, vec4s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += (a - b) + * @returns dest += (a - b) */ CGLM_INLINE vec4s @@ -410,7 +410,7 @@ glms_vec4_subadd(vec4s a, vec4s b, vec4s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += (a * b) + * @returns dest += (a * b) */ CGLM_INLINE vec4s @@ -426,7 +426,7 @@ glms_vec4_muladd(vec4s a, vec4s b, vec4s dest) { * * @param[in] a vector * @param[in] s scalar - * @returns dest += (a * b) + * @returns dest += (a * b) */ CGLM_INLINE vec4s @@ -442,7 +442,7 @@ glms_vec4_muladds(vec4s a, float s, vec4s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += max(a, b) + * @returns dest += max(a, b) */ CGLM_INLINE vec4s @@ -458,7 +458,7 @@ glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest) { * * @param[in] a vector 1 * @param[in] b vector 2 - * @returns dest += min(a, b) + * @returns dest += min(a, b) */ CGLM_INLINE vec4s @@ -471,7 +471,7 @@ glms_vec4_minadd(vec4s a, vec4s b, vec4s dest) { * @brief negate vector components and store result in dest * * @param[in] v vector - * @returns result vector + * @returns result vector */ CGLM_INLINE vec4s @@ -483,8 +483,8 @@ glms_vec4_negate(vec4s v) { /*! * @brief normalize vec4 and store result in same vec * - * @param[in] v vector - * @returns normalized vector + * @param[in] v vector + * @returns normalized vector */ CGLM_INLINE vec4s @@ -511,7 +511,7 @@ glms_vec4_distance(vec4s a, vec4s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination + * @returns destination */ CGLM_INLINE vec4s @@ -526,7 +526,7 @@ glms_vec4_maxv(vec4s a, vec4s b) { * * @param[in] a vector1 * @param[in] b vector2 - * @returns destination + * @returns destination */ CGLM_INLINE vec4s @@ -539,10 +539,10 @@ glms_vec4_minv(vec4s a, vec4s b) { /*! * @brief clamp vector's individual members between min and max values * - * @param[in] v vector - * @param[in] minVal minimum value - * @param[in] maxVal maximum value - * @returns clamped vector + * @param[in] v vector + * @param[in] minVal minimum value + * @param[in] maxVal maximum value + * @returns clamped vector */ CGLM_INLINE vec4s @@ -556,10 +556,10 @@ glms_vec4_clamp(vec4s v, float minVal, float maxVal) { * * formula: from + s * (to - from) * - * @param[in] from from value - * @param[in] to to value - * @param[in] t interpolant (amount) clamped between 0 and 1 - * @returns destination + * @param[in] from from value + * @param[in] to to value + * @param[in] t interpolant (amount) clamped between 0 and 1 + * @returns destination */ CGLM_INLINE vec4s @@ -572,15 +572,15 @@ glms_vec4_lerp(vec4s from, vec4s to, float t) { /*! * @brief helper to fill vec4 as [S^3, S^2, S, 1] * - * @param[in] s parameter - * @returns destination + * @param[in] s parameter + * @returns destination */ CGLM_INLINE vec4s glms_vec4_cubic(float s) { - vec4s r; - glm_vec4_cubic(s, r.raw); - return r; + vec4s r; + glm_vec4_cubic(s, r.raw); + return r; } #endif /* cglm_vec4s_h */ diff --git a/include/cglm/types-struct.h b/include/cglm/types-struct.h index 2d54aa4..f71c286 100644 --- a/include/cglm/types-struct.h +++ b/include/cglm/types-struct.h @@ -53,13 +53,8 @@ typedef union mat3s { float m10, m11, m12; float m20, m21, m22; }; - struct { - vec3s col0; - vec3s col1; - vec3s col2; - }; #endif - vec3s col[3]; + vec3s col[3]; mat3 raw; } mat3s; @@ -67,18 +62,12 @@ typedef union CGLM_ALIGN_MAT mat4s { #ifndef CGLM_NO_ANONYMOUS_STRUCT struct { float m00, m01, m02, m03; - float m10, m11, m12, m13; - float m20, m21, m22, m23; - float m30, m31, m32, m33; - }; - struct { - vec4s col0; - vec4s col1; - vec4s col2; - vec4s col3; + float m10, m11, m12, m13; + float m20, m21, m22, m23; + float m30, m31, m32, m33; }; #endif - vec4s col[4]; + vec4s col[4]; mat4 raw; } mat4s; diff --git a/test/src/test_common.c b/test/src/test_common.c index 02ccaec..d734e72 100644 --- a/test/src/test_common.c +++ b/test/src/test_common.c @@ -49,8 +49,7 @@ test_rand_vec3(vec3 dest) { } vec3s -test_rand_vec3s() -{ +test_rand_vec3s() { vec3s r; test_rand_vec3(r.raw); return r; @@ -67,8 +66,7 @@ test_rand_vec4(vec4 dest) { } vec4s -test_rand_vec4s() -{ +test_rand_vec4s() { vec4s r; test_rand_vec4(r.raw); return r; @@ -137,8 +135,7 @@ test_assert_vec3_eq(vec3 v1, vec3 v2) { } void -test_assert_vec3s_eq(vec3s v1, vec3s v2) -{ +test_assert_vec3s_eq(vec3s v1, vec3s v2) { test_assert_vec3_eq(v1.raw, v2.raw); } @@ -151,8 +148,7 @@ test_assert_vec4_eq(vec4 v1, vec4 v2) { } void -test_assert_vec4s_eq(vec4s v1, vec4s v2) -{ +test_assert_vec4s_eq(vec4s v1, vec4s v2) { test_assert_vec4_eq(v1.raw, v2.raw); } From d322a0ba8ff9b7653465e05f396c55fb173672ea Mon Sep 17 00:00:00 2001 From: acoto87 Date: Wed, 22 May 2019 16:24:11 -0500 Subject: [PATCH 29/56] Replace directly assignment with glm_vec{3,4}_copy functions --- include/cglm/struct/vec3.h | 8 ++------ include/cglm/struct/vec4.h | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/include/cglm/struct/vec3.h b/include/cglm/struct/vec3.h index 06ad75f..91389a2 100644 --- a/include/cglm/struct/vec3.h +++ b/include/cglm/struct/vec3.h @@ -126,9 +126,7 @@ glms_vec3_pack(vec3s dst[], vec3 src[], size_t len) { size_t i; for (i = 0; i < len; i++) { - dst[i].x = src[i][0]; - dst[i].y = src[i][1]; - dst[i].z = src[i][2]; + glm_vec3_copy(src[i], dst[i].raw); } } @@ -145,9 +143,7 @@ glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { size_t i; for (i = 0; i < len; i++) { - dst[i][0] = src[i].x; - dst[i][1] = src[i].y; - dst[i][2] = src[i].z; + glm_vec3_copy(src[i].raw, dst[i]); } } diff --git a/include/cglm/struct/vec4.h b/include/cglm/struct/vec4.h index 8ae7dc9..f96725f 100644 --- a/include/cglm/struct/vec4.h +++ b/include/cglm/struct/vec4.h @@ -139,9 +139,7 @@ glms_vec4_pack(vec4s dst[], vec4 src[], size_t len) { size_t i; for (i = 0; i < len; i++) { - dst[i].x = src[i][0]; - dst[i].y = src[i][1]; - dst[i].z = src[i][2]; + glm_vec4_copy(src[i], dst[i].raw); } } @@ -158,9 +156,7 @@ glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { size_t i; for (i = 0; i < len; i++) { - dst[i][0] = src[i].x; - dst[i][1] = src[i].y; - dst[i][2] = src[i].z; + glm_vec4_copy(src[i].raw, dst[i]); } } From f26601bfa7e9218050384c169b5e567699e9ff0f Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sat, 25 May 2019 09:12:08 +0300 Subject: [PATCH 30/56] now working on v0.6.0 --- configure.ac | 2 +- docs/source/conf.py | 4 ++-- include/cglm/color.h | 6 ++++++ include/cglm/version.h | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 7bd3c58..9a26778 100644 --- a/configure.ac +++ b/configure.ac @@ -7,7 +7,7 @@ #***************************************************************************** AC_PREREQ([2.69]) -AC_INIT([cglm], [0.5.5], [info@recp.me]) +AC_INIT([cglm], [0.6.0], [info@recp.me]) AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/docs/source/conf.py b/docs/source/conf.py index 33fda4e..4cd1de2 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -62,9 +62,9 @@ author = u'Recep Aslantas' # built documents. # # The short X.Y version. -version = u'0.5.5' +version = u'0.6.0' # The full version, including alpha/beta/rc tags. -release = u'0.5.5' +release = u'0.6.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/include/cglm/color.h b/include/cglm/color.h index 69566ad..77949dc 100644 --- a/include/cglm/color.h +++ b/include/cglm/color.h @@ -23,4 +23,10 @@ glm_luminance(vec3 rgb) { return glm_dot(rgb, l); } +CGLM_INLINE +void +glm_normal(vec3 a, vec3 b, vec3 c, vec3 dest) { + +} + #endif /* cglm_color_h */ diff --git a/include/cglm/version.h b/include/cglm/version.h index d406e2c..5843f4b 100644 --- a/include/cglm/version.h +++ b/include/cglm/version.h @@ -9,7 +9,7 @@ #define cglm_version_h #define CGLM_VERSION_MAJOR 0 -#define CGLM_VERSION_MINOR 5 -#define CGLM_VERSION_PATCH 5 +#define CGLM_VERSION_MINOR 6 +#define CGLM_VERSION_PATCH 0 #endif /* cglm_version_h */ From 5a6651563180f1d99ab83969560ff6c884011378 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 27 May 2019 09:34:29 +0300 Subject: [PATCH 31/56] Create FUNDING.yml --- .github/FUNDING.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..d5bb755 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,8 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: cglm +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +custom: # Replace with a single custom sponsorship URL From 4e1872c3ac7060b3fc60e495196510e82703cf21 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Fri, 31 May 2019 22:30:39 +0300 Subject: [PATCH 32/56] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d03a03f..672d969 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,6 @@ [![Backers on Open Collective](https://opencollective.com/cglm/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/cglm/sponsors/badge.svg)](#sponsors) -The original glm library is for C++ only (templates, namespaces, classes...), this library targeted to C99 but currently you can use it for C89 safely by language extensions e.g `__restrict` - #### Documentation Almost all functions (inline versions) and parameters are documented inside related headers.
@@ -45,6 +43,9 @@ https://github.com/g-truc/glm `cglm` doesn't alloc any memory on heap. So it doesn't provide any allocator. You should alloc memory for **out** parameters too if you pass pointer of memory location. Don't forget that **vec4** (also quat/**versor**) and **mat4** must be aligned (16-bytes), because *cglm* uses SIMD instructions to optimize most operations if available. #### Returning vector or matrix... ? + +**cglm** supports both *ARRAY API* and *STRUCT API*, so you can return structs if you you struct api (`glms_`). + Since almost all types are arrays and **C** doesn't allow returning arrays, so **cglm** doesn't support this feature. In the future *cglm* may use **struct** for some types for this purpose. #### Other APIs like Vulkan, Metal, Dx? @@ -68,6 +69,7 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi ## Features +- array api and struct api, you can use arrays or structs. - general purpose matrix operations (mat4, mat3) - chain matrix multiplication (square only) - general purpose vector operations (cross, dot, rotate, proj, angle...) From 12a7298474834a9454e86302e188ba55d5b70c44 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Fri, 31 May 2019 22:31:10 +0300 Subject: [PATCH 33/56] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 672d969..243d5f9 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,6 @@ https://github.com/g-truc/glm **cglm** supports both *ARRAY API* and *STRUCT API*, so you can return structs if you you struct api (`glms_`). -Since almost all types are arrays and **C** doesn't allow returning arrays, so **cglm** doesn't support this feature. In the future *cglm* may use **struct** for some types for this purpose. - #### Other APIs like Vulkan, Metal, Dx? Currently *cglm* uses default clip space configuration (-1, 1) for camera functions (perspective, extract corners...), in the future other clip space configurations will be supported From f7b45776e95916672fc852dc8a98a73ddb51ac1d Mon Sep 17 00:00:00 2001 From: Carsten Hartenfels Date: Sat, 1 Jun 2019 13:45:19 +0200 Subject: [PATCH 34/56] Find post-build.sh even when not building in . You can make configure build in a different directory than the current one when you give it a `--prefix` option. When doing that, the current directy will be the build directory, not the source directory. This breaks running `./post-build.sh`. This commit fixes it by replacing the invocation with something that takes into account `$VPATH` which properly references the source directory. The `post-build.sh` still works properly because it references the current directory to do its thing, which will (correctly) be the build directory. --- makefile.am | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/makefile.am b/makefile.am index d6cdc70..4e49d4e 100644 --- a/makefile.am +++ b/makefile.am @@ -132,5 +132,11 @@ test_tests_SOURCES=\ test/src/test_affine.c \ test/src/test_bezier.c +# When running configure with --prefix, $VPATH references +# the source directory that post-build.sh is in. When not +# using a prefix, $VPATH will be unset, so we need to fall +# back to using . to run the script. +export VPATH + all-local: - sh ./post-build.sh + sh $${VPATH:-.}/post-build.sh From b22170794a8d203ef2871385ee3001b853cc19ed Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 09:39:11 +0300 Subject: [PATCH 35/56] struct: camera api as structs --- include/cglm/cglms.h | 1 + include/cglm/struct/cam.h | 463 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 464 insertions(+) create mode 100644 include/cglm/struct/cam.h diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h index 0ecc8de..34b08d0 100644 --- a/include/cglm/cglms.h +++ b/include/cglm/cglms.h @@ -23,6 +23,7 @@ extern "C" { #include "struct/box.h" #include "struct/color.h" #include "struct/io.h" +#include "struct/cam.h" #include "struct/project.h" #include "struct/sphere.h" #include "struct/curve.h" diff --git a/include/cglm/struct/cam.h b/include/cglm/struct/cam.h new file mode 100644 index 0000000..0446bf0 --- /dev/null +++ b/include/cglm/struct/cam.h @@ -0,0 +1,463 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/* + Functions: + CGLM_INLINE mat4s glms_frustum(float left, float right, + float bottom, float top, + float nearVal, float farVal) + CGLM_INLINE mat4s glms_ortho(float left, float right, + float bottom, float top, + float nearVal, float farVal) + CGLM_INLINE mat4s glms_ortho_aabb(vec3s box[2]); + CGLM_INLINE mat4s glms_ortho_aabb_p(vec3s box[2], float padding); + CGLM_INLINE mat4s glms_ortho_aabb_pz(vec3s box[2], float padding); + CGLM_INLINE mat4s glms_ortho_default(float aspect) + CGLM_INLINE mat4s glms_ortho_default_s(float aspect, float size) + CGLM_INLINE mat4s glms_perspective(float fovy, + float aspect, + float nearVal, + float farVal) + CGLM_INLINE void glms_persp_move_far(mat4s proj, float deltaFar) + CGLM_INLINE mat4s glms_perspective_default(float aspect) + CGLM_INLINE void glms_perspective_resize(mat4s proj, float aspect) + CGLM_INLINE mat4s glms_lookat(vec3s eye, vec3s center, vec3s up) + CGLM_INLINE mat4s glms_look(vec3s eye, vec3s dir, vec3s up) + CGLM_INLINE mat4s glms_look_anyup(vec3s eye, vec3s dir) + CGLM_INLINE void glms_persp_decomp(mat4s proj, + float *nearVal, + float *farVal, + float *top, + float *bottom, + float *left, + float *right) + CGLM_INLINE void glms_persp_decompv(mat4s proj, float dest[6]) + CGLM_INLINE void glms_persp_decomp_x(mat4s proj, + float *left, + float *right) + CGLM_INLINE void glms_persp_decomp_y(mat4s proj, + float *top, + float *bottom) + CGLM_INLINE void glms_persp_decomp_z(mat4s proj, + float *nearVal, + float *farVal) + CGLM_INLINE void glms_persp_decomp_far(mat4s proj, float *farVal) + CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearVal) + CGLM_INLINE float glms_persp_fovy(mat4s proj) + CGLM_INLINE float glms_persp_aspect(mat4s proj) + CGLM_INLINE vec4s glms_persp_sizes(mat4s proj, float fovy) + */ + +#ifndef cglms_cam_h +#define cglms_cam_h + +#include "../common.h" +#include "../types-struct.h" +#include "../plane.h" +#include "../cam.h" + +/*! + * @brief set up perspective peprojection matrix + * + * @param[in] left viewport.left + * @param[in] right viewport.right + * @param[in] bottom viewport.bottom + * @param[in] top viewport.top + * @param[in] nearVal near clipping plane + * @param[in] farVal far clipping plane + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_frustum(float left, float right, + float bottom, float top, + float nearVal, float farVal) { + mat4s dest; + glm_frustum(left, right, bottom, top, nearVal, farVal, dest.raw); + return dest; +} + +/*! + * @brief set up orthographic projection matrix + * + * @param[in] left viewport.left + * @param[in] right viewport.right + * @param[in] bottom viewport.bottom + * @param[in] top viewport.top + * @param[in] nearVal near clipping plane + * @param[in] farVal far clipping plane + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_ortho(float left, float right, + float bottom, float top, + float nearVal, float farVal) { + mat4s dest; + glm_ortho(left, right, bottom, top, nearVal, farVal, dest.raw); + return dest; +} + +/*! + * @brief set up orthographic projection matrix using bounding box + * + * bounding box (AABB) must be in view space + * + * @param[in] box AABB + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_ortho_aabb(vec3s box[2]) { + mat4s dest; + vec3 rawBox[2]; + + glms_vec3_unpack(rawBox, box, 2); + glm_ortho_aabb(rawBox, dest.raw); + + return dest; +} + +/*! + * @brief set up orthographic projection matrix using bounding box + * + * bounding box (AABB) must be in view space + * + * @param[in] box AABB + * @param[in] padding padding + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_ortho_aabb_p(vec3s box[2], float padding) { + mat4s dest; + vec3 rawBox[2]; + + glms_vec3_unpack(rawBox, box, 2); + glm_ortho_aabb_p(rawBox, padding, dest.raw); + + return dest; +} + +/*! + * @brief set up orthographic projection matrix using bounding box + * + * bounding box (AABB) must be in view space + * + * @param[in] box AABB + * @param[in] padding padding for near and far + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_ortho_aabb_pz(vec3s box[2], float padding) { + mat4s dest; + vec3 rawBox[2]; + + glms_vec3_unpack(rawBox, box, 2); + glm_ortho_aabb_pz(rawBox, padding, dest.raw); + + return dest; +} + +/*! + * @brief set up unit orthographic projection matrix + * + * @param[in] aspect aspect ration ( width / height ) + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_ortho_default(float aspect) { + mat4s dest; + glm_ortho_default(aspect, dest.raw); + return dest; +} + +/*! + * @brief set up orthographic projection matrix with given CUBE size + * + * @param[in] aspect aspect ratio ( width / height ) + * @param[in] size cube size + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_ortho_default_s(float aspect, float size) { + mat4s dest; + glm_ortho_default_s(aspect, size, dest.raw); + return dest; +} + +/*! + * @brief set up perspective projection matrix + * + * @param[in] fovy field of view angle + * @param[in] aspect aspect ratio ( width / height ) + * @param[in] nearVal near clipping plane + * @param[in] farVal far clipping planes + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_perspective(float fovy, float aspect, float nearVal, float farVal) { + mat4s dest; + glm_perspective(fovy, aspect, nearVal, farVal, dest.raw); + return dest; +} + +/*! + * @brief extend perspective projection matrix's far distance + * + * this function does not guarantee far >= near, be aware of that! + * + * @param[in, out] proj projection matrix to extend + * @param[in] deltaFar distance from existing far (negative to shink) + */ +CGLM_INLINE +void +glms_persp_move_far(mat4s proj, float deltaFar) { + glm_persp_move_far(proj.raw, deltaFar); +} + +/*! + * @brief set up perspective projection matrix with default near/far + * and angle values + * + * @param[in] aspect aspect ratio ( width / height ) + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_perspective_default(float aspect) { + mat4s dest; + glm_perspective_default(aspect, dest.raw); + return dest; +} + +/*! + * @brief resize perspective matrix by aspect ratio ( width / height ) + * this makes very easy to resize proj matrix when window /viewport + * reized + * + * @param[in, out] proj perspective projection matrix + * @param[in] aspect aspect ratio ( width / height ) + */ +CGLM_INLINE +void +glms_perspective_resize(mat4s proj, float aspect) { + glm_perspective_resize(aspect, proj.raw); +} + +/*! + * @brief set up view matrix + * + * NOTE: The UP vector must not be parallel to the line of sight from + * the eye point to the reference point + * + * @param[in] eye eye vector + * @param[in] center center vector + * @param[in] up up vector + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_lookat(vec3s eye, vec3s center, vec3s up) { + mat4s dest; + glm_lookat(eye.raw, center.raw, up.raw, dest.raw); + return dest; +} + +/*! + * @brief set up view matrix + * + * convenient wrapper for lookat: if you only have direction not target self + * then this might be useful. Because you need to get target from direction. + * + * NOTE: The UP vector must not be parallel to the line of sight from + * the eye point to the reference point + * + * @param[in] eye eye vector + * @param[in] dir direction vector + * @param[in] up up vector + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_look(vec3s eye, vec3s dir, vec3s up) { + mat4s dest; + glm_look(eye.raw, dir.raw, up.raw, dest.raw); + return dest; +} + +/*! + * @brief set up view matrix + * + * convenient wrapper for look: if you only have direction and if you don't + * care what UP vector is then this might be useful to create view matrix + * + * @param[in] eye eye vector + * @param[in] dir direction vector + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_look_anyup(vec3s eye, vec3s dir) { + mat4s dest; + glm_look_anyup(eye.raw, dir.raw, dest.raw); + return dest; +} + +/*! + * @brief decomposes frustum values of perspective projection. + * + * @param[in] proj perspective projection matrix + * @param[out] nearVal near + * @param[out] farVal far + * @param[out] top top + * @param[out] bottom bottom + * @param[out] left left + * @param[out] right right + */ +CGLM_INLINE +void +glms_persp_decomp(mat4s proj, + float * __restrict nearVal, + float * __restrict farVal, + float * __restrict top, + float * __restrict bottom, + float * __restrict left, + float * __restrict right) { + glm_persp_decomp(proj.raw, nearVal, farVal, top, bottom, left, right); +} + +/*! + * @brief decomposes frustum values of perspective projection. + * this makes easy to get all values at once + * + * @param[in] proj perspective projection matrix + * @param[out] dest array + */ +CGLM_INLINE +void +glms_persp_decompv(mat4s proj, float dest[6]) { + glm_persp_decompv(proj.raw, dest); +} + +/*! + * @brief decomposes left and right values of perspective projection. + * x stands for x axis (left / right axis) + * + * @param[in] proj perspective projection matrix + * @param[out] left left + * @param[out] right right + */ +CGLM_INLINE +void +glms_persp_decomp_x(mat4s proj, + float * __restrict left, + float * __restrict right) { + glm_persp_decomp_x(proj.raw, left, right); +} + +/*! + * @brief decomposes top and bottom values of perspective projection. + * y stands for y axis (top / botom axis) + * + * @param[in] proj perspective projection matrix + * @param[out] top top + * @param[out] bottom bottom + */ +CGLM_INLINE +void +glms_persp_decomp_y(mat4s proj, + float * __restrict top, + float * __restrict bottom) { + glm_persp_decomp_y(proj.raw, top, bottom); +} + +/*! + * @brief decomposes near and far values of perspective projection. + * z stands for z axis (near / far axis) + * + * @param[in] proj perspective projection matrix + * @param[out] nearVal near + * @param[out] farVal far + */ +CGLM_INLINE +void +glms_persp_decomp_z(mat4s proj, + float * __restrict nearVal, + float * __restrict farVal) { + glm_persp_decomp_z(proj.raw, nearVal, farVal); +} + +/*! + * @brief decomposes far value of perspective projection. + * + * @param[in] proj perspective projection matrix + * @param[out] farVal far + */ +CGLM_INLINE +void +glms_persp_decomp_far(mat4s proj, float * __restrict farVal) { + glm_persp_decomp_far(proj.raw, farVal); +} + +/*! + * @brief decomposes near value of perspective projection. + * + * @param[in] proj perspective projection matrix + * @param[out] nearVal near + */ +CGLM_INLINE +void +glms_persp_decomp_near(mat4s proj, float * __restrict nearVal) { + glm_persp_decomp_near(proj.raw, nearVal); +} + +/*! + * @brief returns field of view angle along the Y-axis (in radians) + * + * if you need to degrees, use glm_deg to convert it or use this: + * fovy_deg = glm_deg(glm_persp_fovy(projMatrix)) + * + * @param[in] proj perspective projection matrix + */ +CGLM_INLINE +float +glms_persp_fovy(mat4s proj) { + return glm_persp_fovy(proj.raw); +} + +/*! + * @brief returns aspect ratio of perspective projection + * + * @param[in] proj perspective projection matrix + */ +CGLM_INLINE +float +glms_persp_aspect(mat4s proj) { + return glm_persp_aspect(proj.raw); +} + +/*! + * @brief returns sizes of near and far planes of perspective projection + * + * @param[in] proj perspective projection matrix + * @param[in] fovy fovy (see brief) + * @returns sizes as vector, sizes order: [Wnear, Hnear, Wfar, Hfar] + */ +CGLM_INLINE +vec4s +glms_persp_sizes(mat4s proj, float fovy) { + vec4s dest; + glm_persp_sizes(proj.raw, fovy, dest.raw); + return dest; +} + +#endif /* cglms_cam_h */ From 2b1126a2fc4d0f5bf347e88ebef543efce7e7f61 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 09:47:52 +0300 Subject: [PATCH 36/56] code style --- include/cglm/cam.h | 70 ++++++++++++++------------------------- include/cglm/struct/cam.h | 34 ++++++------------- 2 files changed, 35 insertions(+), 69 deletions(-) diff --git a/include/cglm/cam.h b/include/cglm/cam.h index e77b989..ad971fe 100644 --- a/include/cglm/cam.h +++ b/include/cglm/cam.h @@ -7,48 +7,37 @@ /* Functions: - CGLM_INLINE void glm_frustum(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, + CGLM_INLINE void glm_frustum(float left, float right, + float bottom, float top, + float nearVal, float farVal, mat4 dest) - CGLM_INLINE void glm_ortho(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, + CGLM_INLINE void glm_ortho(float left, float right, + float bottom, float top, + float nearVal, float farVal, mat4 dest) CGLM_INLINE void glm_ortho_aabb(vec3 box[2], mat4 dest) - CGLM_INLINE void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) + CGLM_INLINE void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest) CGLM_INLINE void glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest) CGLM_INLINE void glm_ortho_default(float aspect, mat4 dest) - CGLM_INLINE void glm_ortho_default_s(float aspect, float size, mat4 dest) + CGLM_INLINE void glm_ortho_default_s(float aspect, float size, mat4 dest) CGLM_INLINE void glm_perspective(float fovy, float aspect, float nearVal, float farVal, mat4 dest) - CGLM_INLINE void glm_perspective_default(float aspect, mat4 dest) - CGLM_INLINE void glm_perspective_resize(float aspect, mat4 proj) + CGLM_INLINE void glm_perspective_default(float aspect, mat4 dest) + CGLM_INLINE void glm_perspective_resize(float aspect, mat4 proj) CGLM_INLINE void glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest) CGLM_INLINE void glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest) CGLM_INLINE void glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) CGLM_INLINE void glm_persp_decomp(mat4 proj, - float *nearVal, - float *farVal, - float *top, - float *bottom, - float *left, - float *right) + float *nearVal, float *farVal, + float *top, float *bottom, + float *left, float *right) CGLM_INLINE void glm_persp_decompv(mat4 proj, float dest[6]) CGLM_INLINE void glm_persp_decomp_x(mat4 proj, float *left, float *right) CGLM_INLINE void glm_persp_decomp_y(mat4 proj, float *top, float *bottom) - CGLM_INLINE void glm_persp_decomp_z(mat4 proj, - float *nearVal, - float *farVal) + CGLM_INLINE void glm_persp_decomp_z(mat4 proj, float *nearv, float *farv) CGLM_INLINE void glm_persp_decomp_far(mat4 proj, float *farVal) CGLM_INLINE void glm_persp_decomp_near(mat4 proj, float *nearVal) CGLM_INLINE float glm_persp_fovy(mat4 proj) @@ -75,12 +64,9 @@ */ CGLM_INLINE void -glm_frustum(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, +glm_frustum(float left, float right, + float bottom, float top, + float nearVal, float farVal, mat4 dest) { float rl, tb, fn, nv; @@ -113,12 +99,9 @@ glm_frustum(float left, */ CGLM_INLINE void -glm_ortho(float left, - float right, - float bottom, - float top, - float nearVal, - float farVal, +glm_ortho(float left, float right, + float bottom, float top, + float nearVal, float farVal, mat4 dest) { float rl, tb, fn; @@ -218,9 +201,7 @@ glm_ortho_default(float aspect, mat4 dest) { */ CGLM_INLINE void -glm_ortho_default_s(float aspect, - float size, - mat4 dest) { +glm_ortho_default_s(float aspect, float size, mat4 dest) { if (aspect >= 1.0f) { glm_ortho(-size * aspect, size * aspect, @@ -420,12 +401,9 @@ glm_look_anyup(vec3 eye, vec3 dir, mat4 dest) { CGLM_INLINE void glm_persp_decomp(mat4 proj, - float * __restrict nearVal, - float * __restrict farVal, - float * __restrict top, - float * __restrict bottom, - float * __restrict left, - float * __restrict right) { + float * __restrict nearVal, float * __restrict farVal, + float * __restrict top, float * __restrict bottom, + float * __restrict left, float * __restrict right) { float m00, m11, m20, m21, m22, m32, n, f; float n_m11, n_m00; diff --git a/include/cglm/struct/cam.h b/include/cglm/struct/cam.h index 0446bf0..dc2427f 100644 --- a/include/cglm/struct/cam.h +++ b/include/cglm/struct/cam.h @@ -14,7 +14,7 @@ float bottom, float top, float nearVal, float farVal) CGLM_INLINE mat4s glms_ortho_aabb(vec3s box[2]); - CGLM_INLINE mat4s glms_ortho_aabb_p(vec3s box[2], float padding); + CGLM_INLINE mat4s glms_ortho_aabb_p(vec3s box[2], float padding); CGLM_INLINE mat4s glms_ortho_aabb_pz(vec3s box[2], float padding); CGLM_INLINE mat4s glms_ortho_default(float aspect) CGLM_INLINE mat4s glms_ortho_default_s(float aspect, float size) @@ -29,22 +29,13 @@ CGLM_INLINE mat4s glms_look(vec3s eye, vec3s dir, vec3s up) CGLM_INLINE mat4s glms_look_anyup(vec3s eye, vec3s dir) CGLM_INLINE void glms_persp_decomp(mat4s proj, - float *nearVal, - float *farVal, - float *top, - float *bottom, - float *left, - float *right) - CGLM_INLINE void glms_persp_decompv(mat4s proj, float dest[6]) - CGLM_INLINE void glms_persp_decomp_x(mat4s proj, - float *left, - float *right) - CGLM_INLINE void glms_persp_decomp_y(mat4s proj, - float *top, - float *bottom) - CGLM_INLINE void glms_persp_decomp_z(mat4s proj, - float *nearVal, - float *farVal) + float *nearv, float *farv, + float *top, float *bottom, + float *left, float *right) + CGLM_INLINE void glms_persp_decompv(mat4s proj, float dest[6]) + CGLM_INLINE void glms_persp_decomp_x(mat4s proj, float *left, float *right) + CGLM_INLINE void glms_persp_decomp_y(mat4s proj, float *top, float *bottom) + CGLM_INLINE void glms_persp_decomp_z(mat4s proj, float *nearv, float *farv) CGLM_INLINE void glms_persp_decomp_far(mat4s proj, float *farVal) CGLM_INLINE void glms_persp_decomp_near(mat4s proj, float *nearVal) CGLM_INLINE float glms_persp_fovy(mat4s proj) @@ -326,12 +317,9 @@ glms_look_anyup(vec3s eye, vec3s dir) { CGLM_INLINE void glms_persp_decomp(mat4s proj, - float * __restrict nearVal, - float * __restrict farVal, - float * __restrict top, - float * __restrict bottom, - float * __restrict left, - float * __restrict right) { + float * __restrict nearVal, float * __restrict farVal, + float * __restrict top, float * __restrict bottom, + float * __restrict left, float * __restrict right) { glm_persp_decomp(proj.raw, nearVal, farVal, top, bottom, left, right); } From b9de553f23557439ae034524520961611e9057ab Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 12:01:14 +0300 Subject: [PATCH 37/56] quat: fix `glm_quat_axis` axis parameter type --- include/cglm/call/quat.h | 2 +- include/cglm/quat.h | 4 ++-- src/quat.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/cglm/call/quat.h b/include/cglm/call/quat.h index 2778a58..3080bc7 100644 --- a/include/cglm/call/quat.h +++ b/include/cglm/call/quat.h @@ -91,7 +91,7 @@ glmc_quat_angle(versor q); CGLM_EXPORT void -glmc_quat_axis(versor q, versor dest); +glmc_quat_axis(versor q, vec3 dest); CGLM_EXPORT void diff --git a/include/cglm/quat.h b/include/cglm/quat.h index 2ebc8b3..7745ed0 100644 --- a/include/cglm/quat.h +++ b/include/cglm/quat.h @@ -29,7 +29,7 @@ CGLM_INLINE void glm_quat_imagn(versor q, vec3 dest); CGLM_INLINE float glm_quat_imaglen(versor q); CGLM_INLINE float glm_quat_angle(versor q); - CGLM_INLINE void glm_quat_axis(versor q, versor dest); + CGLM_INLINE void glm_quat_axis(versor q, vec3 dest); CGLM_INLINE void glm_quat_mul(versor p, versor q, versor dest); CGLM_INLINE void glm_quat_mat4(versor q, mat4 dest); CGLM_INLINE void glm_quat_mat4t(versor q, mat4 dest); @@ -388,7 +388,7 @@ glm_quat_angle(versor q) { */ CGLM_INLINE void -glm_quat_axis(versor q, versor dest) { +glm_quat_axis(versor q, vec3 dest) { glm_quat_imagn(q, dest); } diff --git a/src/quat.c b/src/quat.c index 32674a7..8de4696 100644 --- a/src/quat.c +++ b/src/quat.c @@ -124,7 +124,7 @@ glmc_quat_angle(versor q) { CGLM_EXPORT void -glmc_quat_axis(versor q, versor dest) { +glmc_quat_axis(versor q, vec3 dest) { glm_quat_axis(q, dest); } From 290f54bad4fa43f752e32e135dab308c3acc2b4b Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 12:12:50 +0300 Subject: [PATCH 38/56] struct: quaternion api as structs --- include/cglm/cglms.h | 1 + include/cglm/color.h | 6 - include/cglm/struct/quat.h | 514 ++++++++++++++++++++++++++++++++++++ include/cglm/types-struct.h | 17 +- 4 files changed, 531 insertions(+), 7 deletions(-) create mode 100644 include/cglm/struct/quat.h diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h index 34b08d0..3cf7841 100644 --- a/include/cglm/cglms.h +++ b/include/cglm/cglms.h @@ -24,6 +24,7 @@ extern "C" { #include "struct/color.h" #include "struct/io.h" #include "struct/cam.h" +#include "struct/quat.h" #include "struct/project.h" #include "struct/sphere.h" #include "struct/curve.h" diff --git a/include/cglm/color.h b/include/cglm/color.h index 77949dc..69566ad 100644 --- a/include/cglm/color.h +++ b/include/cglm/color.h @@ -23,10 +23,4 @@ glm_luminance(vec3 rgb) { return glm_dot(rgb, l); } -CGLM_INLINE -void -glm_normal(vec3 a, vec3 b, vec3 c, vec3 dest) { - -} - #endif /* cglm_color_h */ diff --git a/include/cglm/struct/quat.h b/include/cglm/struct/quat.h new file mode 100644 index 0000000..c6a4192 --- /dev/null +++ b/include/cglm/struct/quat.h @@ -0,0 +1,514 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/* + Macros: + GLMS_QUAT_IDENTITY_INIT + GLMS_QUAT_IDENTITY + + Functions: + CGLM_INLINE versors glms_quat_identity() + CGLM_INLINE void glms_quat_identity_array(versor *q, size_t count) + CGLM_INLINE versors glms_quat_init(float x, float y, float z, float w) + CGLM_INLINE versors glms_quatv(float angle, vec3s axis) + CGLM_INLINE versors glms_quat(float angle, float x, float y, float z) + CGLM_INLINE float glms_quat_norm(versors q) + CGLM_INLINE versors glms_quat_normalize(versors q) + CGLM_INLINE float glms_quat_dot(versors p, versors q) + CGLM_INLINE versors glms_quat_conjugate(versors q) + CGLM_INLINE versors glms_quat_inv(versors q) + CGLM_INLINE versors glms_quat_add(versors p, versors q) + CGLM_INLINE versors glms_quat_sub(versors p, versors q) + CGLM_INLINE vec3s glms_quat_imagn(versors q) + CGLM_INLINE float glms_quat_imaglen(versors q) + CGLM_INLINE float glms_quat_angle(versors q) + CGLM_INLINE vec3s glms_quat_axis(versors q) + CGLM_INLINE versors glms_quat_mul(versors p, versors q) + CGLM_INLINE mat4s glms_quat_mat4(versors q) + CGLM_INLINE mat4s glms_quat_mat4t(versors q) + CGLM_INLINE mat3s glms_quat_mat3(versors q) + CGLM_INLINE mat3s glms_quat_mat3t(versors q) + CGLM_INLINE versors glms_quat_lerp(versors from, versors to, float t) + CGLM_INLINE versors glms_quat_slerp(versors from, versors to, float t) + CGLM_INLINE mat4s. glms_quat_look(vec3s eye, versors ori) + CGLM_INLINE versors glms_quat_for(vec3s dir, vec3s fwd, vec3s up) + CGLM_INLINE versors glms_quat_forp(vec3s from, vec3s to, vec3s fwd, vec3s up) + CGLM_INLINE vec3s glms_quat_rotatev(versors q, vec3s v) + CGLM_INLINE mat4s glms_quat_rotate(mat4s m, versors q) + CGLM_INLINE mat4s glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) + CGLM_INLINE mat4s glms_quat_rotate_atm(versors q, vec3s pivot) + */ + +#ifndef cglms_quat_h +#define cglms_quat_h + +#include "../common.h" +#include "../types-struct.h" +#include "../plane.h" +#include "../quat.h" + +/* + * IMPORTANT: + * ---------------------------------------------------------------------------- + * cglm stores quat as [x, y, z, w] since v0.3.6 + * + * it was [w, x, y, z] before v0.3.6 it has been changed to [x, y, z, w] + * with v0.3.6 version. + * ---------------------------------------------------------------------------- + */ + +#define GLMS_QUAT_IDENTITY_INIT GLM_QUAT_IDENTITY_INIT +#define GLMS_QUAT_IDENTITY ((versors)GLMS_QUAT_IDENTITY_INIT) + +/*! + * @brief makes given quat to identity + * + * @returns identity quaternion + */ +CGLM_INLINE +versors +glms_quat_identity() { + versors dest; + glm_quat_identity(dest.raw); + return dest; +} + +/*! + * @brief make given quaternion array's each element identity quaternion + * + * @param[in, out] q quat array (must be aligned (16) + * if alignment is not disabled) + * + * @param[in] count count of quaternions + */ +CGLM_INLINE +void +glms_quat_identity_array(versors * __restrict q, size_t count) { + CGLM_ALIGN(16) versor v = GLM_QUAT_IDENTITY_INIT; + size_t i; + + for (i = 0; i < count; i++) { + glm_vec4_copy(v, q[i].raw); + } +} + +/*! + * @brief inits quaterion with raw values + * + * @param[in] x x + * @param[in] y y + * @param[in] z z + * @param[in] w w (real part) + * @returns quaternion + */ +CGLM_INLINE +versors +glms_quat_init(float x, float y, float z, float w) { + versors dest; + glm_quat_init(dest.raw, x, y, z, w); + return dest; +} + +/*! + * @brief creates NEW quaternion with axis vector + * + * @param[in] angle angle (radians) + * @param[in] axis axis + * @returns quaternion + */ +CGLM_INLINE +versors +glms_quatv(float angle, vec3s axis) { + versors dest; + glm_quatv(dest.raw, angle, axis.raw); + return dest; +} + +/*! + * @brief creates NEW quaternion with individual axis components + * + * @param[in] angle angle (radians) + * @param[in] x axis.x + * @param[in] y axis.y + * @param[in] z axis.z + * @returns quaternion + */ +CGLM_INLINE +versors +glms_quat(float angle, float x, float y, float z) { + versors dest; + glm_quat(dest.raw, angle, x, y, z); + return dest; +} + +/*! + * @brief returns norm (magnitude) of quaternion + * + * @param[out] q quaternion + */ +CGLM_INLINE +float +glms_quat_norm(versors q) { + return glm_quat_norm(q.raw); +} + +/*! + * @brief normalize quaternion + * + * @param[in] q quaternion + * @returns quaternion + */ +CGLM_INLINE +versors +glms_quat_normalize(versors q) { + versors dest; + glm_quat_normalize_to(q.raw, dest.raw); + return dest; +} + +/*! + * @brief dot product of two quaternion + * + * @param[in] p quaternion 1 + * @param[in] q quaternion 2 + * @returns dot product + */ +CGLM_INLINE +float +glms_quat_dot(versors p, versors q) { + return glm_quat_dot(p.raw, q.raw); +} + +/*! + * @brief conjugate of quaternion + * + * @param[in] q quaternion + * @returns conjugate + */ +CGLM_INLINE +versors +glms_quat_conjugate(versors q) { + versors dest; + glm_quat_conjugate(q.raw, dest.raw); + return dest; +} + +/*! + * @brief inverse of non-zero quaternion + * + * @param[in] q quaternion + * @returns inverse quaternion + */ +CGLM_INLINE +versors +glms_quat_inv(versors q) { + versors dest; + glm_quat_inv(q.raw, dest.raw); + return dest; +} + +/*! + * @brief add (componentwise) two quaternions and store result in dest + * + * @param[in] p quaternion 1 + * @param[in] q quaternion 2 + * @returns result quaternion + */ +CGLM_INLINE +versors +glms_quat_add(versors p, versors q) { + versors dest; + glm_quat_add(p.raw, q.raw, dest.raw); + return dest; +} + +/*! + * @brief subtract (componentwise) two quaternions and store result in dest + * + * @param[in] p quaternion 1 + * @param[in] q quaternion 2 + * @returns result quaternion + */ +CGLM_INLINE +versors +glms_quat_sub(versors p, versors q) { + versors dest; + glm_quat_sub(p.raw, q.raw, dest.raw); + return dest; +} + +/*! + * @brief returns normalized imaginary part of quaternion + * + * @param[in] q quaternion + */ +CGLM_INLINE +vec3s +glms_quat_imagn(versors q) { + vec3s dest; + glm_normalize_to(q.imag.raw, dest.raw); + return dest; +} + +/*! + * @brief returns length of imaginary part of quaternion + * + * @param[in] q quaternion + */ +CGLM_INLINE +float +glms_quat_imaglen(versors q) { + return glm_quat_imaglen(q.raw); +} + +/*! + * @brief returns angle of quaternion + * + * @param[in] q quaternion + */ +CGLM_INLINE +float +glms_quat_angle(versors q) { + return glm_quat_angle(q.raw); +} + +/*! + * @brief axis of quaternion + * + * @param[in] q quaternion + * @returns axis of quaternion + */ +CGLM_INLINE +vec3s +glms_quat_axis(versors q) { + vec3s dest; + glm_quat_axis(q.raw, dest.raw); + return dest; +} + +/*! + * @brief multiplies two quaternion and stores result in dest + * this is also called Hamilton Product + * + * According to WikiPedia: + * The product of two rotation quaternions [clarification needed] will be + * equivalent to the rotation q followed by the rotation p + * + * @param[in] p quaternion 1 + * @param[in] q quaternion 2 + * @returns result quaternion + */ +CGLM_INLINE +versors +glms_quat_mul(versors p, versors q) { + versors dest; + glm_quat_mul(p.raw, q.raw, dest.raw); + return dest; +} + +/*! + * @brief convert quaternion to mat4 + * + * @param[in] q quaternion + * @returns result matrix + */ +CGLM_INLINE +mat4s +glms_quat_mat4(versors q) { + mat4s dest; + glm_quat_mat4(q.raw, dest.raw); + return dest; +} + +/*! + * @brief convert quaternion to mat4 (transposed) + * + * @param[in] q quaternion + * @returns result matrix as transposed + */ +CGLM_INLINE +mat4s +glms_quat_mat4t(versors q) { + mat4s dest; + glm_quat_mat4t(q.raw, dest.raw); + return dest; +} + +/*! + * @brief convert quaternion to mat3 + * + * @param[in] q quaternion + * @returns result matrix + */ +CGLM_INLINE +mat3s +glms_quat_mat3(versors q) { + mat3s dest; + glm_quat_mat3(q.raw, dest.raw); + return dest; +} + +/*! + * @brief convert quaternion to mat3 (transposed) + * + * @param[in] q quaternion + * @returns result matrix + */ +CGLM_INLINE +mat3s +glms_quat_mat3t(versors q) { + mat3s dest; + glm_quat_mat3t(q.raw, dest.raw); + return dest; +} + +/*! + * @brief interpolates between two quaternions + * using linear interpolation (LERP) + * + * @param[in] from from + * @param[in] to to + * @param[in] t interpolant (amount) clamped between 0 and 1 + * @returns result quaternion + */ +CGLM_INLINE +versors +glms_quat_lerp(versors from, versors to, float t) { + versors dest; + glm_quat_lerp(from.raw, to.raw, t, dest.raw); + return dest; +} + +/*! + * @brief interpolates between two quaternions + * using spherical linear interpolation (SLERP) + * + * @param[in] from from + * @param[in] to to + * @param[in] t amout + * @returns result quaternion + */ +CGLM_INLINE +versors +glms_quat_slerp(versors from, versors to, float t) { + versors dest; + glm_quat_slerp(from.raw, to.raw, t, dest.raw); + return dest; +} + +/*! + * @brief creates view matrix using quaternion as camera orientation + * + * @param[in] eye eye + * @param[in] ori orientation in world space as quaternion + * @returns view matrix + */ +CGLM_INLINE +mat4s +glms_quat_look(vec3s eye, versors ori) { + mat4s dest; + glm_quat_look(eye.raw, ori.raw, dest.raw); + return dest; +} + +/*! + * @brief creates look rotation quaternion + * + * @param[in] dir direction to look + * @param[in] fwd forward vector + * @param[in] up up vector + * @returns destination quaternion + */ +CGLM_INLINE +versors +glms_quat_for(vec3s dir, vec3s fwd, vec3s up) { + versors dest; + glm_quat_for(dir.raw, fwd.raw, up.raw, dest.raw); + return dest; +} + +/*! + * @brief creates look rotation quaternion using source and + * destination positions p suffix stands for position + * + * @param[in] from source point + * @param[in] to destination point + * @param[in] fwd forward vector + * @param[in] up up vector + * @returns destination quaternion + */ +CGLM_INLINE +versors +glms_quat_forp(vec3s from, vec3s to, vec3s fwd, vec3s up) { + versors dest; + glm_quat_forp(from.raw, to.raw, fwd.raw, up.raw, dest.raw); + return dest; +} + +/*! + * @brief rotate vector using using quaternion + * + * @param[in] q quaternion + * @param[in] v vector to rotate + * @returns rotated vector + */ +CGLM_INLINE +vec3s +glms_quat_rotatev(versors q, vec3s v) { + vec3s dest; + glm_quat_rotatev(q.raw, v.raw, dest.raw); + return dest; +} + +/*! + * @brief rotate existing transform matrix using quaternion + * + * @param[in] m existing transform matrix + * @param[in] q quaternion + * @returns rotated matrix/transform + */ +CGLM_INLINE +mat4s +glms_quat_rotate(mat4s m, versors q) { + glm_quat_rotate(m.raw, q.raw, m.raw); + return m; +} + +/*! + * @brief rotate existing transform matrix using quaternion at pivot point + * + * @param[in, out] m existing transform matrix + * @param[in] q quaternion + * @returns pivot + */ +CGLM_INLINE +mat4s +glms_quat_rotate_at(mat4s m, versors q, vec3s pivot) { + glm_quat_rotate_at(m.raw, q.raw, pivot.raw); + return m; +} + +/*! + * @brief rotate NEW transform matrix using quaternion at pivot point + * + * this creates rotation matrix, it assumes you don't have a matrix + * + * this should work faster than glm_quat_rotate_at because it reduces + * one glm_translate. + * + * @param[in] q quaternion + * @returns pivot + */ +CGLM_INLINE +mat4s +glms_quat_rotate_atm(versors q, vec3s pivot) { + mat4s dest; + glm_quat_rotate_atm(dest.raw, q.raw, pivot.raw); + return dest; +} + +#endif /* cglms_quat_h */ diff --git a/include/cglm/types-struct.h b/include/cglm/types-struct.h index f71c286..4901f01 100644 --- a/include/cglm/types-struct.h +++ b/include/cglm/types-struct.h @@ -44,7 +44,22 @@ typedef union CGLM_ALIGN_IF(16) vec4s { vec4 raw; } vec4s; -typedef vec4s versors; +typedef union CGLM_ALIGN_IF(16) versors { +#ifndef CGLM_NO_ANONYMOUS_STRUCT + struct { + float x; + float y; + float z; + float w; + }; + + struct { + vec3s imag; + float real; + }; +#endif + vec4 raw; +} versors; typedef union mat3s { #ifndef CGLM_NO_ANONYMOUS_STRUCT From 9a73d969a7365a715dfc768c45b52d273ddd5490 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 12:24:18 +0300 Subject: [PATCH 39/56] struct: euler api as structs --- include/cglm/cglms.h | 1 + include/cglm/struct/euler.h | 152 ++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 include/cglm/struct/euler.h diff --git a/include/cglm/cglms.h b/include/cglm/cglms.h index 3cf7841..66a0e9b 100644 --- a/include/cglm/cglms.h +++ b/include/cglm/cglms.h @@ -25,6 +25,7 @@ extern "C" { #include "struct/io.h" #include "struct/cam.h" #include "struct/quat.h" +#include "struct/euler.h" #include "struct/project.h" #include "struct/sphere.h" #include "struct/curve.h" diff --git a/include/cglm/struct/euler.h b/include/cglm/struct/euler.h new file mode 100644 index 0000000..272ea7f --- /dev/null +++ b/include/cglm/struct/euler.h @@ -0,0 +1,152 @@ +/* + * Copyright (c), Recep Aslantas. + * + * MIT License (MIT), http://opensource.org/licenses/MIT + * Full license can be found in the LICENSE file + */ + +/* + NOTE: + angles must be passed as [X-Angle, Y-Angle, Z-angle] order + For instance you don't pass angles as [Z-Angle, X-Angle, Y-angle] to + glm_euler_zxy funciton, All RELATED functions accept angles same order + which is [X, Y, Z]. + */ + +/* + Types: + enum glm_euler_sq + + Functions: + CGLM_INLINE vec3s glms_euler_angles(mat4s m) + CGLM_INLINE mat4s glms_euler_xyz(vec3s angles) + CGLM_INLINE mat4s glms_euler_xzy(vec3s angles) + CGLM_INLINE mat4s glms_euler_yxz(vec3s angles) + CGLM_INLINE mat4s glms_euler_yzx(vec3s angles) + CGLM_INLINE mat4s glms_euler_zxy(vec3s angles) + CGLM_INLINE mat4s glms_euler_zyx(vec3s angles) + CGLM_INLINE mat4s glms_euler_by_order(vec3s angles, glm_euler_sq ord) + */ + +#ifndef cglms_euler_h +#define cglms_euler_h + +#include "../common.h" +#include "../types-struct.h" +#include "../euler.h" + +/*! + * @brief extract euler angles (in radians) using xyz order + * + * @param[in] m affine transform + * @returns angles vector [x, y, z] + */ +CGLM_INLINE +vec3s +glms_euler_angles(mat4s m) { + vec3s dest; + glm_euler_angles(m.raw, dest.raw); + return dest; +} + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_xyz(vec3s angles) { + mat4s dest; + glm_euler_xyz(angles.raw, dest.raw); + return dest; +} + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_xzy(vec3s angles) { + mat4s dest; + glm_euler_xzy(angles.raw, dest.raw); + return dest; +} + + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_yxz(vec3s angles) { + mat4s dest; + glm_euler_yxz(angles.raw, dest.raw); + return dest; +} + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_yzx(vec3s angles) { + mat4s dest; + glm_euler_yzx(angles.raw, dest.raw); + return dest; +} + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_zxy(vec3s angles) { + mat4s dest; + glm_euler_zxy(angles.raw, dest.raw); + return dest; +} + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_zyx(vec3s angles) { + mat4s dest; + glm_euler_zyx(angles.raw, dest.raw); + return dest; +} + +/*! + * @brief build rotation matrix from euler angles + * + * @param[in] angles angles as vector [Xangle, Yangle, Zangle] + * @param[in] ord euler order + * @returns rotation matrix + */ +CGLM_INLINE +mat4s +glms_euler_by_order(vec3s angles, glm_euler_sq ord) { + mat4s dest; + glm_euler_by_order(angles.raw, ord, dest.raw); + return dest; +} + +#endif /* cglms_euler_h */ From 099239e3f5e27680fd1d0bceca63ee9d54c6bcdd Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 12:29:36 +0300 Subject: [PATCH 40/56] rename cglms.h to struct.h --- include/cglm/{cglms.h => struct.h} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename include/cglm/{cglms.h => struct.h} (100%) diff --git a/include/cglm/cglms.h b/include/cglm/struct.h similarity index 100% rename from include/cglm/cglms.h rename to include/cglm/struct.h From 817da18f3abced46b33cb273808d2b3bc0198bf2 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 12:33:07 +0300 Subject: [PATCH 41/56] build: add struct api to makefile --- makefile.am | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/makefile.am b/makefile.am index 4e49d4e..546e67a 100644 --- a/makefile.am +++ b/makefile.am @@ -98,6 +98,26 @@ cglm_simd_avx_HEADERS = include/cglm/simd/avx/mat4.h \ cglm_simd_neondir=$(includedir)/cglm/simd/neon cglm_simd_neon_HEADERS = include/cglm/simd/neon/mat4.h +cglm_structdir=$(includedir)/cglm/struct +cglm_struct_HEADERS = include/cglm/struct/mat4.h \ + include/cglm/struct/mat3.h \ + include/cglm/struct/vec3.h \ + include/cglm/struct/vec3-ext.h \ + include/cglm/struct/vec4.h \ + include/cglm/struct/vec4-ext.h \ + include/cglm/struct/affine.h \ + include/cglm/struct/io.h \ + include/cglm/struct/cam.h \ + include/cglm/struct/quat.h \ + include/cglm/struct/euler.h \ + include/cglm/struct/plane.h \ + include/cglm/struct/frustum.h \ + include/cglm/struct/box.h \ + include/cglm/struct/project.h \ + include/cglm/struct/sphere.h \ + include/cglm/struct/color.h \ + include/cglm/struct/curve.h + libcglm_la_SOURCES=\ src/euler.c \ src/affine.c \ From 3797c55154b08da891f3b9e56737b8a948b272a2 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Mon, 3 Jun 2019 12:54:27 +0300 Subject: [PATCH 42/56] fix test build, supress warnings, update header guards for struct api --- include/cglm/struct/affine.h | 8 ++++---- include/cglm/struct/box.h | 8 ++++---- include/cglm/struct/color.h | 6 +++--- include/cglm/struct/curve.h | 6 +++--- include/cglm/struct/frustum.h | 6 +++--- include/cglm/struct/io.h | 6 +++--- include/cglm/struct/mat3.h | 6 +++--- include/cglm/struct/mat4.h | 7 +++---- include/cglm/struct/plane.h | 6 +++--- include/cglm/struct/project.h | 8 ++++---- include/cglm/struct/sphere.h | 6 +++--- include/cglm/struct/vec3-ext.h | 6 +++--- include/cglm/struct/vec3.h | 29 ++++++----------------------- include/cglm/struct/vec4-ext.h | 6 +++--- include/cglm/struct/vec4.h | 12 +++++------- test/src/test_common.h | 6 +++--- 16 files changed, 56 insertions(+), 76 deletions(-) diff --git a/include/cglm/struct/affine.h b/include/cglm/struct/affine.h index 0f753c5..36dbe0f 100644 --- a/include/cglm/struct/affine.h +++ b/include/cglm/struct/affine.h @@ -29,8 +29,8 @@ CGLM_INLINE void glms_decompose(mat4s m, vec4s t, mat4s * r, vec3s * s); */ -#ifndef cglm_affines_h -#define cglm_affines_h +#ifndef cglms_affines_h +#define cglms_affines_h #include "../common.h" #include "../types-struct.h" @@ -117,8 +117,8 @@ glms_translate_make(vec3s v) { /*! * @brief creates NEW scale matrix by v vector * - * @param[out] m affine transfrom * @param[in] v scale vector [x, y, z] + * @returns affine transfrom */ CGLM_INLINE mat4s @@ -334,4 +334,4 @@ glms_decompose(mat4s m, vec4s * __restrict t, mat4s * __restrict r, vec3s * __re glm_decompose(m.raw, t->raw, r->raw, s->raw); } -#endif /* cglm_affines_h */ +#endif /* cglms_affines_h */ diff --git a/include/cglm/struct/box.h b/include/cglm/struct/box.h index 9dc915e..a55884f 100644 --- a/include/cglm/struct/box.h +++ b/include/cglm/struct/box.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_boxs_h -#define cglm_boxs_h +#ifndef cglms_boxs_h +#define cglms_boxs_h #include "../common.h" #include "../types-struct.h" @@ -178,7 +178,7 @@ glms_aabb_radius(vec3s box[2]) { * @brief computes center point of AABB * * @param[in] box bounding box - * @param[out] dest center of bounding box + * @returns center of bounding box */ CGLM_INLINE vec3s @@ -253,4 +253,4 @@ glms_aabb_contains(vec3s box[2], vec3s other[2]) { return glm_aabb_contains(rawBox, rawOther); } -#endif /* cglm_boxs_h */ +#endif /* cglms_boxs_h */ diff --git a/include/cglm/struct/color.h b/include/cglm/struct/color.h index e9ddc0c..3ce78da 100644 --- a/include/cglm/struct/color.h +++ b/include/cglm/struct/color.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_colors_h -#define cglm_colors_h +#ifndef cglms_colors_h +#define cglms_colors_h #include "../common.h" #include "../types-struct.h" @@ -24,4 +24,4 @@ glms_luminance(vec3s rgb) { return glm_luminance(rgb.raw); } -#endif /* cglm_colors_h */ +#endif /* cglms_colors_h */ diff --git a/include/cglm/struct/curve.h b/include/cglm/struct/curve.h index 0972f0f..53ea359 100644 --- a/include/cglm/struct/curve.h +++ b/include/cglm/struct/curve.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_curves_h -#define cglm_curves_h +#ifndef cglms_curves_h +#define cglms_curves_h #include "../common.h" #include "../types-struct.h" @@ -37,4 +37,4 @@ glms_smc(float s, mat4s m, vec4s c) { return glm_smc(s, m.raw, c.raw); } -#endif /* cglm_curves_h */ +#endif /* cglms_curves_h */ diff --git a/include/cglm/struct/frustum.h b/include/cglm/struct/frustum.h index 98931f4..2c51d6d 100644 --- a/include/cglm/struct/frustum.h +++ b/include/cglm/struct/frustum.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_frustums_h -#define cglm_frustums_h +#ifndef cglms_frustums_h +#define cglms_frustums_h #include "../common.h" #include "../types-struct.h" @@ -152,4 +152,4 @@ glms_frustum_corners_at(vec4s corners[8], glms_vec4_pack(planeCorners, rawPlaneCorners, 8); } -#endif /* cglm_frustums_h */ +#endif /* cglms_frustums_h */ diff --git a/include/cglm/struct/io.h b/include/cglm/struct/io.h index 0a084e4..ec28129 100644 --- a/include/cglm/struct/io.h +++ b/include/cglm/struct/io.h @@ -15,8 +15,8 @@ CGLM_INLINE void glm_versor_print(versor vec, FILE *ostream); */ -#ifndef cglm_ios_h -#define cglm_ios_h +#ifndef cglms_ios_h +#define cglms_ios_h #include "../common.h" #include "../io.h" @@ -79,4 +79,4 @@ glms_aabb_print(vec3s bbox[2], glm_aabb_print(rawBbox, tag, ostream); } -#endif /* cglm_ios_h */ +#endif /* cglms_ios_h */ diff --git a/include/cglm/struct/mat3.h b/include/cglm/struct/mat3.h index 8072746..5c474e6 100644 --- a/include/cglm/struct/mat3.h +++ b/include/cglm/struct/mat3.h @@ -30,8 +30,8 @@ CGLM_INLINE float glms_mat3_rmc(vec3s r, mat3s m, vec3s c); */ -#ifndef cglm_mat3s_h -#define cglm_mat3s_h +#ifndef cglms_mat3s_h +#define cglms_mat3s_h #include "../common.h" #include "../types-struct.h" @@ -286,4 +286,4 @@ glms_mat3_rmc(vec3s r, mat3s m, vec3s c) { return glm_mat3_rmc(r.raw, m.raw, c.raw); } -#endif /* cglm_mat3s_h */ +#endif /* cglms_mat3s_h */ diff --git a/include/cglm/struct/mat4.h b/include/cglm/struct/mat4.h index 5947dc0..ef72e31 100644 --- a/include/cglm/struct/mat4.h +++ b/include/cglm/struct/mat4.h @@ -44,8 +44,8 @@ CGLM_INLINE float glms_mat4_rmc(vec4s r, mat4s m, vec4s c); */ -#ifndef cglm_mat4s_h -#define cglm_mat4s_h +#ifndef cglms_mat4s_h +#define cglms_mat4s_h #include "../common.h" #include "../types-struct.h" @@ -463,5 +463,4 @@ glms_mat4_rmc(vec4s r, mat4s m, vec4s c) { return glm_mat4_rmc(r.raw, m.raw, c.raw); } -#endif /* cglm_mat4s_h */ - \ No newline at end of file +#endif /* cglms_mat4s_h */ diff --git a/include/cglm/struct/plane.h b/include/cglm/struct/plane.h index cea7e8c..6a84ac7 100644 --- a/include/cglm/struct/plane.h +++ b/include/cglm/struct/plane.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_planes_h -#define cglm_planes_h +#ifndef cglms_planes_h +#define cglms_planes_h #include "../common.h" #include "../types-struct.h" @@ -37,4 +37,4 @@ glms_plane_normalize(vec4s plane) { return plane; } -#endif /* cglm_planes_h */ +#endif /* cglms_planes_h */ diff --git a/include/cglm/struct/project.h b/include/cglm/struct/project.h index d45ba3d..8a2635f 100644 --- a/include/cglm/struct/project.h +++ b/include/cglm/struct/project.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_projects_h -#define cglm_projects_h +#ifndef cglms_projects_h +#define cglms_projects_h #include "../common.h" #include "../types-struct.h" @@ -91,7 +91,7 @@ glms_unproject(vec3s pos, mat4s m, vec4s vp) { * @param[in] pos object coordinates * @param[in] m MVP matrix * @param[in] vp viewport as [x, y, width, height] - * @param[out] dest projected coordinates + * @returns projected coordinates */ CGLM_INLINE vec3s @@ -101,4 +101,4 @@ glms_project(vec3s pos, mat4s m, vec4s vp) { return r; } -#endif /* cglm_projects_h */ +#endif /* cglms_projects_h */ diff --git a/include/cglm/struct/sphere.h b/include/cglm/struct/sphere.h index 164e8bc..95c36bc 100644 --- a/include/cglm/struct/sphere.h +++ b/include/cglm/struct/sphere.h @@ -5,8 +5,8 @@ * Full license can be found in the LICENSE file */ -#ifndef cglm_spheres_h -#define cglm_spheres_h +#ifndef cglms_spheres_h +#define cglms_spheres_h #include "../common.h" #include "../types-struct.h" @@ -90,4 +90,4 @@ glms_sphere_point(vec4s s, vec3s point) { return glm_sphere_point(s.raw, point.raw); } -#endif /* cglm_spheres_h */ +#endif /* cglms_spheres_h */ diff --git a/include/cglm/struct/vec3-ext.h b/include/cglm/struct/vec3-ext.h index 53a1199..2cd8749 100644 --- a/include/cglm/struct/vec3-ext.h +++ b/include/cglm/struct/vec3-ext.h @@ -26,8 +26,8 @@ CGLM_INLINE vec3s glms_vec3_sqrt(vec3s v); */ -#ifndef cglm_vec3s_ext_h -#define cglm_vec3s_ext_h +#ifndef cglms_vec3s_ext_h +#define cglms_vec3s_ext_h #include "../common.h" #include "../types-struct.h" @@ -195,4 +195,4 @@ glms_vec3_sqrt(vec3s v) { return r; } -#endif /* cglm_vec3s_ext_h */ +#endif /* cglms_vec3s_ext_h */ diff --git a/include/cglm/struct/vec3.h b/include/cglm/struct/vec3.h index 91389a2..fbe716d 100644 --- a/include/cglm/struct/vec3.h +++ b/include/cglm/struct/vec3.h @@ -17,7 +17,6 @@ Functions: CGLM_INLINE vec3s glms_vec3(vec4s v4); - CGLM_INLINE vec3s glms_vec3_copy(vec3s v); CGLM_INLINE void glms_vec3_pack(vec3s dst[], vec3 src[], size_t len); CGLM_INLINE void glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len); CGLM_INLINE vec3s glms_vec3_zero(); @@ -66,8 +65,8 @@ CGLM_INLINE vec3s glms_normalize(vec3s v); */ -#ifndef cglm_vec3s_h -#define cglm_vec3s_h +#ifndef cglms_vec3s_h +#define cglms_vec3s_h #include "../common.h" #include "../types-struct.h" @@ -99,20 +98,6 @@ glms_vec3(vec4s v4) { return r; } -/*! - * @brief copy all members of [a] to [dest] - * - * @param[in] a source - * @returns destination - */ -CGLM_INLINE -vec3s -glms_vec3_copy(vec3s v) { - vec3s r; - glm_vec3_copy(v.raw, r.raw); - return r; -} - /*! * @brief pack an array of vec3 into an array of vec3s * @@ -150,7 +135,6 @@ glms_vec3_unpack(vec3 dst[], vec3s src[], size_t len) { /*! * @brief make vector zero * - * @param[in] v vector * @returns zero vector */ CGLM_INLINE @@ -164,7 +148,6 @@ glms_vec3_zero() { /*! * @brief make vector one * - * @param[in] v vector * @returns one vector */ CGLM_INLINE @@ -237,7 +220,7 @@ glms_vec3_add(vec3s a, vec3s b) { /*! * @brief add scalar to v vector store result in dest (d = v + s) * - * @param[in] v vector + * @param[in] a vector * @param[in] s scalar * @returns destination vector */ @@ -267,7 +250,7 @@ glms_vec3_sub(vec3s a, vec3s b) { /*! * @brief subtract scalar from v vector store result in dest (d = v - s) * - * @param[in] v vector + * @param[in] a vector * @param[in] s scalar * @returns destination vector */ @@ -342,7 +325,7 @@ glms_vec3_div(vec3s a, vec3s b) { /*! * @brief div vector with scalar: d = v / s * - * @param[in] v vector + * @param[in] a vector * @param[in] s scalar * @returns result = (a[0]/s, a[1]/s, a[2]/s) */ @@ -764,4 +747,4 @@ glms_normalize(vec3s v) { return v; } -#endif /* cglm_vec3s_h */ +#endif /* cglms_vec3s_h */ diff --git a/include/cglm/struct/vec4-ext.h b/include/cglm/struct/vec4-ext.h index fdc5059..52c438e 100644 --- a/include/cglm/struct/vec4-ext.h +++ b/include/cglm/struct/vec4-ext.h @@ -26,8 +26,8 @@ CGLM_INLINE vec4s glms_vec4_sqrt(vec4s v); */ -#ifndef cglm_vec4s_ext_h -#define cglm_vec4s_ext_h +#ifndef cglms_vec4s_ext_h +#define cglms_vec4s_ext_h #include "../common.h" #include "../types-struct.h" @@ -195,4 +195,4 @@ glms_vec4_sqrt(vec4s v) { return r; } -#endif /* cglm_vec4s_ext_h */ +#endif /* cglms_vec4s_ext_h */ diff --git a/include/cglm/struct/vec4.h b/include/cglm/struct/vec4.h index f96725f..4fe75ba 100644 --- a/include/cglm/struct/vec4.h +++ b/include/cglm/struct/vec4.h @@ -50,8 +50,8 @@ CGLM_INLINE vec4s glms_vec4_cubic(float s); */ -#ifndef cglm_vec4s_h -#define cglm_vec4s_h +#ifndef cglms_vec4s_h +#define cglms_vec4s_h #include "../common.h" #include "../types-struct.h" @@ -85,8 +85,8 @@ glms_vec4(vec3s v3, float last) { /*! * @brief copy first 3 members of [a] to [dest] * - * @param[in] a source - * @returns destination + * @param[in] v source + * @returns vec3 */ CGLM_INLINE vec3s @@ -163,7 +163,6 @@ glms_vec4_unpack(vec4 dst[], vec4s src[], size_t len) { /*! * @brief make vector zero * - * @param[in] v vector * @returns zero vector */ CGLM_INLINE @@ -177,7 +176,6 @@ glms_vec4_zero() { /*! * @brief make vector one * - * @param[in] v vector * @returns one vector */ CGLM_INLINE @@ -579,4 +577,4 @@ glms_vec4_cubic(float s) { return r; } -#endif /* cglm_vec4s_h */ +#endif /* cglms_vec4s_h */ diff --git a/test/src/test_common.h b/test/src/test_common.h index 51d1826..690d249 100644 --- a/test/src/test_common.h +++ b/test/src/test_common.h @@ -20,7 +20,7 @@ #include #include -#include +#include #include void @@ -63,13 +63,13 @@ void test_rand_vec3(vec3 dest); vec3s -test_rand_vec3s(); +test_rand_vec3s(void); void test_rand_vec4(vec4 dest); vec4s -test_rand_vec4s(); +test_rand_vec4s(void); float test_rand(void); From 1fdd459733002bcdb52eb9f2c01e3b0f84e0d059 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Thu, 6 Jun 2019 13:12:17 +0300 Subject: [PATCH 43/56] add tests for vector swizzling, rename vec to vec3 --- include/cglm/vec3.h | 6 +++--- test/src/test_vec3.c | 26 ++++++++++++++++++++++++++ test/src/test_vec4.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index ea8d9a1..323618a 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -61,7 +61,7 @@ CGLM_INLINE void glm_vec3_ortho(vec3 v, vec3 dest); CGLM_INLINE void glm_vec3_clamp(vec3 v, float minVal, float maxVal); CGLM_INLINE void glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest); - CGLM_INLINE void glm_vec_swizzle(vec3 v, int mask, vec3 dest); + CGLM_INLINE void glm_vec3_swizzle(vec3 v, int mask, vec3 dest); Convenient: CGLM_INLINE void glm_cross(vec3 a, vec3 b, vec3 d); @@ -862,14 +862,14 @@ glm_normalize_to(vec3 v, vec3 dest) { */ CGLM_INLINE void -glm_vec_swizzle(vec3 v, int mask, vec3 dest) { +glm_vec3_swizzle(vec3 v, int mask, vec3 dest) { vec3 t; t[0] = v[(mask & (3 << 0))]; t[1] = v[(mask & (3 << 2)) >> 2]; t[2] = v[(mask & (3 << 4)) >> 4]; - glm_vec_copy(t, dest); + glm_vec3_copy(t, dest); } #endif /* cglm_vec3_h */ diff --git a/test/src/test_vec3.c b/test/src/test_vec3.c index 4f1f2d1..19af4aa 100644 --- a/test/src/test_vec3.c +++ b/test/src/test_vec3.c @@ -84,4 +84,30 @@ test_vec3(void **state) { vs3 = glms_vec3_add(vs1, vs2); vs4 = glms_vec3_maxv(vs1, vs3); test_assert_vec3s_eq(vs3, vs4); + + /* swizzle */ + + /* ZYX */ + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + glm_vec3_swizzle(v1, GLM_ZYX, v1); + test_assert_vec3_eq(v1, (vec3){3, 2, 1}); + + glm_vec3_swizzle(v1, GLM_XXX, v1); + test_assert_vec3_eq(v1, (vec3){3, 3, 3}); + + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + + glm_vec3_swizzle(v1, GLM_YYY, v1); + test_assert_vec3_eq(v1, (vec3){2, 2, 2}); + + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + + glm_vec3_swizzle(v1, GLM_ZZZ, v1); + test_assert_vec3_eq(v1, (vec3){3, 3, 3}); } diff --git a/test/src/test_vec4.c b/test/src/test_vec4.c index 02137b0..2e9d12e 100644 --- a/test/src/test_vec4.c +++ b/test/src/test_vec4.c @@ -183,6 +183,44 @@ test_vec4(void **state) { assert_true(v3[2] >= 0.0999 && v3[2] <= 0.80001); assert_true(v3[3] >= 0.0999 && v3[3] <= 0.80001); + /* swizzle */ + + /* ZYX */ + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + v1[3] = 4; + + glm_vec4_swizzle(v1, GLM_WZYX, v1); + test_assert_vec4_eq(v1, (vec4){4, 3, 2, 1}); + + glm_vec4_swizzle(v1, GLM_XXXX, v1); + test_assert_vec4_eq(v1, (vec4){4, 4, 4, 4}); + + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + v1[3] = 4; + + glm_vec4_swizzle(v1, GLM_YYYY, v1); + test_assert_vec4_eq(v1, (vec4){2, 2, 2, 2}); + + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + v1[3] = 4; + + glm_vec4_swizzle(v1, GLM_ZZZZ, v1); + test_assert_vec4_eq(v1, (vec4){3, 3, 3, 3}); + + v1[0] = 1; + v1[1] = 2; + v1[2] = 3; + v1[3] = 4; + + glm_vec4_swizzle(v1, GLM_WWWW, v1); + test_assert_vec4_eq(v1, (vec4){4, 4, 4, 4}); + /* structs */ vs1 = test_rand_vec4s(); vs2 = test_rand_vec4s(); From 2025b357576a242f9e184aece49e5b866cd52bb8 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Thu, 6 Jun 2019 13:18:31 +0300 Subject: [PATCH 44/56] struct: struct vesion of swizzle funcs --- include/cglm/struct/vec3.h | 18 ++++++++++++++++++ include/cglm/struct/vec4.h | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/include/cglm/struct/vec3.h b/include/cglm/struct/vec3.h index fbe716d..4e8d677 100644 --- a/include/cglm/struct/vec3.h +++ b/include/cglm/struct/vec3.h @@ -58,6 +58,7 @@ CGLM_INLINE vec3s glms_vec3_ortho(vec3s v); CGLM_INLINE vec3s glms_vec3_clamp(vec3s v, float minVal, float maxVal); CGLM_INLINE vec3s glms_vec3_lerp(vec3s from, vec3s to, float t); + CGLM_INLINE vec3s glms_vec3_swizzle(vec3s v, int mask); Convenient: CGLM_INLINE vec3s glms_cross(vec3s a, vec3s b); @@ -747,4 +748,21 @@ glms_normalize(vec3s v) { return v; } +/*! + * @brief swizzle vector components + * + * you can use existin masks e.g. GLM_XXX, GLM_ZYX + * + * @param[in] v source + * @param[in] mask mask + * @returns swizzled vector + */ +CGLM_INLINE +vec3s +glms_vec3_swizzle(vec3s v, int mask) { + vec3s dest; + glm_vec3_swizzle(v.raw, mask, dest.raw); + return dest; +} + #endif /* cglms_vec3s_h */ diff --git a/include/cglm/struct/vec4.h b/include/cglm/struct/vec4.h index 4fe75ba..0b403a9 100644 --- a/include/cglm/struct/vec4.h +++ b/include/cglm/struct/vec4.h @@ -48,6 +48,7 @@ CGLM_INLINE vec4s glms_vec4_clamp(vec4s v, float minVal, float maxVal); CGLM_INLINE vec4s glms_vec4_lerp(vec4s from, vec4s to, float t); CGLM_INLINE vec4s glms_vec4_cubic(float s); + CGLM_INLINE vec4s glms_vec4_swizzle(vec4s v, int mask); */ #ifndef cglms_vec4s_h @@ -577,4 +578,21 @@ glms_vec4_cubic(float s) { return r; } +/*! + * @brief swizzle vector components + * + * you can use existin masks e.g. GLM_XXXX, GLM_WZYX + * + * @param[in] v source + * @param[in] mask mask + * @returns swizzled vector + */ +CGLM_INLINE +vec4s +glms_vec4_swizzle(vec4s v, int mask) { + vec4s dest; + glm_vec4_swizzle(v.raw, mask, dest.raw); + return dest; +} + #endif /* cglms_vec4s_h */ From 4a9eb8d6300e5ac5090c43075709f8b1f90b4616 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Fri, 21 Jun 2019 14:03:29 +0300 Subject: [PATCH 45/56] win: import struct headers to visual studio solution/project --- win/cglm.vcxproj | 22 +++++++++++++- win/cglm.vcxproj.filters | 63 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/win/cglm.vcxproj b/win/cglm.vcxproj index 90e58a6..79feb1d 100644 --- a/win/cglm.vcxproj +++ b/win/cglm.vcxproj @@ -86,6 +86,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -100,7 +120,7 @@ {CA8BCAF9-CD25-4133-8F62-3D1449B5D2FC} Win32Proj cglm - 10.0.16299.0 + 10.0 diff --git a/win/cglm.vcxproj.filters b/win/cglm.vcxproj.filters index dd66ee1..75775ac 100644 --- a/win/cglm.vcxproj.filters +++ b/win/cglm.vcxproj.filters @@ -34,6 +34,9 @@ {fb97f276-fe14-47ba-8a9f-01032f065a19} + + {0b5febe7-a88d-4330-94ae-305897a5e957} + @@ -257,5 +260,65 @@ include\cglm\call + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm\struct + + + include\cglm + + + include\cglm + \ No newline at end of file From 44f36559c325666918bce30996fc4fe6b97f2549 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Fri, 21 Jun 2019 14:15:42 +0300 Subject: [PATCH 46/56] Update cglm.vcxproj --- win/cglm.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/cglm.vcxproj b/win/cglm.vcxproj index 79feb1d..af1b879 100644 --- a/win/cglm.vcxproj +++ b/win/cglm.vcxproj @@ -120,7 +120,7 @@ {CA8BCAF9-CD25-4133-8F62-3D1449B5D2FC} Win32Proj cglm - 10.0 + 10.0.17763.0 From bbb52f352c620fca3d8a62ca4cdee20dfff7b322 Mon Sep 17 00:00:00 2001 From: Carsten Hartenfels Date: Sun, 23 Jun 2019 13:24:06 +0200 Subject: [PATCH 47/56] Add missing struct headers to makefile.am --- makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/makefile.am b/makefile.am index 546e67a..962e1d3 100644 --- a/makefile.am +++ b/makefile.am @@ -59,7 +59,9 @@ cglm_HEADERS = include/cglm/version.h \ include/cglm/sphere.h \ include/cglm/ease.h \ include/cglm/curve.h \ - include/cglm/bezier.h + include/cglm/bezier.h \ + include/cglm/types-struct.h \ + include/cglm/struct.h cglm_calldir=$(includedir)/cglm/call cglm_call_HEADERS = include/cglm/call/mat4.h \ From 99cff9e74ee7a8df785fd4c2a606c03de36d93c1 Mon Sep 17 00:00:00 2001 From: Carsten Hartenfels Date: Sun, 23 Jun 2019 13:25:29 +0200 Subject: [PATCH 48/56] Add pkg-config support --- .gitignore | 1 + cglm.pc.in | 11 +++++++++++ configure.ac | 6 +++++- makefile.am | 2 ++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 cglm.pc.in diff --git a/.gitignore b/.gitignore index 195a82c..0655cc2 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,4 @@ win/x64 win/x85 win/Debug cglm-test-ios* +/cglm.pc diff --git a/cglm.pc.in b/cglm.pc.in new file mode 100644 index 0000000..b80b401 --- /dev/null +++ b/cglm.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: @PACKAGE_NAME@ +Description: OpenGL Mathematics (glm) for C +URL: https://github.com/recp/cglm +Version: @PACKAGE_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -lcglm @LIBS@ diff --git a/configure.ac b/configure.ac index 9a26778..8ee6f0d 100644 --- a/configure.ac +++ b/configure.ac @@ -14,6 +14,10 @@ AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src/]) AC_CONFIG_HEADERS([config.h]) +# Dependencies for pkg-config. +PKG_PROG_PKG_CONFIG +PKG_INSTALLDIR + # Checks for programs. AC_PROG_CC AM_PROG_CC_C_O @@ -53,6 +57,6 @@ AC_TYPE_UINT8_T # Checks for library functions. AC_FUNC_ERROR_AT_LINE -AC_CONFIG_FILES([makefile]) +AC_CONFIG_FILES([makefile cglm.pc]) AC_OUTPUT diff --git a/makefile.am b/makefile.am index 962e1d3..922aefe 100644 --- a/makefile.am +++ b/makefile.am @@ -154,6 +154,8 @@ test_tests_SOURCES=\ test/src/test_affine.c \ test/src/test_bezier.c +pkgconfig_DATA=cglm.pc + # When running configure with --prefix, $VPATH references # the source directory that post-build.sh is in. When not # using a prefix, $VPATH will be unset, so we need to fall From b231645131286c117a340f72a90f9054700a6455 Mon Sep 17 00:00:00 2001 From: Carsten Hartenfels Date: Sun, 23 Jun 2019 13:48:02 +0200 Subject: [PATCH 49/56] Capitalize Makefiles, sometimes matters on Linux Lowercased Makefiles don't get picked up by the .gitignore for example, which always looks odd after configuring. This commit just puts a capital 'M' in front, like it's common. --- makefile.am => Makefile.am | 0 configure.ac | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename makefile.am => Makefile.am (100%) diff --git a/makefile.am b/Makefile.am similarity index 100% rename from makefile.am rename to Makefile.am diff --git a/configure.ac b/configure.ac index 8ee6f0d..004d5bc 100644 --- a/configure.ac +++ b/configure.ac @@ -57,6 +57,6 @@ AC_TYPE_UINT8_T # Checks for library functions. AC_FUNC_ERROR_AT_LINE -AC_CONFIG_FILES([makefile cglm.pc]) +AC_CONFIG_FILES([Makefile cglm.pc]) AC_OUTPUT From caba5b3c7c1a5b95c516ba0d0d0c945fa9c98714 Mon Sep 17 00:00:00 2001 From: Carsten Hartenfels Date: Sun, 23 Jun 2019 14:04:34 +0200 Subject: [PATCH 50/56] Document pkg-config usage and prefix pitfalls --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 243d5f9..aedd43d 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,17 @@ $ make check # [Optional] (if you run `sh ./build-deps.sh`) $ [sudo] make install ``` +This will also install pkg-config files so you can use +`pkg-config --cflags cglm` and `pkg-config --libs cglm` to retrieve compiler +and linker flags. + +The files will be installed into the given prefix (usually `/usr/local` by +default on Linux), but your pkg-config may not be configured to actually check +there. You can figure out where it's looking by running `pkg-config --variable +pc_path pkg-config` and change the path the files are installed to via +`./configure --with-pkgconfigdir=/your/path`. Alternatively, you can add the +prefix path to your `PKG_CONFIG_PATH` environment variable. + ### Windows (MSBuild) Windows related build files, project files are located in `win` folder, make sure you are inside `cglm/win` folder. From a651827012330560684e0eef89c0af7da795e072 Mon Sep 17 00:00:00 2001 From: Carsten Hartenfels Date: Sun, 23 Jun 2019 14:48:50 +0200 Subject: [PATCH 51/56] Make things work for ancient pkg-config versions Travis CI uses a really, really old pkg-config apparently, which doesn't have the PKG_INSTALLDIR macro. In that case, we have to emulate it manually. --- configure.ac | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 004d5bc..071ac47 100644 --- a/configure.ac +++ b/configure.ac @@ -16,7 +16,17 @@ AC_CONFIG_HEADERS([config.h]) # Dependencies for pkg-config. PKG_PROG_PKG_CONFIG -PKG_INSTALLDIR +# Ancient versions of pkg-config (such as the one used in Travis CI) +# don't have this macro, so we need to do it manually. +m4_ifdef([PKG_INSTALLDIR], [ + PKG_INSTALLDIR +], [ + AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], + [pkg-config installation directory ['${libdir}/pkgconfig']])],, + [with_pkgconfigdir=]'${libdir}/pkgconfig') + AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +]) # Checks for programs. AC_PROG_CC From cb1d0ef6b5acde1dcd82380e120b0a8e62bb81a4 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Wed, 17 Jul 2019 17:18:50 +0300 Subject: [PATCH 52/56] win: remove optional DLLMain entry point --- src/dllmain.c | 23 ----------------------- win/cglm.vcxproj | 1 - win/cglm.vcxproj.filters | 3 --- 3 files changed, 27 deletions(-) delete mode 100644 src/dllmain.c diff --git a/src/dllmain.c b/src/dllmain.c deleted file mode 100644 index 42afa88..0000000 --- a/src/dllmain.c +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Copyright (c), Recep Aslantas. -* -* MIT License (MIT), http://opensource.org/licenses/MIT -* Full license can be found in the LICENSE file -*/ - -#include "config.h" - -BOOL -APIENTRY -DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved) { - switch (ul_reason_for_call) { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} diff --git a/win/cglm.vcxproj b/win/cglm.vcxproj index af1b879..b5249d7 100644 --- a/win/cglm.vcxproj +++ b/win/cglm.vcxproj @@ -24,7 +24,6 @@ - diff --git a/win/cglm.vcxproj.filters b/win/cglm.vcxproj.filters index 75775ac..a9e3f47 100644 --- a/win/cglm.vcxproj.filters +++ b/win/cglm.vcxproj.filters @@ -45,9 +45,6 @@ src - - src - src From 5bf5ceeb4078055f3a24efd2fe552a9a380c6d2d Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Wed, 17 Jul 2019 17:18:50 +0300 Subject: [PATCH 53/56] win: remove optional DLLMain entry point --- src/dllmain.c | 23 ----------------------- win/cglm.vcxproj | 1 - win/cglm.vcxproj.filters | 3 --- 3 files changed, 27 deletions(-) delete mode 100644 src/dllmain.c diff --git a/src/dllmain.c b/src/dllmain.c deleted file mode 100644 index 42afa88..0000000 --- a/src/dllmain.c +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Copyright (c), Recep Aslantas. -* -* MIT License (MIT), http://opensource.org/licenses/MIT -* Full license can be found in the LICENSE file -*/ - -#include "config.h" - -BOOL -APIENTRY -DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved) { - switch (ul_reason_for_call) { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} diff --git a/win/cglm.vcxproj b/win/cglm.vcxproj index af1b879..b5249d7 100644 --- a/win/cglm.vcxproj +++ b/win/cglm.vcxproj @@ -24,7 +24,6 @@ - diff --git a/win/cglm.vcxproj.filters b/win/cglm.vcxproj.filters index 75775ac..a9e3f47 100644 --- a/win/cglm.vcxproj.filters +++ b/win/cglm.vcxproj.filters @@ -45,9 +45,6 @@ src - - src - src From c87499d234a784c9042dffbbfad9484a00fbab19 Mon Sep 17 00:00:00 2001 From: Fady Megally Date: Fri, 26 Jul 2019 16:27:20 -0400 Subject: [PATCH 54/56] Update README.md Grammar error correction (line 29) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aedd43d..5e2f92d 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ you have the latest version - **[major change]** by starting v0.5.1, built-in alignment is removed from **vec3** and **mat3** types #### Note for C++ developers: -If you don't aware about original GLM library yet, you may also want to look at: +If you are not aware of the original GLM library yet, you may also want to look at: https://github.com/g-truc/glm #### Note for new comers (Important): From 02fdea941c1c513013f73b29c92541391c23178a Mon Sep 17 00:00:00 2001 From: Fady Megally Date: Sat, 27 Jul 2019 13:54:27 -0400 Subject: [PATCH 55/56] Update README.md grammar corrections. multiple linse --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index aedd43d..4776d35 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ #### Documentation -Almost all functions (inline versions) and parameters are documented inside related headers.
+Almost all functions (inline versions) and parameters are documented inside the corresponding headers.
Complete documentation: http://cglm.readthedocs.io #### Note for previous versions: @@ -44,7 +44,7 @@ https://github.com/g-truc/glm #### Returning vector or matrix... ? -**cglm** supports both *ARRAY API* and *STRUCT API*, so you can return structs if you you struct api (`glms_`). +**cglm** supports both *ARRAY API* and *STRUCT API*, so you can return structs if you utilize struct api (`glms_`). #### Other APIs like Vulkan, Metal, Dx? Currently *cglm* uses default clip space configuration (-1, 1) for camera functions (perspective, extract corners...), in the future other clip space configurations will be supported @@ -71,7 +71,7 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi - general purpose matrix operations (mat4, mat3) - chain matrix multiplication (square only) - general purpose vector operations (cross, dot, rotate, proj, angle...) -- affine transforms +- affine transformations - matrix decomposition (extract rotation, scaling factor) - optimized affine transform matrices (mul, rigid-body inverse) - camera (lookat) @@ -87,12 +87,12 @@ Currently *cglm* uses default clip space configuration (-1, 1) for camera functi - easing functions - curves - curve interpolation helpers (S*M*C, deCasteljau...) -- and other... +- and others...
You have two option to call a function/operation: inline or library call (link) -Almost all functions are marked inline (always_inline) so compiler probably will inline. +Almost all functions are marked inline (always_inline) so compiler will probably inline. To call pre-compiled version, just use `glmc_` (c stands for 'call') instead of `glm_`. ```C @@ -119,7 +119,7 @@ You can pass matrices and vectors as array to functions rather than get address. glm_translate(m, (vec3){1.0f, 0.0f, 0.0f}); ``` -Library contains general purpose mat4 mul and inverse functions but also contains some special form (optimized) of these functions for affine transform matrices. If you want to multiply two affine transform matrices you can use glm_mul instead of glm_mat4_mul and glm_inv_tr (ROT + TR) instead glm_mat4_inv +Library contains general purpose mat4 mul and inverse functions, and also contains some special forms (optimized) of these functions for affine transformations' matrices. If you want to multiply two affine transformation matrices you can use glm_mul instead of glm_mat4_mul and glm_inv_tr (ROT + TR) instead glm_mat4_inv ```C /* multiplication */ mat4 modelMat; @@ -157,9 +157,9 @@ pc_path pkg-config` and change the path the files are installed to via prefix path to your `PKG_CONFIG_PATH` environment variable. ### Windows (MSBuild) -Windows related build files, project files are located in `win` folder, +Windows related build file and project files are located in `win` folder, make sure you are inside `cglm/win` folder. -Code Analysis are enabled, it may take awhile to build +Code Analysis is enabled, so it may take awhile to build. ```Powershell $ cd win @@ -180,11 +180,11 @@ $ sphinx-build source build it will compile docs into build folder, you can run index.html inside that function. ## How to use -If you want to use inline versions of funcstions then; include main header +If you want to use the inline versions of functions, then include the main header ```C #include ``` -the header will include all headers. Then call func you want e.g. rotate vector by axis: +the header will include all headers. Then call the func you want e.g. rotate vector by axis: ```C glm_vec3_rotate(v1, glm_rad(45), (vec3){1.0f, 0.0f, 0.0f}); ``` @@ -215,7 +215,7 @@ glm_mat4_mul(m1, m2, m1); /* or */ glm_mat4_mul(m1, m1, m1); ``` -the first two parameter are **[in]** and the last one is **[out]** parameter. After multiplied *m1* and *m2* the result is stored in *m1*. This is why we send *m1* twice. You may store result in different matrix, this just an example. +the first two parameter are **[in]** and the last one is **[out]** parameter. After multiplying *m1* and *m2*, the result is stored in *m1*. This is why we send *m1* twice. You may store the result in a different matrix, this is just an example. ### Example: Computing MVP matrix @@ -255,7 +255,7 @@ Option 2: Cast matrix to pointer type (also valid for multiple dimensional array glUniformMatrix4fv(location, 1, GL_FALSE, (float *)matrix); ``` -You can pass same way to another APIs e.g. Vulkan, DX... +You can pass matrices the same way to other APIs e.g. Vulkan, DX... ## Notes From d03d4b8df5e210c6ae0a84a2c2aba3bf4bd6c81e Mon Sep 17 00:00:00 2001 From: Luigi Castelli Date: Wed, 21 Aug 2019 21:52:01 +0200 Subject: [PATCH 56/56] new name for euler sequence (#94) * new name for angle sequence --- include/cglm/call/euler.h | 2 +- include/cglm/euler.h | 20 +++++++++++--------- include/cglm/struct/euler.h | 6 +++--- src/euler.c | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/cglm/call/euler.h b/include/cglm/call/euler.h index 9b85485..2de68fb 100644 --- a/include/cglm/call/euler.h +++ b/include/cglm/call/euler.h @@ -47,7 +47,7 @@ glmc_euler_yxz(vec3 angles, mat4 dest); CGLM_EXPORT void -glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest); +glmc_euler_by_order(vec3 angles, glm_euler_seq axis, mat4 dest); #ifdef __cplusplus } diff --git a/include/cglm/euler.h b/include/cglm/euler.h index 1ff5f6d..8ae0c83 100644 --- a/include/cglm/euler.h +++ b/include/cglm/euler.h @@ -15,10 +15,10 @@ /* Types: - enum glm_euler_sq + enum glm_euler_seq Functions: - CGLM_INLINE glm_euler_sq glm_euler_order(int newOrder[3]); + CGLM_INLINE glm_euler_seq glm_euler_order(int newOrder[3]); CGLM_INLINE void glm_euler_angles(mat4 m, vec3 dest); CGLM_INLINE void glm_euler(vec3 angles, mat4 dest); CGLM_INLINE void glm_euler_xyz(vec3 angles, mat4 dest); @@ -28,7 +28,7 @@ CGLM_INLINE void glm_euler_yzx(vec3 angles, mat4 dest); CGLM_INLINE void glm_euler_yxz(vec3 angles, mat4 dest); CGLM_INLINE void glm_euler_by_order(vec3 angles, - glm_euler_sq ord, + glm_euler_seq ord, mat4 dest); */ @@ -41,24 +41,26 @@ * if you have axis order like vec3 orderVec = [0, 1, 2] or [0, 2, 1]... * vector then you can convert it to this enum by doing this: * @code - * glm_euler_sq order; + * glm_euler_seq order; * order = orderVec[0] | orderVec[1] << 2 | orderVec[2] << 4; * @endcode * you may need to explicit cast if required */ -typedef enum glm_euler_sq { +typedef enum glm_euler_seq { GLM_EULER_XYZ = 0 << 0 | 1 << 2 | 2 << 4, GLM_EULER_XZY = 0 << 0 | 2 << 2 | 1 << 4, GLM_EULER_YZX = 1 << 0 | 2 << 2 | 0 << 4, GLM_EULER_YXZ = 1 << 0 | 0 << 2 | 2 << 4, GLM_EULER_ZXY = 2 << 0 | 0 << 2 | 1 << 4, GLM_EULER_ZYX = 2 << 0 | 1 << 2 | 0 << 4 -} glm_euler_sq; +} glm_euler_seq; + +typedef glm_euler_seq glm_euler_sq; CGLM_INLINE -glm_euler_sq +glm_euler_seq glm_euler_order(int ord[3]) { - return (glm_euler_sq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4); + return (glm_euler_seq)(ord[0] << 0 | ord[1] << 2 | ord[2] << 4); } /*! @@ -352,7 +354,7 @@ glm_euler_zyx(vec3 angles, mat4 dest) { */ CGLM_INLINE void -glm_euler_by_order(vec3 angles, glm_euler_sq ord, mat4 dest) { +glm_euler_by_order(vec3 angles, glm_euler_seq ord, mat4 dest) { float cx, cy, cz, sx, sy, sz; diff --git a/include/cglm/struct/euler.h b/include/cglm/struct/euler.h index 272ea7f..6575930 100644 --- a/include/cglm/struct/euler.h +++ b/include/cglm/struct/euler.h @@ -15,7 +15,7 @@ /* Types: - enum glm_euler_sq + enum glm_euler_seq Functions: CGLM_INLINE vec3s glms_euler_angles(mat4s m) @@ -25,7 +25,7 @@ CGLM_INLINE mat4s glms_euler_yzx(vec3s angles) CGLM_INLINE mat4s glms_euler_zxy(vec3s angles) CGLM_INLINE mat4s glms_euler_zyx(vec3s angles) - CGLM_INLINE mat4s glms_euler_by_order(vec3s angles, glm_euler_sq ord) + CGLM_INLINE mat4s glms_euler_by_order(vec3s angles, glm_euler_seq ord) */ #ifndef cglms_euler_h @@ -143,7 +143,7 @@ glms_euler_zyx(vec3s angles) { */ CGLM_INLINE mat4s -glms_euler_by_order(vec3s angles, glm_euler_sq ord) { +glms_euler_by_order(vec3s angles, glm_euler_seq ord) { mat4s dest; glm_euler_by_order(angles.raw, ord, dest.raw); return dest; diff --git a/src/euler.c b/src/euler.c index 44d6edb..a59b1df 100644 --- a/src/euler.c +++ b/src/euler.c @@ -58,6 +58,6 @@ glmc_euler_yxz(vec3 angles, mat4 dest) { CGLM_EXPORT void -glmc_euler_by_order(vec3 angles, glm_euler_sq axis, mat4 dest) { +glmc_euler_by_order(vec3 angles, glm_euler_seq axis, mat4 dest) { glm_euler_by_order(angles, axis, dest); }