swizzle support

This commit is contained in:
Recep Aslantas
2018-01-20 18:38:26 +03:00
parent 55d1e240a2
commit 090f940f50
3 changed files with 59 additions and 0 deletions

View File

@@ -44,6 +44,7 @@
CGLM_INLINE void glm_vec_maxv(vec3 v1, vec3 v2, vec3 dest);
CGLM_INLINE void glm_vec_minv(vec3 v1, vec3 v2, vec3 dest);
CGLM_INLINE void glm_vec_ortho(vec3 v, vec3 dest);
CGLM_INLINE void glm_vec_swizzle(vec3 v, int mask, vec3 dest);
Convenient:
CGLM_INLINE void glm_cross(vec3 a, vec3 b, vec3 d);
@@ -69,6 +70,11 @@
#define GLM_ZUP (vec3){0.0f, 0.0f, 1.0f}
#define GLM_XUP (vec3){1.0f, 0.0f, 0.0f}
#define GLM_XXX GLM_SHUFFLE3(0, 0, 0)
#define GLM_YYY GLM_SHUFFLE3(1, 1, 1)
#define GLM_ZZZ GLM_SHUFFLE3(2, 2, 2)
#define GLM_ZYX GLM_SHUFFLE3(0, 1, 2)
/*!
* @brief init vec3 using vec4
*
@@ -528,4 +534,25 @@ glm_normalize_to(vec3 v, vec3 dest) {
glm_vec_normalize_to(v, dest);
}
/*!
* @brief swizzle vector components
*
* you can use existin masks e.g. GLM_XXX, GLM_ZYX
*
* @param[in] v source
* @param[in] mask mask
* @param[out] dest destination
*/
CGLM_INLINE
void
glm_vec_swizzle(vec3 v, int mask, vec3 dest) {
vec3 t;
t[0] = v[(mask & (3 << 0))];
t[1] = v[(mask & (3 << 2)) >> 2];
t[2] = v[(mask & (3 << 4)) >> 4];
glm_vec_copy(t, dest);
}
#endif /* cglm_vec3_h */