From 144624962af644021cf30fa99de8e1a6b2c0147a Mon Sep 17 00:00:00 2001 From: Luigi Castelli Date: Mon, 26 Aug 2019 08:19:26 +0200 Subject: [PATCH] added glm_vec_fill() (#100) * alternative name for _broadcast(): _fill() --- include/cglm/call/vec3.h | 4 ++++ include/cglm/call/vec4.h | 4 ++++ include/cglm/struct/vec3-ext.h | 15 +++++++++++++++ include/cglm/struct/vec4-ext.h | 15 +++++++++++++++ include/cglm/vec3-ext.h | 13 +++++++++++++ include/cglm/vec4-ext.h | 17 +++++++++++++++++ src/vec3.c | 6 ++++++ src/vec4.c | 6 ++++++ 8 files changed, 80 insertions(+) diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h index 142241f..851417f 100644 --- a/include/cglm/call/vec3.h +++ b/include/cglm/call/vec3.h @@ -233,6 +233,10 @@ glmc_vec3_mulv(vec3 a, vec3 b, vec3 d); CGLM_EXPORT void glmc_vec3_broadcast(float val, vec3 d); + +CGLM_EXPORT +void +glmc_vec3_fill(vec3 v, float val); CGLM_EXPORT bool diff --git a/include/cglm/call/vec4.h b/include/cglm/call/vec4.h index 04fab81..c8702e2 100644 --- a/include/cglm/call/vec4.h +++ b/include/cglm/call/vec4.h @@ -210,6 +210,10 @@ glmc_vec4_mulv(vec4 a, vec4 b, vec4 d); CGLM_EXPORT void glmc_vec4_broadcast(float val, vec4 d); + +CGLM_EXPORT +void +glmc_vec4_fill(vec4 v, float val); CGLM_EXPORT bool diff --git a/include/cglm/struct/vec3-ext.h b/include/cglm/struct/vec3-ext.h index 2cd8749..055805e 100644 --- a/include/cglm/struct/vec3-ext.h +++ b/include/cglm/struct/vec3-ext.h @@ -12,6 +12,7 @@ /* Functions: CGLM_INLINE vec3s glms_vec3_broadcast(float val); + CGLM_INLINE vec3s glms_vec3_fill(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); @@ -48,6 +49,20 @@ glms_vec3_broadcast(float val) { return r; } +/*! + * @brief fill a vector with specified value + * + * @param[in] val value + * @returns dest + */ +CGLM_INLINE +vec3s +glms_vec3_fill(float val) { + vec3s r; + glm_vec3_fill(r.raw, val); + return r; +} + /*! * @brief check if vector is equal to value (without epsilon) * diff --git a/include/cglm/struct/vec4-ext.h b/include/cglm/struct/vec4-ext.h index 52c438e..371956d 100644 --- a/include/cglm/struct/vec4-ext.h +++ b/include/cglm/struct/vec4-ext.h @@ -12,6 +12,7 @@ /* Functions: CGLM_INLINE vec4s glms_vec4_broadcast(float val); + CGLM_INLINE vec4s glms_vec4_fill(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); @@ -48,6 +49,20 @@ glms_vec4_broadcast(float val) { return r; } +/*! + * @brief fill a vector with specified value + * + * @param val value + * @returns dest + */ +CGLM_INLINE +vec4s +glms_vec4_fill(float val) { + vec4s r; + glm_vec4_fill(r.raw, val); + return r; +} + /*! * @brief check if vector is equal to value (without epsilon) * diff --git a/include/cglm/vec3-ext.h b/include/cglm/vec3-ext.h index f1cc462..6b8d5f0 100644 --- a/include/cglm/vec3-ext.h +++ b/include/cglm/vec3-ext.h @@ -12,6 +12,7 @@ /* Functions: CGLM_INLINE void glm_vec3_broadcast(float val, vec3 d); + CGLM_INLINE void glm_vec3_fill(vec3 v, float val); CGLM_INLINE bool glm_vec3_eq(vec3 v, float val); CGLM_INLINE bool glm_vec3_eq_eps(vec3 v, float val); CGLM_INLINE bool glm_vec3_eq_all(vec3 v); @@ -44,6 +45,18 @@ glm_vec3_broadcast(float val, vec3 d) { d[0] = d[1] = d[2] = val; } +/*! + * @brief fill a vector with specified value + * + * @param[out] v dest + * @param[in] val value + */ +CGLM_INLINE +void +glm_vec3_fill(vec3 v, float val) { + v[0] = v[1] = v[2] = val; +} + /*! * @brief check if vector is equal to value (without epsilon) * diff --git a/include/cglm/vec4-ext.h b/include/cglm/vec4-ext.h index c545a14..3ef71d6 100644 --- a/include/cglm/vec4-ext.h +++ b/include/cglm/vec4-ext.h @@ -12,6 +12,7 @@ /* Functions: CGLM_INLINE void glm_vec4_broadcast(float val, vec4 d); + CGLM_INLINE void glm_vec4_fill(vec4 v, float val); CGLM_INLINE bool glm_vec4_eq(vec4 v, float val); CGLM_INLINE bool glm_vec4_eq_eps(vec4 v, float val); CGLM_INLINE bool glm_vec4_eq_all(vec4 v); @@ -48,6 +49,22 @@ glm_vec4_broadcast(float val, vec4 d) { #endif } +/*! + * @brief fill a vector with specified value + * + * @param v dest + * @param val value + */ +CGLM_INLINE +void +glm_vec4_fill(vec4 v, float val) { +#if defined( __SSE__ ) || defined( __SSE2__ ) + glmm_store(v, _mm_set1_ps(val)); +#else + v[0] = v[1] = v[2] = v[3] = val; +#endif +} + /*! * @brief check if vector is equal to value (without epsilon) * diff --git a/src/vec3.c b/src/vec3.c index f05070a..5e79260 100644 --- a/src/vec3.c +++ b/src/vec3.c @@ -310,6 +310,12 @@ glmc_vec3_broadcast(float val, vec3 d) { glm_vec3_broadcast(val, d); } +CGLM_EXPORT +void +glmc_vec3_fill(vec3 v, float val) { + glm_vec3_fill(v, val); +} + CGLM_EXPORT bool glmc_vec3_eq(vec3 v, float val) { diff --git a/src/vec4.c b/src/vec4.c index 2296966..d1c4d08 100644 --- a/src/vec4.c +++ b/src/vec4.c @@ -274,6 +274,12 @@ glmc_vec4_broadcast(float val, vec4 d) { glm_vec4_broadcast(val, d); } +CGLM_EXPORT +void +glmc_vec4_fill(vec4 v, float val) { + glm_vec4_fill(v, val); +} + CGLM_EXPORT bool glmc_vec4_eq(vec4 v, float val) {