summaryrefslogtreecommitdiffstats
path: root/external/include/glm/gtx/vec_swizzle.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'external/include/glm/gtx/vec_swizzle.hpp')
-rw-r--r--external/include/glm/gtx/vec_swizzle.hpp2778
1 files changed, 2778 insertions, 0 deletions
diff --git a/external/include/glm/gtx/vec_swizzle.hpp b/external/include/glm/gtx/vec_swizzle.hpp
new file mode 100644
index 0000000..daebac3
--- /dev/null
+++ b/external/include/glm/gtx/vec_swizzle.hpp
@@ -0,0 +1,2778 @@
+/// @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);
+ }
+
+}