diff --git a/include/cglm/call/vec4.h b/include/cglm/call/vec4.h index 9a72510..936bb52 100644 --- a/include/cglm/call/vec4.h +++ b/include/cglm/call/vec4.h @@ -153,6 +153,10 @@ CGLM_EXPORT void glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest); +CGLM_EXPORT +void +glmc_vec4_cubic(float s, vec4 dest); + /* ext */ CGLM_EXPORT diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index 9da0d96..1d68841 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -800,4 +800,23 @@ glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { glm_vec4_add(from, v, dest); } +/*! + * @brief helper to fill vec4 as [S^3, S^2, S, 1] + * + * @param[in] s parameter + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_vec4_cubic(float s, vec4 dest) { + float ss; + + ss = s * s; + + dest[0] = s; + dest[1] = ss; + dest[2] = ss * s; + dest[3] = 1.0f; +} + #endif /* cglm_vec4_h */ diff --git a/src/vec4.c b/src/vec4.c index 1a49710..0bb6a6e 100644 --- a/src/vec4.c +++ b/src/vec4.c @@ -206,6 +206,12 @@ glmc_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest) { glm_vec4_lerp(from, to, t, dest); } +CGLM_EXPORT +void +glmc_vec4_cubic(float s, vec4 dest) { + glm_vec4_cubic(s, dest); +} + /* ext */ CGLM_EXPORT