mirror of
https://github.com/recp/cglm.git
synced 2025-12-24 20:34:58 +00:00
vec2 swizzle
This commit is contained in:
@@ -201,6 +201,10 @@ CGLM_EXPORT
|
||||
void
|
||||
glmc_vec2_mods(vec2 v, float s, vec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_vec2_swizzle(vec2 v, int mask, vec2 dest);
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest);
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
|
||||
#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))
|
||||
#define GLM_SHUFFLE2(y, x) (((y) << 2) | (x))
|
||||
|
||||
#include "types.h"
|
||||
#include "simd/intrin.h"
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
CGLM_INLINE void glm_vec2_maxv(vec2 v1, vec2 v2, vec2 dest)
|
||||
CGLM_INLINE void glm_vec2_minv(vec2 v1, vec2 v2, vec2 dest)
|
||||
CGLM_INLINE void glm_vec2_clamp(vec2 v, float minVal, float maxVal)
|
||||
CGLM_INLINE void glm_vec2_swizzle(vec2 v, int mask, vec2 dest)
|
||||
CGLM_INLINE void glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest)
|
||||
CGLM_INLINE void glm_vec2_step(vec2 edge, vec2 x, vec2 dest)
|
||||
CGLM_INLINE void glm_vec2_make(float * restrict src, vec2 dest)
|
||||
@@ -680,6 +681,24 @@ glm_vec2_clamp(vec2 v, float minval, float maxval) {
|
||||
v[1] = glm_clamp(v[1], minval, maxval);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief swizzle vector components
|
||||
*
|
||||
* @param[in] v source
|
||||
* @param[in] mask mask
|
||||
* @param[out] dest destination
|
||||
*/
|
||||
CGLM_INLINE
|
||||
void
|
||||
glm_vec2_swizzle(vec2 v, int mask, vec2 dest) {
|
||||
vec2 t;
|
||||
|
||||
t[0] = v[(mask & (3 << 0))];
|
||||
t[1] = v[(mask & (3 << 2)) >> 2];
|
||||
|
||||
glm_vec2_copy(t, dest);
|
||||
}
|
||||
|
||||
/*!
|
||||
* @brief linear interpolation between two vector
|
||||
*
|
||||
|
||||
@@ -308,6 +308,13 @@ void
|
||||
glmc_vec2_stepr(vec2 edge, float v, vec2 dest) {
|
||||
glm_vec2_stepr(edge, v, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_vec2_swizzle(vec2 v, int mask, vec2 dest) {
|
||||
glm_vec2_swizzle(v, mask, dest);
|
||||
}
|
||||
|
||||
CGLM_EXPORT
|
||||
void
|
||||
glmc_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest) {
|
||||
|
||||
@@ -737,6 +737,21 @@ TEST_IMPL(GLM_PREFIX, vec2_mods) {
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, vec2_swizzle) {
|
||||
vec2 v;
|
||||
|
||||
v[0] = 1;
|
||||
v[1] = 2;
|
||||
|
||||
GLM(vec2_swizzle)(v, GLM_SHUFFLE2(1, 0), v);
|
||||
ASSERTIFY(test_assert_vec2_eq(v, (vec2){2, 1}))
|
||||
|
||||
GLM(vec2_swizzle)(v, GLM_SHUFFLE2(0, 0), v);
|
||||
ASSERTIFY(test_assert_vec2_eq(v, (vec2){1, 1}))
|
||||
|
||||
TEST_SUCCESS
|
||||
}
|
||||
|
||||
TEST_IMPL(GLM_PREFIX, vec2_lerp) {
|
||||
vec2 v1 = {-100.0f, -200.0f};
|
||||
vec2 v2 = {100.0f, 200.0f};
|
||||
|
||||
Reference in New Issue
Block a user