mirror of
https://github.com/recp/cglm.git
synced 2025-10-04 01:00:46 +00:00
vec: minnadd
and maxadd
helpers
This commit is contained in:
@@ -55,6 +55,8 @@ Functions:
|
|||||||
#. :c:func:`glm_vec3_subadd`
|
#. :c:func:`glm_vec3_subadd`
|
||||||
#. :c:func:`glm_vec3_muladd`
|
#. :c:func:`glm_vec3_muladd`
|
||||||
#. :c:func:`glm_vec3_muladds`
|
#. :c:func:`glm_vec3_muladds`
|
||||||
|
#. :c:func:`glm_vec3_maxadd`
|
||||||
|
#. :c:func:`glm_vec3_minadd`
|
||||||
#. :c:func:`glm_vec3_flipsign`
|
#. :c:func:`glm_vec3_flipsign`
|
||||||
#. :c:func:`glm_vec3_flipsign_to`
|
#. :c:func:`glm_vec3_flipsign_to`
|
||||||
#. :c:func:`glm_vec3_inv`
|
#. :c:func:`glm_vec3_inv`
|
||||||
@@ -273,6 +275,26 @@ Functions documentation
|
|||||||
| *[in]* **s** scalar
|
| *[in]* **s** scalar
|
||||||
| *[out]* **dest** dest += (a * b)
|
| *[out]* **dest** dest += (a * b)
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest)
|
||||||
|
|
||||||
|
| add max of two vector to result/dest
|
||||||
|
| it applies += operator so dest must be initialized
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
| *[out]* **dest** dest += (a * b)
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec3_minadd(vec3 a, vec3 b, vec3 dest)
|
||||||
|
|
||||||
|
| add min of two vector to result/dest
|
||||||
|
| it applies += operator so dest must be initialized
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
| *[out]* **dest** dest += (a * b)
|
||||||
|
|
||||||
.. c:function:: void glm_vec3_flipsign(vec3 v)
|
.. c:function:: void glm_vec3_flipsign(vec3 v)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRACATED!**
|
||||||
|
@@ -43,6 +43,8 @@ Functions:
|
|||||||
#. :c:func:`glm_vec4_subadd`
|
#. :c:func:`glm_vec4_subadd`
|
||||||
#. :c:func:`glm_vec4_muladd`
|
#. :c:func:`glm_vec4_muladd`
|
||||||
#. :c:func:`glm_vec4_muladds`
|
#. :c:func:`glm_vec4_muladds`
|
||||||
|
#. :c:func:`glm_vec4_maxadd`
|
||||||
|
#. :c:func:`glm_vec4_minadd`
|
||||||
#. :c:func:`glm_vec4_flipsign`
|
#. :c:func:`glm_vec4_flipsign`
|
||||||
#. :c:func:`glm_vec4_flipsign_to`
|
#. :c:func:`glm_vec4_flipsign_to`
|
||||||
#. :c:func:`glm_vec4_inv`
|
#. :c:func:`glm_vec4_inv`
|
||||||
@@ -262,6 +264,26 @@ Functions documentation
|
|||||||
| *[in]* **s** scalar
|
| *[in]* **s** scalar
|
||||||
| *[out]* **dest** dest += (a * b)
|
| *[out]* **dest** dest += (a * b)
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest)
|
||||||
|
|
||||||
|
| add max of two vector to result/dest
|
||||||
|
| it applies += operator so dest must be initialized
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
| *[out]* **dest** dest += (a * b)
|
||||||
|
|
||||||
|
.. c:function:: void glm_vec4_minadd(vec4 a, vec4 b, vec4 dest)
|
||||||
|
|
||||||
|
| add min of two vector to result/dest
|
||||||
|
| it applies += operator so dest must be initialized
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
| *[in]* **a** vector 1
|
||||||
|
| *[in]* **b** vector 2
|
||||||
|
| *[out]* **dest** dest += (a * b)
|
||||||
|
|
||||||
.. c:function:: void glm_vec4_flipsign(vec4 v)
|
.. c:function:: void glm_vec4_flipsign(vec4 v)
|
||||||
|
|
||||||
**DEPRACATED!**
|
**DEPRACATED!**
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_aabb_transform(vec3 box[2], 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, tmp;
|
vec3 v[2], xa, xb, ya, yb, za, zb;
|
||||||
|
|
||||||
glm_vec3_scale(m[0], box[0][0], xa);
|
glm_vec3_scale(m[0], box[0][0], xa);
|
||||||
glm_vec3_scale(m[0], box[1][0], xb);
|
glm_vec3_scale(m[0], box[1][0], xb);
|
||||||
@@ -34,21 +34,17 @@ glm_aabb_transform(vec3 box[2], mat4 m, vec3 dest[2]) {
|
|||||||
glm_vec3_scale(m[2], box[0][2], za);
|
glm_vec3_scale(m[2], box[0][2], za);
|
||||||
glm_vec3_scale(m[2], box[1][2], zb);
|
glm_vec3_scale(m[2], box[1][2], zb);
|
||||||
|
|
||||||
/* min(xa, xb) + min(ya, yb) + min(za, zb) + translation */
|
/* translation + min(xa, xb) + min(ya, yb) + min(za, zb) */
|
||||||
glm_vec3_minv(xa, xb, v[0]);
|
glm_vec3(m[3], v[0]);
|
||||||
glm_vec3_minv(ya, yb, tmp);
|
glm_vec3_minadd(xa, xb, v[0]);
|
||||||
glm_vec3_add(v[0], tmp, v[0]);
|
glm_vec3_minadd(ya, yb, v[0]);
|
||||||
glm_vec3_minv(za, zb, tmp);
|
glm_vec3_minadd(za, zb, v[0]);
|
||||||
glm_vec3_add(v[0], tmp, v[0]);
|
|
||||||
glm_vec3_add(v[0], m[3], v[0]);
|
|
||||||
|
|
||||||
/* max(xa, xb) + max(ya, yb) + max(za, zb) + translation */
|
/* translation + max(xa, xb) + max(ya, yb) + max(za, zb) */
|
||||||
glm_vec3_maxv(xa, xb, v[1]);
|
glm_vec3(m[3], v[1]);
|
||||||
glm_vec3_maxv(ya, yb, tmp);
|
glm_vec3_maxadd(xa, xb, v[1]);
|
||||||
glm_vec3_add(v[1], tmp, v[1]);
|
glm_vec3_maxadd(ya, yb, v[1]);
|
||||||
glm_vec3_maxv(za, zb, tmp);
|
glm_vec3_maxadd(za, zb, v[1]);
|
||||||
glm_vec3_add(v[1], tmp, v[1]);
|
|
||||||
glm_vec3_add(v[1], m[3], v[1]);
|
|
||||||
|
|
||||||
glm_vec3_copy(v[0], dest[0]);
|
glm_vec3_copy(v[0], dest[0]);
|
||||||
glm_vec3_copy(v[1], dest[1]);
|
glm_vec3_copy(v[1], dest[1]);
|
||||||
|
@@ -112,6 +112,14 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec3_muladds(vec3 a, float s, vec3 dest);
|
glmc_vec3_muladds(vec3 a, float s, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_negate(vec3 v);
|
glmc_vec3_negate(vec3 v);
|
||||||
|
@@ -117,6 +117,14 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec4_muladds(vec4 a, float s, vec4 dest);
|
glmc_vec4_muladds(vec4 a, float s, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_negate(vec4 v);
|
glmc_vec4_negate(vec4 v);
|
||||||
|
@@ -37,6 +37,8 @@
|
|||||||
CGLM_INLINE void glm_vec3_subadd(vec3 a, vec3 b, vec3 dest);
|
CGLM_INLINE void glm_vec3_subadd(vec3 a, vec3 b, vec3 dest);
|
||||||
CGLM_INLINE void glm_vec3_muladd(vec3 a, vec3 b, vec3 dest);
|
CGLM_INLINE void glm_vec3_muladd(vec3 a, vec3 b, vec3 dest);
|
||||||
CGLM_INLINE void glm_vec3_muladds(vec3 a, float s, vec3 dest);
|
CGLM_INLINE void glm_vec3_muladds(vec3 a, float s, vec3 dest);
|
||||||
|
CGLM_INLINE void glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest);
|
||||||
|
CGLM_INLINE void glm_vec3_minadd(vec3 a, vec3 b, vec3 dest);
|
||||||
CGLM_INLINE void glm_vec3_flipsign(vec3 v);
|
CGLM_INLINE void glm_vec3_flipsign(vec3 v);
|
||||||
CGLM_INLINE void glm_vec3_flipsign_to(vec3 v, vec3 dest);
|
CGLM_INLINE void glm_vec3_flipsign_to(vec3 v, vec3 dest);
|
||||||
CGLM_INLINE void glm_vec3_negate_to(vec3 v, vec3 dest);
|
CGLM_INLINE void glm_vec3_negate_to(vec3 v, vec3 dest);
|
||||||
@@ -419,6 +421,40 @@ glm_vec3_muladds(vec3 a, float s, vec3 dest) {
|
|||||||
dest[2] += a[2] * s;
|
dest[2] += a[2] * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @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
|
||||||
|
* @param[out] dest dest += max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add min of two vector to result/dest
|
||||||
|
*
|
||||||
|
* it applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
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]);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief negate vector components and store result in dest
|
* @brief negate vector components and store result in dest
|
||||||
*
|
*
|
||||||
@@ -732,7 +768,7 @@ glm_vec3_lerp(vec3 from, vec3 to, float t, vec3 dest) {
|
|||||||
/* from + s * (to - from) */
|
/* from + s * (to - from) */
|
||||||
glm_vec3_broadcast(glm_clamp_zo(t), s);
|
glm_vec3_broadcast(glm_clamp_zo(t), s);
|
||||||
glm_vec3_sub(to, from, v);
|
glm_vec3_sub(to, from, v);
|
||||||
glm_vec3_mulv(s, v, v);
|
glm_vec3_mul(s, v, v);
|
||||||
glm_vec3_add(from, v, dest);
|
glm_vec3_add(from, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,6 +34,9 @@
|
|||||||
CGLM_INLINE void glm_vec4_addadd(vec4 a, vec4 b, vec4 dest);
|
CGLM_INLINE void glm_vec4_addadd(vec4 a, vec4 b, vec4 dest);
|
||||||
CGLM_INLINE void glm_vec4_subadd(vec4 a, vec4 b, vec4 dest);
|
CGLM_INLINE void glm_vec4_subadd(vec4 a, vec4 b, vec4 dest);
|
||||||
CGLM_INLINE void glm_vec4_muladd(vec4 a, vec4 b, vec4 dest);
|
CGLM_INLINE void glm_vec4_muladd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
CGLM_INLINE void glm_vec4_muladds(vec4 a, float s, vec4 dest);
|
||||||
|
CGLM_INLINE void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest);
|
||||||
|
CGLM_INLINE void glm_vec4_minadd(vec4 a, vec4 b, vec4 dest);
|
||||||
CGLM_INLINE void glm_vec4_negate(vec4 v);
|
CGLM_INLINE void glm_vec4_negate(vec4 v);
|
||||||
CGLM_INLINE void glm_vec4_inv(vec4 v);
|
CGLM_INLINE void glm_vec4_inv(vec4 v);
|
||||||
CGLM_INLINE void glm_vec4_inv_to(vec4 v, vec4 dest);
|
CGLM_INLINE void glm_vec4_inv_to(vec4 v, vec4 dest);
|
||||||
@@ -45,7 +48,6 @@
|
|||||||
CGLM_INLINE void glm_vec4_clamp(vec4 v, float minVal, float maxVal);
|
CGLM_INLINE void glm_vec4_clamp(vec4 v, float minVal, float maxVal);
|
||||||
CGLM_INLINE void glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest)
|
CGLM_INLINE void glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest)
|
||||||
|
|
||||||
|
|
||||||
DEPRECATED:
|
DEPRECATED:
|
||||||
glm_vec4_dup
|
glm_vec4_dup
|
||||||
glm_vec4_flipsign
|
glm_vec4_flipsign
|
||||||
@@ -521,6 +523,54 @@ glm_vec4_muladds(vec4 a, float s, vec4 dest) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @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
|
||||||
|
* @param[out] dest dest += max(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
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),
|
||||||
|
glmm_load(b))));
|
||||||
|
#else
|
||||||
|
dest[0] += glm_max(a[0], b[0]);
|
||||||
|
dest[1] += glm_max(a[1], b[1]);
|
||||||
|
dest[2] += glm_max(a[2], b[2]);
|
||||||
|
dest[3] += glm_max(a[3], b[3]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief add min of two vector to result/dest
|
||||||
|
*
|
||||||
|
* it applies += operator so dest must be initialized
|
||||||
|
*
|
||||||
|
* @param[in] a vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest dest += min(a, b)
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
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),
|
||||||
|
glmm_load(b))));
|
||||||
|
#else
|
||||||
|
dest[0] += glm_min(a[0], b[0]);
|
||||||
|
dest[1] += glm_min(a[1], b[1]);
|
||||||
|
dest[2] += glm_min(a[2], b[2]);
|
||||||
|
dest[3] += glm_min(a[3], b[3]);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief negate vector components and store result in dest
|
* @brief negate vector components and store result in dest
|
||||||
*
|
*
|
||||||
@@ -694,7 +744,7 @@ glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) {
|
|||||||
/* from + s * (to - from) */
|
/* from + s * (to - from) */
|
||||||
glm_vec4_broadcast(glm_clamp_zo(t), s);
|
glm_vec4_broadcast(glm_clamp_zo(t), s);
|
||||||
glm_vec4_sub(to, from, v);
|
glm_vec4_sub(to, from, v);
|
||||||
glm_vec4_mulv(s, v, v);
|
glm_vec4_mul(s, v, v);
|
||||||
glm_vec4_add(from, v, dest);
|
glm_vec4_add(from, v, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
src/vec3.c
12
src/vec3.c
@@ -146,6 +146,18 @@ glmc_vec3_muladds(vec3 a, float s, vec3 dest) {
|
|||||||
glm_vec3_muladds(a, s, dest);
|
glm_vec3_muladds(a, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_maxadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
|
glm_vec3_maxadd(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest) {
|
||||||
|
glm_vec3_minadd(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec3_negate(vec3 v) {
|
glmc_vec3_negate(vec3 v) {
|
||||||
|
12
src/vec4.c
12
src/vec4.c
@@ -152,6 +152,18 @@ glmc_vec4_muladds(vec4 a, float s, vec4 dest) {
|
|||||||
glm_vec4_muladds(a, s, dest);
|
glm_vec4_muladds(a, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_maxadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
|
glm_vec4_maxadd(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest) {
|
||||||
|
glm_vec4_minadd(a, b, dest);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec4_negate(vec4 v) {
|
glmc_vec4_negate(vec4 v) {
|
||||||
|
Reference in New Issue
Block a user