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