From a0f01c5ed1866c27d0d61527c65a1721a16843d1 Mon Sep 17 00:00:00 2001 From: duarm Date: Fri, 18 Nov 2022 14:28:39 -0300 Subject: [PATCH 1/3] new abs functions for vec2, ivec2, ivec3, ivec4 --- include/cglm/call/ivec2.h | 4 ++++ include/cglm/call/ivec3.h | 4 ++++ include/cglm/call/ivec4.h | 4 ++++ include/cglm/call/vec2.h | 4 ++++ include/cglm/ivec2.h | 14 ++++++++++++++ include/cglm/ivec3.h | 15 +++++++++++++++ include/cglm/ivec4.h | 16 ++++++++++++++++ include/cglm/vec2-ext.h | 15 ++++++++++++++- src/ivec2.c | 7 +++++++ src/ivec3.c | 7 +++++++ src/ivec4.c | 7 +++++++ src/vec2.c | 6 ++++++ test/src/test_ivec2.h | 15 +++++++++++++++ test/src/test_ivec3.h | 17 +++++++++++++++++ test/src/test_ivec4.h | 19 +++++++++++++++++++ test/src/test_vec2.h | 14 ++++++++++++++ test/tests.h | 10 ++++++++++ 17 files changed, 177 insertions(+), 1 deletion(-) diff --git a/include/cglm/call/ivec2.h b/include/cglm/call/ivec2.h index d3b8fd2..ec1d2b3 100644 --- a/include/cglm/call/ivec2.h +++ b/include/cglm/call/ivec2.h @@ -73,6 +73,10 @@ CGLM_EXPORT void glmc_ivec2_clamp(ivec2 v, int minVal, int maxVal); +CGLM_EXPORT +void +glmc_ivec2_abs(ivec2 v, ivec2 dest); + #ifdef __cplusplus } #endif diff --git a/include/cglm/call/ivec3.h b/include/cglm/call/ivec3.h index 3c28811..c24b2a7 100644 --- a/include/cglm/call/ivec3.h +++ b/include/cglm/call/ivec3.h @@ -73,6 +73,10 @@ CGLM_EXPORT void glmc_ivec3_clamp(ivec3 v, int minVal, int maxVal); +CGLM_EXPORT +void +glmc_ivec3_abs(ivec3 v, ivec3 dest); + #ifdef __cplusplus } #endif diff --git a/include/cglm/call/ivec4.h b/include/cglm/call/ivec4.h index 79e11b1..be80f89 100644 --- a/include/cglm/call/ivec4.h +++ b/include/cglm/call/ivec4.h @@ -73,6 +73,10 @@ CGLM_EXPORT void glmc_ivec4_clamp(ivec4 v, int minVal, int maxVal); +CGLM_EXPORT +void +glmc_ivec4_abs(ivec4 v, ivec4 dest); + #ifdef __cplusplus } #endif diff --git a/include/cglm/call/vec2.h b/include/cglm/call/vec2.h index 6e8101e..f3c6a35 100644 --- a/include/cglm/call/vec2.h +++ b/include/cglm/call/vec2.h @@ -145,6 +145,10 @@ CGLM_EXPORT void glmc_vec2_clamp(vec2 v, float minval, float maxval); +CGLM_EXPORT +void +glmc_vec2_abs(vec2 v, vec2 dest); + CGLM_EXPORT void glmc_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest); diff --git a/include/cglm/ivec2.h b/include/cglm/ivec2.h index c1209a9..d6c7484 100644 --- a/include/cglm/ivec2.h +++ b/include/cglm/ivec2.h @@ -22,6 +22,7 @@ FUNCTIONS: CGLM_INLINE void glm_ivec2_maxv(ivec2 a, ivec2 b, ivec2 dest) CGLM_INLINE void glm_ivec2_minv(ivec2 a, ivec2 b, ivec2 dest) CGLM_INLINE void glm_ivec2_clamp(ivec2 v, int minVal, int maxVal) + CGLM_INLINE void glm_ivec2_abs(ivec2 v, ivec2 dest) */ #ifndef cglm_ivec2_h @@ -239,4 +240,17 @@ glm_ivec2_clamp(ivec2 v, int minVal, int maxVal) { v[1] = maxVal; } +/*! + * @brief absolute value of v + * + * @param[in] v vector + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_ivec2_abs(ivec2 v, ivec2 dest) { + dest[0] = abs(v[0]); + dest[1] = abs(v[1]); +} + #endif /* cglm_ivec2_h */ diff --git a/include/cglm/ivec3.h b/include/cglm/ivec3.h index 69f27f3..0dfb57a 100644 --- a/include/cglm/ivec3.h +++ b/include/cglm/ivec3.h @@ -22,6 +22,7 @@ FUNCTIONS: CGLM_INLINE void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest) CGLM_INLINE void glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest) CGLM_INLINE void glm_ivec3_clamp(ivec3 v, int minVal, int maxVal) + CGLM_INLINE void glm_ivec3_abs(ivec3 v, ivec3 dest) */ #ifndef cglm_ivec3_h @@ -255,4 +256,18 @@ glm_ivec3_clamp(ivec3 v, int minVal, int maxVal) { v[2] = maxVal; } +/*! + * @brief absolute value of v + * + * @param[in] v vector + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_ivec3_abs(ivec3 v, ivec3 dest) { + dest[0] = abs(v[0]); + dest[1] = abs(v[1]); + dest[2] = abs(v[2]); +} + #endif /* cglm_ivec3_h */ diff --git a/include/cglm/ivec4.h b/include/cglm/ivec4.h index 363ee58..6706036 100644 --- a/include/cglm/ivec4.h +++ b/include/cglm/ivec4.h @@ -22,6 +22,7 @@ FUNCTIONS: CGLM_INLINE void glm_ivec4_maxv(ivec4 a, ivec4 b, ivec4 dest) CGLM_INLINE void glm_ivec4_minv(ivec4 a, ivec4 b, ivec4 dest) CGLM_INLINE void glm_ivec4_clamp(ivec4 v, int minVal, int maxVal) + CGLM_INLINE void glm_ivec4_abs(ivec4 v, ivec4 dest) */ #ifndef cglm_ivec4_h @@ -272,4 +273,19 @@ glm_ivec4_clamp(ivec4 v, int minVal, int maxVal) { v[3] = maxVal; } +/*! + * @brief absolute value of v + * + * @param[in] v vector + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_ivec4_abs(ivec4 v, ivec4 dest) { + dest[0] = abs(v[0]); + dest[1] = abs(v[1]); + dest[2] = abs(v[2]); + dest[3] = abs(v[3]); +} + #endif /* cglm_ivec4_h */ diff --git a/include/cglm/vec2-ext.h b/include/cglm/vec2-ext.h index 388c5e2..4f65fad 100644 --- a/include/cglm/vec2-ext.h +++ b/include/cglm/vec2-ext.h @@ -19,6 +19,7 @@ CGLM_INLINE bool glm_vec2_isinf(vec2 v); CGLM_INLINE bool glm_vec2_isvalid(vec2 v); CGLM_INLINE void glm_vec2_sign(vec2 v, vec2 dest); + CGLM_INLINE void glm_vec2_abs(vec2 v, vec2 dest); CGLM_INLINE void glm_vec2_sqrt(vec2 v, vec2 dest); CGLM_INLINE void glm_vec2_complex_mul(vec2 a, vec2 b, vec2 dest) CGLM_INLINE void glm_vec2_complex_div(vec2 a, vec2 b, vec2 dest) @@ -176,6 +177,19 @@ glm_vec2_sign(vec2 v, vec2 dest) { dest[1] = glm_signf(v[1]); } +/*! + * @brief absolute value of v + * + * @param[in] v vector + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_vec2_abs(vec2 v, vec2 dest) { + dest[0] = fabsf(v[0]); + dest[1] = fabsf(v[1]); +} + /*! * @brief square root of each vector item * @@ -237,5 +251,4 @@ glm_vec2_complex_conjugate(vec2 a, vec2 dest) { dest[1] = -a[1]; } - #endif /* cglm_vec2_ext_h */ diff --git a/src/ivec2.c b/src/ivec2.c index 1162c22..0b9a231 100644 --- a/src/ivec2.c +++ b/src/ivec2.c @@ -97,3 +97,10 @@ void glmc_ivec2_clamp(ivec2 v, int minVal, int maxVal) { glm_ivec2_clamp(v, minVal, maxVal); } + +CGLM_EXPORT +void +glmc_ivec2_abs(ivec2 v, ivec2 dest) { + glm_ivec2_abs(v, dest); +} + diff --git a/src/ivec3.c b/src/ivec3.c index 1e14dd3..4435daf 100644 --- a/src/ivec3.c +++ b/src/ivec3.c @@ -97,3 +97,10 @@ void glmc_ivec3_clamp(ivec3 v, int minVal, int maxVal) { glm_ivec3_clamp(v, minVal, maxVal); } + +CGLM_EXPORT +void +glmc_ivec3_abs(ivec3 v, ivec3 dest) { + glm_ivec3_abs(v, dest); +} + diff --git a/src/ivec4.c b/src/ivec4.c index ea69042..89cb305 100644 --- a/src/ivec4.c +++ b/src/ivec4.c @@ -97,3 +97,10 @@ void glmc_ivec4_clamp(ivec4 v, int minVal, int maxVal) { glm_ivec4_clamp(v, minVal, maxVal); } + +CGLM_EXPORT +void +glmc_ivec4_abs(ivec4 v, ivec4 dest) { + glm_ivec4_abs(v, dest); +} + diff --git a/src/vec2.c b/src/vec2.c index a75f3f0..8b025ee 100644 --- a/src/vec2.c +++ b/src/vec2.c @@ -206,6 +206,12 @@ glmc_vec2_clamp(vec2 v, float minval, float maxval) { glm_vec2_clamp(v, minval, maxval); } +CGLM_EXPORT +void +glmc_vec2_abs(vec2 v, vec2 dest) { + glm_vec2_abs(v, dest); +} + CGLM_EXPORT void glmc_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) { diff --git a/test/src/test_ivec2.h b/test/src/test_ivec2.h index 63f32bb..8d666f5 100644 --- a/test/src/test_ivec2.h +++ b/test/src/test_ivec2.h @@ -187,3 +187,18 @@ TEST_IMPL(GLM_PREFIX, ivec2_clamp) { TEST_SUCCESS } + +TEST_IMPL(GLM_PREFIX, ivec2_abs) { + ivec2 v1 = {2, -3}, v2 = {-12, -31}; + ivec2 v3, v4; + + GLM(ivec2_abs)(v1, v3); + GLM(ivec2_abs)(v2, v4); + + ASSERT(v3[0] == 2) + ASSERT(v3[1] == 3) + ASSERT(v4[0] == 12) + ASSERT(v4[1] == 31) + + TEST_SUCCESS +} diff --git a/test/src/test_ivec3.h b/test/src/test_ivec3.h index 260b7a3..a3692bc 100644 --- a/test/src/test_ivec3.h +++ b/test/src/test_ivec3.h @@ -197,3 +197,20 @@ TEST_IMPL(GLM_PREFIX, ivec3_clamp) { TEST_SUCCESS } + +TEST_IMPL(GLM_PREFIX, ivec3_abs) { + ivec3 v1 = {2, -3, 4}, v2 = {-12, -31, -42}; + ivec3 v3, v4; + + GLM(ivec3_abs)(v1, v3); + GLM(ivec3_abs)(v2, v4); + + ASSERT(v3[0] == 2) + ASSERT(v3[1] == 3) + ASSERT(v3[2] == 4) + ASSERT(v4[0] == 12) + ASSERT(v4[1] == 31) + ASSERT(v4[2] == 42) + + TEST_SUCCESS +} diff --git a/test/src/test_ivec4.h b/test/src/test_ivec4.h index 48b3c41..f93d291 100644 --- a/test/src/test_ivec4.h +++ b/test/src/test_ivec4.h @@ -212,3 +212,22 @@ TEST_IMPL(GLM_PREFIX, ivec4_clamp) { TEST_SUCCESS } + +TEST_IMPL(GLM_PREFIX, ivec4_abs) { + ivec4 v1 = {2, -3, 4, -5}, v2 = {-12, -31, -42, -50}; + ivec4 v3, v4; + + GLM(ivec4_abs)(v1, v3); + GLM(ivec4_abs)(v2, v4); + + ASSERT(v3[0] == 2) + ASSERT(v3[1] == 3) + ASSERT(v3[2] == 4) + ASSERT(v3[3] == 5) + ASSERT(v4[0] == 12) + ASSERT(v4[1] == 31) + ASSERT(v4[2] == 42) + ASSERT(v4[3] == 50) + + TEST_SUCCESS +} diff --git a/test/src/test_vec2.h b/test/src/test_vec2.h index a300af7..369ce39 100644 --- a/test/src/test_vec2.h +++ b/test/src/test_vec2.h @@ -579,6 +579,20 @@ TEST_IMPL(GLM_PREFIX, vec2_clamp) { TEST_SUCCESS } +TEST_IMPL(GLM_PREFIX, vec2_abs) { + vec2 v1 = {2, -3}, v2 = {-12, -31}; + vec2 v3, v4; + vec2 v5 = {2, 3}, v6 = {12, 31}; + + GLM(vec2_abs)(v1, v3); + GLM(vec2_abs)(v2, v4); + + ASSERTIFY(test_assert_vec2_eq(v3, v5)) + ASSERTIFY(test_assert_vec2_eq(v4, v6)) + + TEST_SUCCESS +} + TEST_IMPL(GLM_PREFIX, vec2_lerp) { vec2 v1 = {-100.0f, -200.0f}; vec2 v2 = {100.0f, 200.0f}; diff --git a/test/tests.h b/test/tests.h index 361b485..659a98e 100644 --- a/test/tests.h +++ b/test/tests.h @@ -379,6 +379,7 @@ TEST_DECLARE(glm_vec2_distance) TEST_DECLARE(glm_vec2_maxv) TEST_DECLARE(glm_vec2_minv) TEST_DECLARE(glm_vec2_clamp) +TEST_DECLARE(glm_vec2_abs) TEST_DECLARE(glm_vec2_lerp) TEST_DECLARE(glm_vec2_complex_mul) TEST_DECLARE(glm_vec2_complex_div) @@ -416,6 +417,7 @@ TEST_DECLARE(glmc_vec2_distance) TEST_DECLARE(glmc_vec2_maxv) TEST_DECLARE(glmc_vec2_minv) TEST_DECLARE(glmc_vec2_clamp) +TEST_DECLARE(glmc_vec2_abs) TEST_DECLARE(glmc_vec2_lerp) TEST_DECLARE(glmc_vec2_complex_mul) TEST_DECLARE(glmc_vec2_complex_div) @@ -746,6 +748,7 @@ TEST_DECLARE(glm_ivec2_distance) TEST_DECLARE(glm_ivec2_maxv) TEST_DECLARE(glm_ivec2_minv) TEST_DECLARE(glm_ivec2_clamp) +TEST_DECLARE(glm_ivec2_abs) TEST_DECLARE(glmc_ivec2) TEST_DECLARE(glmc_ivec2_copy) @@ -762,6 +765,7 @@ TEST_DECLARE(glmc_ivec2_distance) TEST_DECLARE(glmc_ivec2_maxv) TEST_DECLARE(glmc_ivec2_minv) TEST_DECLARE(glmc_ivec2_clamp) +TEST_DECLARE(glmc_ivec2_abs) /* ivec3 */ TEST_DECLARE(glm_ivec3) @@ -812,6 +816,7 @@ TEST_DECLARE(glm_ivec4_distance) TEST_DECLARE(glm_ivec4_maxv) TEST_DECLARE(glm_ivec4_minv) TEST_DECLARE(glm_ivec4_clamp) +TEST_DECLARE(glm_ivec4_abs) TEST_DECLARE(glmc_ivec4) TEST_DECLARE(glmc_ivec4_copy) @@ -828,6 +833,7 @@ TEST_DECLARE(glmc_ivec4_distance) TEST_DECLARE(glmc_ivec4_maxv) TEST_DECLARE(glmc_ivec4_minv) TEST_DECLARE(glmc_ivec4_clamp) +TEST_DECLARE(glmc_ivec4_abs) /* structs */ TEST_DECLARE(mat3s_identity_init) @@ -1244,6 +1250,7 @@ TEST_LIST { TEST_ENTRY(glmc_vec2_maxv) TEST_ENTRY(glmc_vec2_minv) TEST_ENTRY(glmc_vec2_clamp) + TEST_ENTRY(glmc_vec2_abs) TEST_ENTRY(glmc_vec2_lerp) TEST_ENTRY(glmc_vec2_complex_mul) TEST_ENTRY(glmc_vec2_complex_div) @@ -1573,6 +1580,7 @@ TEST_LIST { TEST_ENTRY(glm_ivec2_maxv) TEST_ENTRY(glm_ivec2_minv) TEST_ENTRY(glm_ivec2_clamp) + TEST_ENTRY(glm_ivec2_abs) TEST_ENTRY(glmc_ivec2) TEST_ENTRY(glmc_ivec2_copy) @@ -1589,6 +1597,7 @@ TEST_LIST { TEST_ENTRY(glmc_ivec2_maxv) TEST_ENTRY(glmc_ivec2_minv) TEST_ENTRY(glmc_ivec2_clamp) + TEST_ENTRY(glmc_ivec2_abs) /* ivec3 */ TEST_ENTRY(glm_ivec3) @@ -1655,6 +1664,7 @@ TEST_LIST { TEST_ENTRY(glmc_ivec4_maxv) TEST_ENTRY(glmc_ivec4_minv) TEST_ENTRY(glmc_ivec4_clamp) + TEST_ENTRY(glmc_ivec4_abs) /* structs */ TEST_ENTRY(mat3s_identity_init) From 2386cdcc196b9ce3a6e1db026ffb2a141682d70e Mon Sep 17 00:00:00 2001 From: duarm Date: Sat, 19 Nov 2022 17:46:08 -0300 Subject: [PATCH 2/3] docs --- docs/source/ivec2.rst | 8 ++++++++ docs/source/ivec3.rst | 8 ++++++++ docs/source/ivec4.rst | 8 ++++++++ docs/source/vec2-ext.rst | 8 ++++++++ docs/source/vec3-ext.rst | 9 +++++++++ 5 files changed, 41 insertions(+) diff --git a/docs/source/ivec2.rst b/docs/source/ivec2.rst index c10bc4c..c730f05 100644 --- a/docs/source/ivec2.rst +++ b/docs/source/ivec2.rst @@ -161,3 +161,11 @@ Functions documentation | *[in, out]* **v** vector | *[in]* **minVal** minimum value | *[in]* **maxVal** maximum value + +.. c:function:: void glm_ivec2_abs(ivec2 v, ivec2 dest) + + absolute value of each vector item + + Parameters: + | *[in]* **v** vector + | *[out]* **dest** destination vector diff --git a/docs/source/ivec3.rst b/docs/source/ivec3.rst index 312078a..4d0e590 100644 --- a/docs/source/ivec3.rst +++ b/docs/source/ivec3.rst @@ -161,3 +161,11 @@ Functions documentation | *[in, out]* **v** vector | *[in]* **minVal** minimum value | *[in]* **maxVal** maximum value + +.. c:function:: void glm_ivec3_abs(ivec3 v, ivec3 dest) + + absolute value of each vector item + + Parameters: + | *[in]* **v** vector + | *[out]* **dest** destination vector diff --git a/docs/source/ivec4.rst b/docs/source/ivec4.rst index a175631..f9c6047 100644 --- a/docs/source/ivec4.rst +++ b/docs/source/ivec4.rst @@ -161,3 +161,11 @@ Functions documentation | *[in, out]* **v** vector | *[in]* **minVal** minimum value | *[in]* **maxVal** maximum value + +.. c:function:: void glm_ivec4_abs(ivec4 v, ivec4 dest) + + absolute value of each vector item + + Parameters: + | *[in]* **v** vector + | *[out]* **dest** destination vector diff --git a/docs/source/vec2-ext.rst b/docs/source/vec2-ext.rst index 619d48f..56d37df 100644 --- a/docs/source/vec2-ext.rst +++ b/docs/source/vec2-ext.rst @@ -125,6 +125,14 @@ Functions documentation | *[in]* **v** vector | *[out]* **dest** sign vector (only keeps signs as -1, 0, -1) +.. c:function:: void glm_vec2_abs(vec2 v, vec2 dest) + + absolute value of each vector item + + Parameters: + | *[in]* **v** vector + | *[out]* **dest** destination vector + .. c:function:: void glm_vec2_sqrt(vec2 v, vec2 dest) square root of each vector item diff --git a/docs/source/vec3-ext.rst b/docs/source/vec3-ext.rst index 88f3699..54fd7cd 100644 --- a/docs/source/vec3-ext.rst +++ b/docs/source/vec3-ext.rst @@ -27,6 +27,7 @@ Functions: #. :c:func:`glm_vec3_isinf` #. :c:func:`glm_vec3_isvalid` #. :c:func:`glm_vec3_sign` +#. :c:func:`glm_vec3_abs` #. :c:func:`glm_vec3_sqrt` Functions documentation @@ -134,6 +135,14 @@ Functions documentation | *[in]* **v** vector | *[out]* **dest** sign vector (only keeps signs as -1, 0, -1) +.. c:function:: void glm_vec3_abs(vec3 v, vec3 dest) + + absolute value of each vector item + + Parameters: + | *[in]* **v** vector + | *[out]* **dest** destination vector + .. c:function:: void glm_vec3_sqrt(vec3 v, vec3 dest) square root of each vector item From 60bf21ba43c4cfc7e579f14498b0ff8bf60393e1 Mon Sep 17 00:00:00 2001 From: duarm Date: Sat, 19 Nov 2022 17:48:32 -0300 Subject: [PATCH 3/3] add missing table of contents --- docs/source/ivec2.rst | 1 + docs/source/ivec3.rst | 1 + docs/source/ivec4.rst | 1 + docs/source/vec2-ext.rst | 1 + 4 files changed, 4 insertions(+) diff --git a/docs/source/ivec2.rst b/docs/source/ivec2.rst index c730f05..f4d9f29 100644 --- a/docs/source/ivec2.rst +++ b/docs/source/ivec2.rst @@ -25,6 +25,7 @@ Functions: #. :c:func:`glm_ivec2_maxv` #. :c:func:`glm_ivec2_minv` #. :c:func:`glm_ivec2_clamp` +#. :c:func:`glm_ivec2_abs` Functions documentation ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/ivec3.rst b/docs/source/ivec3.rst index 4d0e590..a438390 100644 --- a/docs/source/ivec3.rst +++ b/docs/source/ivec3.rst @@ -25,6 +25,7 @@ Functions: #. :c:func:`glm_ivec3_maxv` #. :c:func:`glm_ivec3_minv` #. :c:func:`glm_ivec3_clamp` +#. :c:func:`glm_ivec2_abs` Functions documentation ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/ivec4.rst b/docs/source/ivec4.rst index f9c6047..c30555e 100644 --- a/docs/source/ivec4.rst +++ b/docs/source/ivec4.rst @@ -25,6 +25,7 @@ Functions: #. :c:func:`glm_ivec4_maxv` #. :c:func:`glm_ivec4_minv` #. :c:func:`glm_ivec4_clamp` +#. :c:func:`glm_ivec4_abs` Functions documentation ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/source/vec2-ext.rst b/docs/source/vec2-ext.rst index 56d37df..f8d8fe5 100644 --- a/docs/source/vec2-ext.rst +++ b/docs/source/vec2-ext.rst @@ -26,6 +26,7 @@ Functions: #. :c:func:`glm_vec2_isinf` #. :c:func:`glm_vec2_isvalid` #. :c:func:`glm_vec2_sign` +#. :c:func:`glm_vec2_abs` #. :c:func:`glm_vec2_sqrt` Functions documentation