mirror of
https://github.com/g-truc/glm.git
synced 2024-12-02 04:34:34 +00:00
2779 lines
74 KiB
C++
2779 lines
74 KiB
C++
/// @ref gtx_vec_swizzle
|
|
/// @file glm/gtx/vec_swizzle.hpp
|
|
///
|
|
/// @see core (dependence)
|
|
///
|
|
/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle
|
|
/// @ingroup gtx
|
|
///
|
|
/// Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.
|
|
///
|
|
/// Functions to perform swizzle operation.
|
|
|
|
#pragma once
|
|
|
|
#include "../glm.hpp"
|
|
|
|
#ifndef GLM_ENABLE_EXPERIMENTAL
|
|
# error "GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
|
|
#endif
|
|
|
|
namespace glm {
|
|
// xx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.x);
|
|
}
|
|
|
|
// xy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.y);
|
|
}
|
|
|
|
// xz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.z);
|
|
}
|
|
|
|
// xw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.x, v.w);
|
|
}
|
|
|
|
// yx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.x);
|
|
}
|
|
|
|
// yy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.y);
|
|
}
|
|
|
|
// yz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.z);
|
|
}
|
|
|
|
// yw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.y, v.w);
|
|
}
|
|
|
|
// zx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.x);
|
|
}
|
|
|
|
// zy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.y);
|
|
}
|
|
|
|
// zz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.z);
|
|
}
|
|
|
|
// zw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.z, v.w);
|
|
}
|
|
|
|
// wx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.w, v.x);
|
|
}
|
|
|
|
// wy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.w, v.y);
|
|
}
|
|
|
|
// wz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.w, v.z);
|
|
}
|
|
|
|
// ww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<2, T, Q>(v.w, v.w);
|
|
}
|
|
|
|
// xxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.x);
|
|
}
|
|
|
|
// xxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.y);
|
|
}
|
|
|
|
// xxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.z);
|
|
}
|
|
|
|
// xxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.x, v.w);
|
|
}
|
|
|
|
// xyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.x);
|
|
}
|
|
|
|
// xyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.y);
|
|
}
|
|
|
|
// xyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.z);
|
|
}
|
|
|
|
// xyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.y, v.w);
|
|
}
|
|
|
|
// xzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.x);
|
|
}
|
|
|
|
// xzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.y);
|
|
}
|
|
|
|
// xzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.z);
|
|
}
|
|
|
|
// xzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.z, v.w);
|
|
}
|
|
|
|
// xwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.w, v.x);
|
|
}
|
|
|
|
// xwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.w, v.y);
|
|
}
|
|
|
|
// xwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.w, v.z);
|
|
}
|
|
|
|
// xww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.x, v.w, v.w);
|
|
}
|
|
|
|
// yxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.x);
|
|
}
|
|
|
|
// yxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.y);
|
|
}
|
|
|
|
// yxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.z);
|
|
}
|
|
|
|
// yxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.x, v.w);
|
|
}
|
|
|
|
// yyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.x);
|
|
}
|
|
|
|
// yyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.y);
|
|
}
|
|
|
|
// yyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.z);
|
|
}
|
|
|
|
// yyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.y, v.w);
|
|
}
|
|
|
|
// yzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.x);
|
|
}
|
|
|
|
// yzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.y);
|
|
}
|
|
|
|
// yzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.z);
|
|
}
|
|
|
|
// yzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.z, v.w);
|
|
}
|
|
|
|
// ywx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.w, v.x);
|
|
}
|
|
|
|
// ywy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.w, v.y);
|
|
}
|
|
|
|
// ywz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.w, v.z);
|
|
}
|
|
|
|
// yww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.y, v.w, v.w);
|
|
}
|
|
|
|
// zxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.x);
|
|
}
|
|
|
|
// zxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.y);
|
|
}
|
|
|
|
// zxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.z);
|
|
}
|
|
|
|
// zxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.x, v.w);
|
|
}
|
|
|
|
// zyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.x);
|
|
}
|
|
|
|
// zyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.y);
|
|
}
|
|
|
|
// zyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.z);
|
|
}
|
|
|
|
// zyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.y, v.w);
|
|
}
|
|
|
|
// zzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.x);
|
|
}
|
|
|
|
// zzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.y);
|
|
}
|
|
|
|
// zzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.z);
|
|
}
|
|
|
|
// zzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.z, v.w);
|
|
}
|
|
|
|
// zwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.w, v.x);
|
|
}
|
|
|
|
// zwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.w, v.y);
|
|
}
|
|
|
|
// zwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.w, v.z);
|
|
}
|
|
|
|
// zww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.z, v.w, v.w);
|
|
}
|
|
|
|
// wxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.x, v.x);
|
|
}
|
|
|
|
// wxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.x, v.y);
|
|
}
|
|
|
|
// wxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.x, v.z);
|
|
}
|
|
|
|
// wxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.x, v.w);
|
|
}
|
|
|
|
// wyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.y, v.x);
|
|
}
|
|
|
|
// wyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.y, v.y);
|
|
}
|
|
|
|
// wyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.y, v.z);
|
|
}
|
|
|
|
// wyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.y, v.w);
|
|
}
|
|
|
|
// wzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.z, v.x);
|
|
}
|
|
|
|
// wzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.z, v.y);
|
|
}
|
|
|
|
// wzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.z, v.z);
|
|
}
|
|
|
|
// wzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.z, v.w);
|
|
}
|
|
|
|
// wwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.w, v.x);
|
|
}
|
|
|
|
// wwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.w, v.y);
|
|
}
|
|
|
|
// wwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.w, v.z);
|
|
}
|
|
|
|
// www
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<3, T, Q>(v.w, v.w, v.w);
|
|
}
|
|
|
|
// xxxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
|
|
}
|
|
|
|
// xxxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
|
|
}
|
|
|
|
// xxxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
|
|
}
|
|
|
|
// xxxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);
|
|
}
|
|
|
|
// xxyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
|
|
}
|
|
|
|
// xxyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
|
|
}
|
|
|
|
// xxyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
|
|
}
|
|
|
|
// xxyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);
|
|
}
|
|
|
|
// xxzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
|
|
}
|
|
|
|
// xxzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
|
|
}
|
|
|
|
// xxzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
|
|
}
|
|
|
|
// xxzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);
|
|
}
|
|
|
|
// xxwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);
|
|
}
|
|
|
|
// xxwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);
|
|
}
|
|
|
|
// xxwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);
|
|
}
|
|
|
|
// xxww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);
|
|
}
|
|
|
|
// xyxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
|
|
}
|
|
|
|
// xyxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
|
|
}
|
|
|
|
// xyxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
|
|
}
|
|
|
|
// xyxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);
|
|
}
|
|
|
|
// xyyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
|
|
}
|
|
|
|
// xyyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
|
|
}
|
|
|
|
// xyyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
|
|
}
|
|
|
|
// xyyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);
|
|
}
|
|
|
|
// xyzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
|
|
}
|
|
|
|
// xyzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
|
|
}
|
|
|
|
// xyzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
|
|
}
|
|
|
|
// xyzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);
|
|
}
|
|
|
|
// xywx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);
|
|
}
|
|
|
|
// xywy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);
|
|
}
|
|
|
|
// xywz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);
|
|
}
|
|
|
|
// xyww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);
|
|
}
|
|
|
|
// xzxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
|
|
}
|
|
|
|
// xzxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
|
|
}
|
|
|
|
// xzxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
|
|
}
|
|
|
|
// xzxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);
|
|
}
|
|
|
|
// xzyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
|
|
}
|
|
|
|
// xzyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
|
|
}
|
|
|
|
// xzyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
|
|
}
|
|
|
|
// xzyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);
|
|
}
|
|
|
|
// xzzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
|
|
}
|
|
|
|
// xzzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
|
|
}
|
|
|
|
// xzzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
|
|
}
|
|
|
|
// xzzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);
|
|
}
|
|
|
|
// xzwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);
|
|
}
|
|
|
|
// xzwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);
|
|
}
|
|
|
|
// xzwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);
|
|
}
|
|
|
|
// xzww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);
|
|
}
|
|
|
|
// xwxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);
|
|
}
|
|
|
|
// xwxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);
|
|
}
|
|
|
|
// xwxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);
|
|
}
|
|
|
|
// xwxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);
|
|
}
|
|
|
|
// xwyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);
|
|
}
|
|
|
|
// xwyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);
|
|
}
|
|
|
|
// xwyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);
|
|
}
|
|
|
|
// xwyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);
|
|
}
|
|
|
|
// xwzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);
|
|
}
|
|
|
|
// xwzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);
|
|
}
|
|
|
|
// xwzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);
|
|
}
|
|
|
|
// xwzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);
|
|
}
|
|
|
|
// xwwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);
|
|
}
|
|
|
|
// xwwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);
|
|
}
|
|
|
|
// xwwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);
|
|
}
|
|
|
|
// xwww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);
|
|
}
|
|
|
|
// yxxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
|
|
}
|
|
|
|
// yxxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
|
|
}
|
|
|
|
// yxxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
|
|
}
|
|
|
|
// yxxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);
|
|
}
|
|
|
|
// yxyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
|
|
}
|
|
|
|
// yxyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
|
|
}
|
|
|
|
// yxyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
|
|
}
|
|
|
|
// yxyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);
|
|
}
|
|
|
|
// yxzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
|
|
}
|
|
|
|
// yxzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
|
|
}
|
|
|
|
// yxzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
|
|
}
|
|
|
|
// yxzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);
|
|
}
|
|
|
|
// yxwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);
|
|
}
|
|
|
|
// yxwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);
|
|
}
|
|
|
|
// yxwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);
|
|
}
|
|
|
|
// yxww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);
|
|
}
|
|
|
|
// yyxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
|
|
}
|
|
|
|
// yyxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
|
|
}
|
|
|
|
// yyxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
|
|
}
|
|
|
|
// yyxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);
|
|
}
|
|
|
|
// yyyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
|
|
}
|
|
|
|
// yyyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
|
|
}
|
|
|
|
// yyyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
|
|
}
|
|
|
|
// yyyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);
|
|
}
|
|
|
|
// yyzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
|
|
}
|
|
|
|
// yyzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
|
|
}
|
|
|
|
// yyzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
|
|
}
|
|
|
|
// yyzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);
|
|
}
|
|
|
|
// yywx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);
|
|
}
|
|
|
|
// yywy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);
|
|
}
|
|
|
|
// yywz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);
|
|
}
|
|
|
|
// yyww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);
|
|
}
|
|
|
|
// yzxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
|
|
}
|
|
|
|
// yzxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
|
|
}
|
|
|
|
// yzxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
|
|
}
|
|
|
|
// yzxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);
|
|
}
|
|
|
|
// yzyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
|
|
}
|
|
|
|
// yzyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
|
|
}
|
|
|
|
// yzyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
|
|
}
|
|
|
|
// yzyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);
|
|
}
|
|
|
|
// yzzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
|
|
}
|
|
|
|
// yzzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
|
|
}
|
|
|
|
// yzzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
|
|
}
|
|
|
|
// yzzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);
|
|
}
|
|
|
|
// yzwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);
|
|
}
|
|
|
|
// yzwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);
|
|
}
|
|
|
|
// yzwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);
|
|
}
|
|
|
|
// yzww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);
|
|
}
|
|
|
|
// ywxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);
|
|
}
|
|
|
|
// ywxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);
|
|
}
|
|
|
|
// ywxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);
|
|
}
|
|
|
|
// ywxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);
|
|
}
|
|
|
|
// ywyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);
|
|
}
|
|
|
|
// ywyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);
|
|
}
|
|
|
|
// ywyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);
|
|
}
|
|
|
|
// ywyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);
|
|
}
|
|
|
|
// ywzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);
|
|
}
|
|
|
|
// ywzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);
|
|
}
|
|
|
|
// ywzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);
|
|
}
|
|
|
|
// ywzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);
|
|
}
|
|
|
|
// ywwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);
|
|
}
|
|
|
|
// ywwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);
|
|
}
|
|
|
|
// ywwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);
|
|
}
|
|
|
|
// ywww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);
|
|
}
|
|
|
|
// zxxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
|
|
}
|
|
|
|
// zxxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
|
|
}
|
|
|
|
// zxxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
|
|
}
|
|
|
|
// zxxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);
|
|
}
|
|
|
|
// zxyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
|
|
}
|
|
|
|
// zxyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
|
|
}
|
|
|
|
// zxyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
|
|
}
|
|
|
|
// zxyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);
|
|
}
|
|
|
|
// zxzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
|
|
}
|
|
|
|
// zxzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
|
|
}
|
|
|
|
// zxzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
|
|
}
|
|
|
|
// zxzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);
|
|
}
|
|
|
|
// zxwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);
|
|
}
|
|
|
|
// zxwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);
|
|
}
|
|
|
|
// zxwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);
|
|
}
|
|
|
|
// zxww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);
|
|
}
|
|
|
|
// zyxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
|
|
}
|
|
|
|
// zyxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
|
|
}
|
|
|
|
// zyxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
|
|
}
|
|
|
|
// zyxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);
|
|
}
|
|
|
|
// zyyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
|
|
}
|
|
|
|
// zyyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
|
|
}
|
|
|
|
// zyyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
|
|
}
|
|
|
|
// zyyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);
|
|
}
|
|
|
|
// zyzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
|
|
}
|
|
|
|
// zyzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
|
|
}
|
|
|
|
// zyzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
|
|
}
|
|
|
|
// zyzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);
|
|
}
|
|
|
|
// zywx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);
|
|
}
|
|
|
|
// zywy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);
|
|
}
|
|
|
|
// zywz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);
|
|
}
|
|
|
|
// zyww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);
|
|
}
|
|
|
|
// zzxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
|
|
}
|
|
|
|
// zzxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
|
|
}
|
|
|
|
// zzxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
|
|
}
|
|
|
|
// zzxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);
|
|
}
|
|
|
|
// zzyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
|
|
}
|
|
|
|
// zzyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
|
|
}
|
|
|
|
// zzyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
|
|
}
|
|
|
|
// zzyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);
|
|
}
|
|
|
|
// zzzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
|
|
}
|
|
|
|
// zzzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
|
|
}
|
|
|
|
// zzzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
|
|
}
|
|
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
|
|
}
|
|
|
|
// zzzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);
|
|
}
|
|
|
|
// zzwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);
|
|
}
|
|
|
|
// zzwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);
|
|
}
|
|
|
|
// zzwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);
|
|
}
|
|
|
|
// zzww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);
|
|
}
|
|
|
|
// zwxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);
|
|
}
|
|
|
|
// zwxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);
|
|
}
|
|
|
|
// zwxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);
|
|
}
|
|
|
|
// zwxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);
|
|
}
|
|
|
|
// zwyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);
|
|
}
|
|
|
|
// zwyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);
|
|
}
|
|
|
|
// zwyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);
|
|
}
|
|
|
|
// zwyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);
|
|
}
|
|
|
|
// zwzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);
|
|
}
|
|
|
|
// zwzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);
|
|
}
|
|
|
|
// zwzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);
|
|
}
|
|
|
|
// zwzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);
|
|
}
|
|
|
|
// zwwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);
|
|
}
|
|
|
|
// zwwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);
|
|
}
|
|
|
|
// zwwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);
|
|
}
|
|
|
|
// zwww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);
|
|
}
|
|
|
|
// wxxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);
|
|
}
|
|
|
|
// wxxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);
|
|
}
|
|
|
|
// wxxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);
|
|
}
|
|
|
|
// wxxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);
|
|
}
|
|
|
|
// wxyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);
|
|
}
|
|
|
|
// wxyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);
|
|
}
|
|
|
|
// wxyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);
|
|
}
|
|
|
|
// wxyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);
|
|
}
|
|
|
|
// wxzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);
|
|
}
|
|
|
|
// wxzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);
|
|
}
|
|
|
|
// wxzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);
|
|
}
|
|
|
|
// wxzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);
|
|
}
|
|
|
|
// wxwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);
|
|
}
|
|
|
|
// wxwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);
|
|
}
|
|
|
|
// wxwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);
|
|
}
|
|
|
|
// wxww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);
|
|
}
|
|
|
|
// wyxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);
|
|
}
|
|
|
|
// wyxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);
|
|
}
|
|
|
|
// wyxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);
|
|
}
|
|
|
|
// wyxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);
|
|
}
|
|
|
|
// wyyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);
|
|
}
|
|
|
|
// wyyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);
|
|
}
|
|
|
|
// wyyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);
|
|
}
|
|
|
|
// wyyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);
|
|
}
|
|
|
|
// wyzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);
|
|
}
|
|
|
|
// wyzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);
|
|
}
|
|
|
|
// wyzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);
|
|
}
|
|
|
|
// wyzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);
|
|
}
|
|
|
|
// wywx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);
|
|
}
|
|
|
|
// wywy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);
|
|
}
|
|
|
|
// wywz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);
|
|
}
|
|
|
|
// wyww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);
|
|
}
|
|
|
|
// wzxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);
|
|
}
|
|
|
|
// wzxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);
|
|
}
|
|
|
|
// wzxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);
|
|
}
|
|
|
|
// wzxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);
|
|
}
|
|
|
|
// wzyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);
|
|
}
|
|
|
|
// wzyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);
|
|
}
|
|
|
|
// wzyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);
|
|
}
|
|
|
|
// wzyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);
|
|
}
|
|
|
|
// wzzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);
|
|
}
|
|
|
|
// wzzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);
|
|
}
|
|
|
|
// wzzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);
|
|
}
|
|
|
|
// wzzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);
|
|
}
|
|
|
|
// wzwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);
|
|
}
|
|
|
|
// wzwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);
|
|
}
|
|
|
|
// wzwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);
|
|
}
|
|
|
|
// wzww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);
|
|
}
|
|
|
|
// wwxx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);
|
|
}
|
|
|
|
// wwxy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);
|
|
}
|
|
|
|
// wwxz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);
|
|
}
|
|
|
|
// wwxw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);
|
|
}
|
|
|
|
// wwyx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);
|
|
}
|
|
|
|
// wwyy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);
|
|
}
|
|
|
|
// wwyz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);
|
|
}
|
|
|
|
// wwyw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);
|
|
}
|
|
|
|
// wwzx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);
|
|
}
|
|
|
|
// wwzy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);
|
|
}
|
|
|
|
// wwzz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);
|
|
}
|
|
|
|
// wwzw
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);
|
|
}
|
|
|
|
// wwwx
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);
|
|
}
|
|
|
|
// wwwy
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);
|
|
}
|
|
|
|
// wwwz
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);
|
|
}
|
|
|
|
// wwww
|
|
template<typename T, qualifier Q>
|
|
GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {
|
|
return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);
|
|
}
|
|
|
|
}
|