1 /// @ref gtx_vec_swizzle
2 /// @file glm/gtx/vec_swizzle.hpp
3 ///
4 /// @see core (dependence)
5 ///
6 /// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle
7 /// @ingroup gtx
8 ///
9 /// Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.
10 ///
11 /// Functions to perform swizzle operation.
12 
13 #pragma once
14 
15 #include "../glm.hpp"
16 
17 #if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
18 #	ifndef GLM_ENABLE_EXPERIMENTAL
19 #		pragma message("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.")
20 #	else
21 #		pragma message("GLM: GLM_GTX_vec_swizzle extension included")
22 #	endif
23 #endif
24 
25 namespace glm {
26 	// xx
27 	template<typename T, qualifier Q>
xx(const glm::vec<1,T,Q> & v)28 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
29 		return glm::vec<2, T, Q>(v.x, v.x);
30 	}
31 
32 	template<typename T, qualifier Q>
xx(const glm::vec<2,T,Q> & v)33 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
34 		return glm::vec<2, T, Q>(v.x, v.x);
35 	}
36 
37 	template<typename T, qualifier Q>
xx(const glm::vec<3,T,Q> & v)38 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
39 		return glm::vec<2, T, Q>(v.x, v.x);
40 	}
41 
42 	template<typename T, qualifier Q>
xx(const glm::vec<4,T,Q> & v)43 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
44 		return glm::vec<2, T, Q>(v.x, v.x);
45 	}
46 
47 	// xy
48 	template<typename T, qualifier Q>
xy(const glm::vec<2,T,Q> & v)49 	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
50 		return glm::vec<2, T, Q>(v.x, v.y);
51 	}
52 
53 	template<typename T, qualifier Q>
xy(const glm::vec<3,T,Q> & v)54 	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
55 		return glm::vec<2, T, Q>(v.x, v.y);
56 	}
57 
58 	template<typename T, qualifier Q>
xy(const glm::vec<4,T,Q> & v)59 	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
60 		return glm::vec<2, T, Q>(v.x, v.y);
61 	}
62 
63 	// xz
64 	template<typename T, qualifier Q>
xz(const glm::vec<3,T,Q> & v)65 	GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
66 		return glm::vec<2, T, Q>(v.x, v.z);
67 	}
68 
69 	template<typename T, qualifier Q>
xz(const glm::vec<4,T,Q> & v)70 	GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
71 		return glm::vec<2, T, Q>(v.x, v.z);
72 	}
73 
74 	// xw
75 	template<typename T, qualifier Q>
xw(const glm::vec<4,T,Q> & v)76 	GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
77 		return glm::vec<2, T, Q>(v.x, v.w);
78 	}
79 
80 	// yx
81 	template<typename T, qualifier Q>
yx(const glm::vec<2,T,Q> & v)82 	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
83 		return glm::vec<2, T, Q>(v.y, v.x);
84 	}
85 
86 	template<typename T, qualifier Q>
yx(const glm::vec<3,T,Q> & v)87 	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
88 		return glm::vec<2, T, Q>(v.y, v.x);
89 	}
90 
91 	template<typename T, qualifier Q>
yx(const glm::vec<4,T,Q> & v)92 	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
93 		return glm::vec<2, T, Q>(v.y, v.x);
94 	}
95 
96 	// yy
97 	template<typename T, qualifier Q>
yy(const glm::vec<2,T,Q> & v)98 	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
99 		return glm::vec<2, T, Q>(v.y, v.y);
100 	}
101 
102 	template<typename T, qualifier Q>
yy(const glm::vec<3,T,Q> & v)103 	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
104 		return glm::vec<2, T, Q>(v.y, v.y);
105 	}
106 
107 	template<typename T, qualifier Q>
yy(const glm::vec<4,T,Q> & v)108 	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
109 		return glm::vec<2, T, Q>(v.y, v.y);
110 	}
111 
112 	// yz
113 	template<typename T, qualifier Q>
yz(const glm::vec<3,T,Q> & v)114 	GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
115 		return glm::vec<2, T, Q>(v.y, v.z);
116 	}
117 
118 	template<typename T, qualifier Q>
yz(const glm::vec<4,T,Q> & v)119 	GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
120 		return glm::vec<2, T, Q>(v.y, v.z);
121 	}
122 
123 	// yw
124 	template<typename T, qualifier Q>
yw(const glm::vec<4,T,Q> & v)125 	GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
126 		return glm::vec<2, T, Q>(v.y, v.w);
127 	}
128 
129 	// zx
130 	template<typename T, qualifier Q>
zx(const glm::vec<3,T,Q> & v)131 	GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
132 		return glm::vec<2, T, Q>(v.z, v.x);
133 	}
134 
135 	template<typename T, qualifier Q>
zx(const glm::vec<4,T,Q> & v)136 	GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
137 		return glm::vec<2, T, Q>(v.z, v.x);
138 	}
139 
140 	// zy
141 	template<typename T, qualifier Q>
zy(const glm::vec<3,T,Q> & v)142 	GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
143 		return glm::vec<2, T, Q>(v.z, v.y);
144 	}
145 
146 	template<typename T, qualifier Q>
zy(const glm::vec<4,T,Q> & v)147 	GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
148 		return glm::vec<2, T, Q>(v.z, v.y);
149 	}
150 
151 	// zz
152 	template<typename T, qualifier Q>
zz(const glm::vec<3,T,Q> & v)153 	GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
154 		return glm::vec<2, T, Q>(v.z, v.z);
155 	}
156 
157 	template<typename T, qualifier Q>
zz(const glm::vec<4,T,Q> & v)158 	GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
159 		return glm::vec<2, T, Q>(v.z, v.z);
160 	}
161 
162 	// zw
163 	template<typename T, qualifier Q>
zw(const glm::vec<4,T,Q> & v)164 	GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
165 		return glm::vec<2, T, Q>(v.z, v.w);
166 	}
167 
168 	// wx
169 	template<typename T, qualifier Q>
wx(const glm::vec<4,T,Q> & v)170 	GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
171 		return glm::vec<2, T, Q>(v.w, v.x);
172 	}
173 
174 	// wy
175 	template<typename T, qualifier Q>
wy(const glm::vec<4,T,Q> & v)176 	GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
177 		return glm::vec<2, T, Q>(v.w, v.y);
178 	}
179 
180 	// wz
181 	template<typename T, qualifier Q>
wz(const glm::vec<4,T,Q> & v)182 	GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
183 		return glm::vec<2, T, Q>(v.w, v.z);
184 	}
185 
186 	// ww
187 	template<typename T, qualifier Q>
ww(const glm::vec<4,T,Q> & v)188 	GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
189 		return glm::vec<2, T, Q>(v.w, v.w);
190 	}
191 
192 	// xxx
193 	template<typename T, qualifier Q>
xxx(const glm::vec<1,T,Q> & v)194 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
195 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
196 	}
197 
198 	template<typename T, qualifier Q>
xxx(const glm::vec<2,T,Q> & v)199 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {
200 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
201 	}
202 
203 	template<typename T, qualifier Q>
xxx(const glm::vec<3,T,Q> & v)204 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {
205 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
206 	}
207 
208 	template<typename T, qualifier Q>
xxx(const glm::vec<4,T,Q> & v)209 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
210 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
211 	}
212 
213 	// xxy
214 	template<typename T, qualifier Q>
xxy(const glm::vec<2,T,Q> & v)215 	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
216 		return glm::vec<3, T, Q>(v.x, v.x, v.y);
217 	}
218 
219 	template<typename T, qualifier Q>
xxy(const glm::vec<3,T,Q> & v)220 	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {
221 		return glm::vec<3, T, Q>(v.x, v.x, v.y);
222 	}
223 
224 	template<typename T, qualifier Q>
xxy(const glm::vec<4,T,Q> & v)225 	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
226 		return glm::vec<3, T, Q>(v.x, v.x, v.y);
227 	}
228 
229 	// xxz
230 	template<typename T, qualifier Q>
xxz(const glm::vec<3,T,Q> & v)231 	GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
232 		return glm::vec<3, T, Q>(v.x, v.x, v.z);
233 	}
234 
235 	template<typename T, qualifier Q>
xxz(const glm::vec<4,T,Q> & v)236 	GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
237 		return glm::vec<3, T, Q>(v.x, v.x, v.z);
238 	}
239 
240 	// xxw
241 	template<typename T, qualifier Q>
xxw(const glm::vec<4,T,Q> & v)242 	GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
243 		return glm::vec<3, T, Q>(v.x, v.x, v.w);
244 	}
245 
246 	// xyx
247 	template<typename T, qualifier Q>
xyx(const glm::vec<2,T,Q> & v)248 	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
249 		return glm::vec<3, T, Q>(v.x, v.y, v.x);
250 	}
251 
252 	template<typename T, qualifier Q>
xyx(const glm::vec<3,T,Q> & v)253 	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {
254 		return glm::vec<3, T, Q>(v.x, v.y, v.x);
255 	}
256 
257 	template<typename T, qualifier Q>
xyx(const glm::vec<4,T,Q> & v)258 	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
259 		return glm::vec<3, T, Q>(v.x, v.y, v.x);
260 	}
261 
262 	// xyy
263 	template<typename T, qualifier Q>
xyy(const glm::vec<2,T,Q> & v)264 	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
265 		return glm::vec<3, T, Q>(v.x, v.y, v.y);
266 	}
267 
268 	template<typename T, qualifier Q>
xyy(const glm::vec<3,T,Q> & v)269 	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {
270 		return glm::vec<3, T, Q>(v.x, v.y, v.y);
271 	}
272 
273 	template<typename T, qualifier Q>
xyy(const glm::vec<4,T,Q> & v)274 	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
275 		return glm::vec<3, T, Q>(v.x, v.y, v.y);
276 	}
277 
278 	// xyz
279 	template<typename T, qualifier Q>
xyz(const glm::vec<3,T,Q> & v)280 	GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
281 		return glm::vec<3, T, Q>(v.x, v.y, v.z);
282 	}
283 
284 	template<typename T, qualifier Q>
xyz(const glm::vec<4,T,Q> & v)285 	GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {
286 		return glm::vec<3, T, Q>(v.x, v.y, v.z);
287 	}
288 
289 	// xyw
290 	template<typename T, qualifier Q>
xyw(const glm::vec<4,T,Q> & v)291 	GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {
292 		return glm::vec<3, T, Q>(v.x, v.y, v.w);
293 	}
294 
295 	// xzx
296 	template<typename T, qualifier Q>
xzx(const glm::vec<3,T,Q> & v)297 	GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {
298 		return glm::vec<3, T, Q>(v.x, v.z, v.x);
299 	}
300 
301 	template<typename T, qualifier Q>
xzx(const glm::vec<4,T,Q> & v)302 	GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {
303 		return glm::vec<3, T, Q>(v.x, v.z, v.x);
304 	}
305 
306 	// xzy
307 	template<typename T, qualifier Q>
xzy(const glm::vec<3,T,Q> & v)308 	GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {
309 		return glm::vec<3, T, Q>(v.x, v.z, v.y);
310 	}
311 
312 	template<typename T, qualifier Q>
xzy(const glm::vec<4,T,Q> & v)313 	GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {
314 		return glm::vec<3, T, Q>(v.x, v.z, v.y);
315 	}
316 
317 	// xzz
318 	template<typename T, qualifier Q>
xzz(const glm::vec<3,T,Q> & v)319 	GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {
320 		return glm::vec<3, T, Q>(v.x, v.z, v.z);
321 	}
322 
323 	template<typename T, qualifier Q>
xzz(const glm::vec<4,T,Q> & v)324 	GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {
325 		return glm::vec<3, T, Q>(v.x, v.z, v.z);
326 	}
327 
328 	// xzw
329 	template<typename T, qualifier Q>
xzw(const glm::vec<4,T,Q> & v)330 	GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {
331 		return glm::vec<3, T, Q>(v.x, v.z, v.w);
332 	}
333 
334 	// xwx
335 	template<typename T, qualifier Q>
xwx(const glm::vec<4,T,Q> & v)336 	GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {
337 		return glm::vec<3, T, Q>(v.x, v.w, v.x);
338 	}
339 
340 	// xwy
341 	template<typename T, qualifier Q>
xwy(const glm::vec<4,T,Q> & v)342 	GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {
343 		return glm::vec<3, T, Q>(v.x, v.w, v.y);
344 	}
345 
346 	// xwz
347 	template<typename T, qualifier Q>
xwz(const glm::vec<4,T,Q> & v)348 	GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {
349 		return glm::vec<3, T, Q>(v.x, v.w, v.z);
350 	}
351 
352 	// xww
353 	template<typename T, qualifier Q>
xww(const glm::vec<4,T,Q> & v)354 	GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {
355 		return glm::vec<3, T, Q>(v.x, v.w, v.w);
356 	}
357 
358 	// yxx
359 	template<typename T, qualifier Q>
yxx(const glm::vec<2,T,Q> & v)360 	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {
361 		return glm::vec<3, T, Q>(v.y, v.x, v.x);
362 	}
363 
364 	template<typename T, qualifier Q>
yxx(const glm::vec<3,T,Q> & v)365 	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {
366 		return glm::vec<3, T, Q>(v.y, v.x, v.x);
367 	}
368 
369 	template<typename T, qualifier Q>
yxx(const glm::vec<4,T,Q> & v)370 	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {
371 		return glm::vec<3, T, Q>(v.y, v.x, v.x);
372 	}
373 
374 	// yxy
375 	template<typename T, qualifier Q>
yxy(const glm::vec<2,T,Q> & v)376 	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {
377 		return glm::vec<3, T, Q>(v.y, v.x, v.y);
378 	}
379 
380 	template<typename T, qualifier Q>
yxy(const glm::vec<3,T,Q> & v)381 	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {
382 		return glm::vec<3, T, Q>(v.y, v.x, v.y);
383 	}
384 
385 	template<typename T, qualifier Q>
yxy(const glm::vec<4,T,Q> & v)386 	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {
387 		return glm::vec<3, T, Q>(v.y, v.x, v.y);
388 	}
389 
390 	// yxz
391 	template<typename T, qualifier Q>
yxz(const glm::vec<3,T,Q> & v)392 	GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {
393 		return glm::vec<3, T, Q>(v.y, v.x, v.z);
394 	}
395 
396 	template<typename T, qualifier Q>
yxz(const glm::vec<4,T,Q> & v)397 	GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {
398 		return glm::vec<3, T, Q>(v.y, v.x, v.z);
399 	}
400 
401 	// yxw
402 	template<typename T, qualifier Q>
yxw(const glm::vec<4,T,Q> & v)403 	GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {
404 		return glm::vec<3, T, Q>(v.y, v.x, v.w);
405 	}
406 
407 	// yyx
408 	template<typename T, qualifier Q>
yyx(const glm::vec<2,T,Q> & v)409 	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {
410 		return glm::vec<3, T, Q>(v.y, v.y, v.x);
411 	}
412 
413 	template<typename T, qualifier Q>
yyx(const glm::vec<3,T,Q> & v)414 	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {
415 		return glm::vec<3, T, Q>(v.y, v.y, v.x);
416 	}
417 
418 	template<typename T, qualifier Q>
yyx(const glm::vec<4,T,Q> & v)419 	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {
420 		return glm::vec<3, T, Q>(v.y, v.y, v.x);
421 	}
422 
423 	// yyy
424 	template<typename T, qualifier Q>
yyy(const glm::vec<2,T,Q> & v)425 	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {
426 		return glm::vec<3, T, Q>(v.y, v.y, v.y);
427 	}
428 
429 	template<typename T, qualifier Q>
yyy(const glm::vec<3,T,Q> & v)430 	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {
431 		return glm::vec<3, T, Q>(v.y, v.y, v.y);
432 	}
433 
434 	template<typename T, qualifier Q>
yyy(const glm::vec<4,T,Q> & v)435 	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {
436 		return glm::vec<3, T, Q>(v.y, v.y, v.y);
437 	}
438 
439 	// yyz
440 	template<typename T, qualifier Q>
yyz(const glm::vec<3,T,Q> & v)441 	GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {
442 		return glm::vec<3, T, Q>(v.y, v.y, v.z);
443 	}
444 
445 	template<typename T, qualifier Q>
yyz(const glm::vec<4,T,Q> & v)446 	GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {
447 		return glm::vec<3, T, Q>(v.y, v.y, v.z);
448 	}
449 
450 	// yyw
451 	template<typename T, qualifier Q>
yyw(const glm::vec<4,T,Q> & v)452 	GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {
453 		return glm::vec<3, T, Q>(v.y, v.y, v.w);
454 	}
455 
456 	// yzx
457 	template<typename T, qualifier Q>
yzx(const glm::vec<3,T,Q> & v)458 	GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {
459 		return glm::vec<3, T, Q>(v.y, v.z, v.x);
460 	}
461 
462 	template<typename T, qualifier Q>
yzx(const glm::vec<4,T,Q> & v)463 	GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {
464 		return glm::vec<3, T, Q>(v.y, v.z, v.x);
465 	}
466 
467 	// yzy
468 	template<typename T, qualifier Q>
yzy(const glm::vec<3,T,Q> & v)469 	GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {
470 		return glm::vec<3, T, Q>(v.y, v.z, v.y);
471 	}
472 
473 	template<typename T, qualifier Q>
yzy(const glm::vec<4,T,Q> & v)474 	GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {
475 		return glm::vec<3, T, Q>(v.y, v.z, v.y);
476 	}
477 
478 	// yzz
479 	template<typename T, qualifier Q>
yzz(const glm::vec<3,T,Q> & v)480 	GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {
481 		return glm::vec<3, T, Q>(v.y, v.z, v.z);
482 	}
483 
484 	template<typename T, qualifier Q>
yzz(const glm::vec<4,T,Q> & v)485 	GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {
486 		return glm::vec<3, T, Q>(v.y, v.z, v.z);
487 	}
488 
489 	// yzw
490 	template<typename T, qualifier Q>
yzw(const glm::vec<4,T,Q> & v)491 	GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {
492 		return glm::vec<3, T, Q>(v.y, v.z, v.w);
493 	}
494 
495 	// ywx
496 	template<typename T, qualifier Q>
ywx(const glm::vec<4,T,Q> & v)497 	GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {
498 		return glm::vec<3, T, Q>(v.y, v.w, v.x);
499 	}
500 
501 	// ywy
502 	template<typename T, qualifier Q>
ywy(const glm::vec<4,T,Q> & v)503 	GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {
504 		return glm::vec<3, T, Q>(v.y, v.w, v.y);
505 	}
506 
507 	// ywz
508 	template<typename T, qualifier Q>
ywz(const glm::vec<4,T,Q> & v)509 	GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {
510 		return glm::vec<3, T, Q>(v.y, v.w, v.z);
511 	}
512 
513 	// yww
514 	template<typename T, qualifier Q>
yww(const glm::vec<4,T,Q> & v)515 	GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {
516 		return glm::vec<3, T, Q>(v.y, v.w, v.w);
517 	}
518 
519 	// zxx
520 	template<typename T, qualifier Q>
zxx(const glm::vec<3,T,Q> & v)521 	GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {
522 		return glm::vec<3, T, Q>(v.z, v.x, v.x);
523 	}
524 
525 	template<typename T, qualifier Q>
zxx(const glm::vec<4,T,Q> & v)526 	GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {
527 		return glm::vec<3, T, Q>(v.z, v.x, v.x);
528 	}
529 
530 	// zxy
531 	template<typename T, qualifier Q>
zxy(const glm::vec<3,T,Q> & v)532 	GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {
533 		return glm::vec<3, T, Q>(v.z, v.x, v.y);
534 	}
535 
536 	template<typename T, qualifier Q>
zxy(const glm::vec<4,T,Q> & v)537 	GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {
538 		return glm::vec<3, T, Q>(v.z, v.x, v.y);
539 	}
540 
541 	// zxz
542 	template<typename T, qualifier Q>
zxz(const glm::vec<3,T,Q> & v)543 	GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {
544 		return glm::vec<3, T, Q>(v.z, v.x, v.z);
545 	}
546 
547 	template<typename T, qualifier Q>
zxz(const glm::vec<4,T,Q> & v)548 	GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {
549 		return glm::vec<3, T, Q>(v.z, v.x, v.z);
550 	}
551 
552 	// zxw
553 	template<typename T, qualifier Q>
zxw(const glm::vec<4,T,Q> & v)554 	GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {
555 		return glm::vec<3, T, Q>(v.z, v.x, v.w);
556 	}
557 
558 	// zyx
559 	template<typename T, qualifier Q>
zyx(const glm::vec<3,T,Q> & v)560 	GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {
561 		return glm::vec<3, T, Q>(v.z, v.y, v.x);
562 	}
563 
564 	template<typename T, qualifier Q>
zyx(const glm::vec<4,T,Q> & v)565 	GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {
566 		return glm::vec<3, T, Q>(v.z, v.y, v.x);
567 	}
568 
569 	// zyy
570 	template<typename T, qualifier Q>
zyy(const glm::vec<3,T,Q> & v)571 	GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {
572 		return glm::vec<3, T, Q>(v.z, v.y, v.y);
573 	}
574 
575 	template<typename T, qualifier Q>
zyy(const glm::vec<4,T,Q> & v)576 	GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {
577 		return glm::vec<3, T, Q>(v.z, v.y, v.y);
578 	}
579 
580 	// zyz
581 	template<typename T, qualifier Q>
zyz(const glm::vec<3,T,Q> & v)582 	GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {
583 		return glm::vec<3, T, Q>(v.z, v.y, v.z);
584 	}
585 
586 	template<typename T, qualifier Q>
zyz(const glm::vec<4,T,Q> & v)587 	GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {
588 		return glm::vec<3, T, Q>(v.z, v.y, v.z);
589 	}
590 
591 	// zyw
592 	template<typename T, qualifier Q>
zyw(const glm::vec<4,T,Q> & v)593 	GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {
594 		return glm::vec<3, T, Q>(v.z, v.y, v.w);
595 	}
596 
597 	// zzx
598 	template<typename T, qualifier Q>
zzx(const glm::vec<3,T,Q> & v)599 	GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {
600 		return glm::vec<3, T, Q>(v.z, v.z, v.x);
601 	}
602 
603 	template<typename T, qualifier Q>
zzx(const glm::vec<4,T,Q> & v)604 	GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {
605 		return glm::vec<3, T, Q>(v.z, v.z, v.x);
606 	}
607 
608 	// zzy
609 	template<typename T, qualifier Q>
zzy(const glm::vec<3,T,Q> & v)610 	GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {
611 		return glm::vec<3, T, Q>(v.z, v.z, v.y);
612 	}
613 
614 	template<typename T, qualifier Q>
zzy(const glm::vec<4,T,Q> & v)615 	GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {
616 		return glm::vec<3, T, Q>(v.z, v.z, v.y);
617 	}
618 
619 	// zzz
620 	template<typename T, qualifier Q>
zzz(const glm::vec<3,T,Q> & v)621 	GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {
622 		return glm::vec<3, T, Q>(v.z, v.z, v.z);
623 	}
624 
625 	template<typename T, qualifier Q>
zzz(const glm::vec<4,T,Q> & v)626 	GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {
627 		return glm::vec<3, T, Q>(v.z, v.z, v.z);
628 	}
629 
630 	// zzw
631 	template<typename T, qualifier Q>
zzw(const glm::vec<4,T,Q> & v)632 	GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {
633 		return glm::vec<3, T, Q>(v.z, v.z, v.w);
634 	}
635 
636 	// zwx
637 	template<typename T, qualifier Q>
zwx(const glm::vec<4,T,Q> & v)638 	GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {
639 		return glm::vec<3, T, Q>(v.z, v.w, v.x);
640 	}
641 
642 	// zwy
643 	template<typename T, qualifier Q>
zwy(const glm::vec<4,T,Q> & v)644 	GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {
645 		return glm::vec<3, T, Q>(v.z, v.w, v.y);
646 	}
647 
648 	// zwz
649 	template<typename T, qualifier Q>
zwz(const glm::vec<4,T,Q> & v)650 	GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {
651 		return glm::vec<3, T, Q>(v.z, v.w, v.z);
652 	}
653 
654 	// zww
655 	template<typename T, qualifier Q>
zww(const glm::vec<4,T,Q> & v)656 	GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {
657 		return glm::vec<3, T, Q>(v.z, v.w, v.w);
658 	}
659 
660 	// wxx
661 	template<typename T, qualifier Q>
wxx(const glm::vec<4,T,Q> & v)662 	GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {
663 		return glm::vec<3, T, Q>(v.w, v.x, v.x);
664 	}
665 
666 	// wxy
667 	template<typename T, qualifier Q>
wxy(const glm::vec<4,T,Q> & v)668 	GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {
669 		return glm::vec<3, T, Q>(v.w, v.x, v.y);
670 	}
671 
672 	// wxz
673 	template<typename T, qualifier Q>
wxz(const glm::vec<4,T,Q> & v)674 	GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {
675 		return glm::vec<3, T, Q>(v.w, v.x, v.z);
676 	}
677 
678 	// wxw
679 	template<typename T, qualifier Q>
wxw(const glm::vec<4,T,Q> & v)680 	GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {
681 		return glm::vec<3, T, Q>(v.w, v.x, v.w);
682 	}
683 
684 	// wyx
685 	template<typename T, qualifier Q>
wyx(const glm::vec<4,T,Q> & v)686 	GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {
687 		return glm::vec<3, T, Q>(v.w, v.y, v.x);
688 	}
689 
690 	// wyy
691 	template<typename T, qualifier Q>
wyy(const glm::vec<4,T,Q> & v)692 	GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {
693 		return glm::vec<3, T, Q>(v.w, v.y, v.y);
694 	}
695 
696 	// wyz
697 	template<typename T, qualifier Q>
wyz(const glm::vec<4,T,Q> & v)698 	GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {
699 		return glm::vec<3, T, Q>(v.w, v.y, v.z);
700 	}
701 
702 	// wyw
703 	template<typename T, qualifier Q>
wyw(const glm::vec<4,T,Q> & v)704 	GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {
705 		return glm::vec<3, T, Q>(v.w, v.y, v.w);
706 	}
707 
708 	// wzx
709 	template<typename T, qualifier Q>
wzx(const glm::vec<4,T,Q> & v)710 	GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {
711 		return glm::vec<3, T, Q>(v.w, v.z, v.x);
712 	}
713 
714 	// wzy
715 	template<typename T, qualifier Q>
wzy(const glm::vec<4,T,Q> & v)716 	GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {
717 		return glm::vec<3, T, Q>(v.w, v.z, v.y);
718 	}
719 
720 	// wzz
721 	template<typename T, qualifier Q>
wzz(const glm::vec<4,T,Q> & v)722 	GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {
723 		return glm::vec<3, T, Q>(v.w, v.z, v.z);
724 	}
725 
726 	// wzw
727 	template<typename T, qualifier Q>
wzw(const glm::vec<4,T,Q> & v)728 	GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {
729 		return glm::vec<3, T, Q>(v.w, v.z, v.w);
730 	}
731 
732 	// wwx
733 	template<typename T, qualifier Q>
wwx(const glm::vec<4,T,Q> & v)734 	GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {
735 		return glm::vec<3, T, Q>(v.w, v.w, v.x);
736 	}
737 
738 	// wwy
739 	template<typename T, qualifier Q>
wwy(const glm::vec<4,T,Q> & v)740 	GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {
741 		return glm::vec<3, T, Q>(v.w, v.w, v.y);
742 	}
743 
744 	// wwz
745 	template<typename T, qualifier Q>
wwz(const glm::vec<4,T,Q> & v)746 	GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {
747 		return glm::vec<3, T, Q>(v.w, v.w, v.z);
748 	}
749 
750 	// www
751 	template<typename T, qualifier Q>
www(const glm::vec<4,T,Q> & v)752 	GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {
753 		return glm::vec<3, T, Q>(v.w, v.w, v.w);
754 	}
755 
756 	// xxxx
757 	template<typename T, qualifier Q>
xxxx(const glm::vec<1,T,Q> & v)758 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {
759 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
760 	}
761 
762 	template<typename T, qualifier Q>
xxxx(const glm::vec<2,T,Q> & v)763 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {
764 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
765 	}
766 
767 	template<typename T, qualifier Q>
xxxx(const glm::vec<3,T,Q> & v)768 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {
769 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
770 	}
771 
772 	template<typename T, qualifier Q>
xxxx(const glm::vec<4,T,Q> & v)773 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {
774 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
775 	}
776 
777 	// xxxy
778 	template<typename T, qualifier Q>
xxxy(const glm::vec<2,T,Q> & v)779 	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {
780 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
781 	}
782 
783 	template<typename T, qualifier Q>
xxxy(const glm::vec<3,T,Q> & v)784 	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {
785 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
786 	}
787 
788 	template<typename T, qualifier Q>
xxxy(const glm::vec<4,T,Q> & v)789 	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {
790 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
791 	}
792 
793 	// xxxz
794 	template<typename T, qualifier Q>
xxxz(const glm::vec<3,T,Q> & v)795 	GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {
796 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
797 	}
798 
799 	template<typename T, qualifier Q>
xxxz(const glm::vec<4,T,Q> & v)800 	GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {
801 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
802 	}
803 
804 	// xxxw
805 	template<typename T, qualifier Q>
xxxw(const glm::vec<4,T,Q> & v)806 	GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {
807 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);
808 	}
809 
810 	// xxyx
811 	template<typename T, qualifier Q>
xxyx(const glm::vec<2,T,Q> & v)812 	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {
813 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
814 	}
815 
816 	template<typename T, qualifier Q>
xxyx(const glm::vec<3,T,Q> & v)817 	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {
818 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
819 	}
820 
821 	template<typename T, qualifier Q>
xxyx(const glm::vec<4,T,Q> & v)822 	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {
823 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
824 	}
825 
826 	// xxyy
827 	template<typename T, qualifier Q>
xxyy(const glm::vec<2,T,Q> & v)828 	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {
829 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
830 	}
831 
832 	template<typename T, qualifier Q>
xxyy(const glm::vec<3,T,Q> & v)833 	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {
834 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
835 	}
836 
837 	template<typename T, qualifier Q>
xxyy(const glm::vec<4,T,Q> & v)838 	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {
839 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
840 	}
841 
842 	// xxyz
843 	template<typename T, qualifier Q>
xxyz(const glm::vec<3,T,Q> & v)844 	GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {
845 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
846 	}
847 
848 	template<typename T, qualifier Q>
xxyz(const glm::vec<4,T,Q> & v)849 	GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {
850 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
851 	}
852 
853 	// xxyw
854 	template<typename T, qualifier Q>
xxyw(const glm::vec<4,T,Q> & v)855 	GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {
856 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);
857 	}
858 
859 	// xxzx
860 	template<typename T, qualifier Q>
xxzx(const glm::vec<3,T,Q> & v)861 	GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {
862 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
863 	}
864 
865 	template<typename T, qualifier Q>
xxzx(const glm::vec<4,T,Q> & v)866 	GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {
867 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
868 	}
869 
870 	// xxzy
871 	template<typename T, qualifier Q>
xxzy(const glm::vec<3,T,Q> & v)872 	GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {
873 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
874 	}
875 
876 	template<typename T, qualifier Q>
xxzy(const glm::vec<4,T,Q> & v)877 	GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {
878 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
879 	}
880 
881 	// xxzz
882 	template<typename T, qualifier Q>
xxzz(const glm::vec<3,T,Q> & v)883 	GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {
884 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
885 	}
886 
887 	template<typename T, qualifier Q>
xxzz(const glm::vec<4,T,Q> & v)888 	GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {
889 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
890 	}
891 
892 	// xxzw
893 	template<typename T, qualifier Q>
xxzw(const glm::vec<4,T,Q> & v)894 	GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {
895 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);
896 	}
897 
898 	// xxwx
899 	template<typename T, qualifier Q>
xxwx(const glm::vec<4,T,Q> & v)900 	GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {
901 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);
902 	}
903 
904 	// xxwy
905 	template<typename T, qualifier Q>
xxwy(const glm::vec<4,T,Q> & v)906 	GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {
907 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);
908 	}
909 
910 	// xxwz
911 	template<typename T, qualifier Q>
xxwz(const glm::vec<4,T,Q> & v)912 	GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {
913 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);
914 	}
915 
916 	// xxww
917 	template<typename T, qualifier Q>
xxww(const glm::vec<4,T,Q> & v)918 	GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {
919 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);
920 	}
921 
922 	// xyxx
923 	template<typename T, qualifier Q>
xyxx(const glm::vec<2,T,Q> & v)924 	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {
925 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
926 	}
927 
928 	template<typename T, qualifier Q>
xyxx(const glm::vec<3,T,Q> & v)929 	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {
930 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
931 	}
932 
933 	template<typename T, qualifier Q>
xyxx(const glm::vec<4,T,Q> & v)934 	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {
935 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
936 	}
937 
938 	// xyxy
939 	template<typename T, qualifier Q>
xyxy(const glm::vec<2,T,Q> & v)940 	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {
941 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
942 	}
943 
944 	template<typename T, qualifier Q>
xyxy(const glm::vec<3,T,Q> & v)945 	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {
946 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
947 	}
948 
949 	template<typename T, qualifier Q>
xyxy(const glm::vec<4,T,Q> & v)950 	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {
951 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
952 	}
953 
954 	// xyxz
955 	template<typename T, qualifier Q>
xyxz(const glm::vec<3,T,Q> & v)956 	GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {
957 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
958 	}
959 
960 	template<typename T, qualifier Q>
xyxz(const glm::vec<4,T,Q> & v)961 	GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {
962 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
963 	}
964 
965 	// xyxw
966 	template<typename T, qualifier Q>
xyxw(const glm::vec<4,T,Q> & v)967 	GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {
968 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);
969 	}
970 
971 	// xyyx
972 	template<typename T, qualifier Q>
xyyx(const glm::vec<2,T,Q> & v)973 	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {
974 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
975 	}
976 
977 	template<typename T, qualifier Q>
xyyx(const glm::vec<3,T,Q> & v)978 	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {
979 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
980 	}
981 
982 	template<typename T, qualifier Q>
xyyx(const glm::vec<4,T,Q> & v)983 	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {
984 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
985 	}
986 
987 	// xyyy
988 	template<typename T, qualifier Q>
xyyy(const glm::vec<2,T,Q> & v)989 	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {
990 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
991 	}
992 
993 	template<typename T, qualifier Q>
xyyy(const glm::vec<3,T,Q> & v)994 	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {
995 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
996 	}
997 
998 	template<typename T, qualifier Q>
xyyy(const glm::vec<4,T,Q> & v)999 	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {
1000 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
1001 	}
1002 
1003 	// xyyz
1004 	template<typename T, qualifier Q>
xyyz(const glm::vec<3,T,Q> & v)1005 	GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {
1006 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
1007 	}
1008 
1009 	template<typename T, qualifier Q>
xyyz(const glm::vec<4,T,Q> & v)1010 	GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {
1011 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
1012 	}
1013 
1014 	// xyyw
1015 	template<typename T, qualifier Q>
xyyw(const glm::vec<4,T,Q> & v)1016 	GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {
1017 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);
1018 	}
1019 
1020 	// xyzx
1021 	template<typename T, qualifier Q>
xyzx(const glm::vec<3,T,Q> & v)1022 	GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {
1023 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
1024 	}
1025 
1026 	template<typename T, qualifier Q>
xyzx(const glm::vec<4,T,Q> & v)1027 	GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {
1028 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
1029 	}
1030 
1031 	// xyzy
1032 	template<typename T, qualifier Q>
xyzy(const glm::vec<3,T,Q> & v)1033 	GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {
1034 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
1035 	}
1036 
1037 	template<typename T, qualifier Q>
xyzy(const glm::vec<4,T,Q> & v)1038 	GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {
1039 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
1040 	}
1041 
1042 	// xyzz
1043 	template<typename T, qualifier Q>
xyzz(const glm::vec<3,T,Q> & v)1044 	GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
1045 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
1046 	}
1047 
1048 	template<typename T, qualifier Q>
xyzz(const glm::vec<4,T,Q> & v)1049 	GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
1050 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
1051 	}
1052 
1053 	// xyzw
1054 	template<typename T, qualifier Q>
xyzw(const glm::vec<4,T,Q> & v)1055 	GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
1056 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);
1057 	}
1058 
1059 	// xywx
1060 	template<typename T, qualifier Q>
xywx(const glm::vec<4,T,Q> & v)1061 	GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
1062 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);
1063 	}
1064 
1065 	// xywy
1066 	template<typename T, qualifier Q>
xywy(const glm::vec<4,T,Q> & v)1067 	GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
1068 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);
1069 	}
1070 
1071 	// xywz
1072 	template<typename T, qualifier Q>
xywz(const glm::vec<4,T,Q> & v)1073 	GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
1074 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);
1075 	}
1076 
1077 	// xyww
1078 	template<typename T, qualifier Q>
xyww(const glm::vec<4,T,Q> & v)1079 	GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
1080 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);
1081 	}
1082 
1083 	// xzxx
1084 	template<typename T, qualifier Q>
xzxx(const glm::vec<3,T,Q> & v)1085 	GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
1086 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
1087 	}
1088 
1089 	template<typename T, qualifier Q>
xzxx(const glm::vec<4,T,Q> & v)1090 	GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
1091 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
1092 	}
1093 
1094 	// xzxy
1095 	template<typename T, qualifier Q>
xzxy(const glm::vec<3,T,Q> & v)1096 	GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
1097 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
1098 	}
1099 
1100 	template<typename T, qualifier Q>
xzxy(const glm::vec<4,T,Q> & v)1101 	GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
1102 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
1103 	}
1104 
1105 	// xzxz
1106 	template<typename T, qualifier Q>
xzxz(const glm::vec<3,T,Q> & v)1107 	GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
1108 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
1109 	}
1110 
1111 	template<typename T, qualifier Q>
xzxz(const glm::vec<4,T,Q> & v)1112 	GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
1113 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
1114 	}
1115 
1116 	// xzxw
1117 	template<typename T, qualifier Q>
xzxw(const glm::vec<4,T,Q> & v)1118 	GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
1119 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);
1120 	}
1121 
1122 	// xzyx
1123 	template<typename T, qualifier Q>
xzyx(const glm::vec<3,T,Q> & v)1124 	GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
1125 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
1126 	}
1127 
1128 	template<typename T, qualifier Q>
xzyx(const glm::vec<4,T,Q> & v)1129 	GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
1130 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
1131 	}
1132 
1133 	// xzyy
1134 	template<typename T, qualifier Q>
xzyy(const glm::vec<3,T,Q> & v)1135 	GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
1136 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
1137 	}
1138 
1139 	template<typename T, qualifier Q>
xzyy(const glm::vec<4,T,Q> & v)1140 	GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
1141 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
1142 	}
1143 
1144 	// xzyz
1145 	template<typename T, qualifier Q>
xzyz(const glm::vec<3,T,Q> & v)1146 	GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
1147 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
1148 	}
1149 
1150 	template<typename T, qualifier Q>
xzyz(const glm::vec<4,T,Q> & v)1151 	GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
1152 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
1153 	}
1154 
1155 	// xzyw
1156 	template<typename T, qualifier Q>
xzyw(const glm::vec<4,T,Q> & v)1157 	GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
1158 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);
1159 	}
1160 
1161 	// xzzx
1162 	template<typename T, qualifier Q>
xzzx(const glm::vec<3,T,Q> & v)1163 	GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
1164 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
1165 	}
1166 
1167 	template<typename T, qualifier Q>
xzzx(const glm::vec<4,T,Q> & v)1168 	GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
1169 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
1170 	}
1171 
1172 	// xzzy
1173 	template<typename T, qualifier Q>
xzzy(const glm::vec<3,T,Q> & v)1174 	GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
1175 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
1176 	}
1177 
1178 	template<typename T, qualifier Q>
xzzy(const glm::vec<4,T,Q> & v)1179 	GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
1180 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
1181 	}
1182 
1183 	// xzzz
1184 	template<typename T, qualifier Q>
xzzz(const glm::vec<3,T,Q> & v)1185 	GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
1186 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
1187 	}
1188 
1189 	template<typename T, qualifier Q>
xzzz(const glm::vec<4,T,Q> & v)1190 	GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
1191 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
1192 	}
1193 
1194 	// xzzw
1195 	template<typename T, qualifier Q>
xzzw(const glm::vec<4,T,Q> & v)1196 	GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
1197 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);
1198 	}
1199 
1200 	// xzwx
1201 	template<typename T, qualifier Q>
xzwx(const glm::vec<4,T,Q> & v)1202 	GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
1203 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);
1204 	}
1205 
1206 	// xzwy
1207 	template<typename T, qualifier Q>
xzwy(const glm::vec<4,T,Q> & v)1208 	GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
1209 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);
1210 	}
1211 
1212 	// xzwz
1213 	template<typename T, qualifier Q>
xzwz(const glm::vec<4,T,Q> & v)1214 	GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
1215 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);
1216 	}
1217 
1218 	// xzww
1219 	template<typename T, qualifier Q>
xzww(const glm::vec<4,T,Q> & v)1220 	GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
1221 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);
1222 	}
1223 
1224 	// xwxx
1225 	template<typename T, qualifier Q>
xwxx(const glm::vec<4,T,Q> & v)1226 	GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
1227 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);
1228 	}
1229 
1230 	// xwxy
1231 	template<typename T, qualifier Q>
xwxy(const glm::vec<4,T,Q> & v)1232 	GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
1233 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);
1234 	}
1235 
1236 	// xwxz
1237 	template<typename T, qualifier Q>
xwxz(const glm::vec<4,T,Q> & v)1238 	GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
1239 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);
1240 	}
1241 
1242 	// xwxw
1243 	template<typename T, qualifier Q>
xwxw(const glm::vec<4,T,Q> & v)1244 	GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
1245 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);
1246 	}
1247 
1248 	// xwyx
1249 	template<typename T, qualifier Q>
xwyx(const glm::vec<4,T,Q> & v)1250 	GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
1251 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);
1252 	}
1253 
1254 	// xwyy
1255 	template<typename T, qualifier Q>
xwyy(const glm::vec<4,T,Q> & v)1256 	GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
1257 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);
1258 	}
1259 
1260 	// xwyz
1261 	template<typename T, qualifier Q>
xwyz(const glm::vec<4,T,Q> & v)1262 	GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
1263 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);
1264 	}
1265 
1266 	// xwyw
1267 	template<typename T, qualifier Q>
xwyw(const glm::vec<4,T,Q> & v)1268 	GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
1269 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);
1270 	}
1271 
1272 	// xwzx
1273 	template<typename T, qualifier Q>
xwzx(const glm::vec<4,T,Q> & v)1274 	GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
1275 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);
1276 	}
1277 
1278 	// xwzy
1279 	template<typename T, qualifier Q>
xwzy(const glm::vec<4,T,Q> & v)1280 	GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
1281 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);
1282 	}
1283 
1284 	// xwzz
1285 	template<typename T, qualifier Q>
xwzz(const glm::vec<4,T,Q> & v)1286 	GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
1287 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);
1288 	}
1289 
1290 	// xwzw
1291 	template<typename T, qualifier Q>
xwzw(const glm::vec<4,T,Q> & v)1292 	GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
1293 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);
1294 	}
1295 
1296 	// xwwx
1297 	template<typename T, qualifier Q>
xwwx(const glm::vec<4,T,Q> & v)1298 	GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
1299 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);
1300 	}
1301 
1302 	// xwwy
1303 	template<typename T, qualifier Q>
xwwy(const glm::vec<4,T,Q> & v)1304 	GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
1305 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);
1306 	}
1307 
1308 	// xwwz
1309 	template<typename T, qualifier Q>
xwwz(const glm::vec<4,T,Q> & v)1310 	GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
1311 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);
1312 	}
1313 
1314 	// xwww
1315 	template<typename T, qualifier Q>
xwww(const glm::vec<4,T,Q> & v)1316 	GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
1317 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);
1318 	}
1319 
1320 	// yxxx
1321 	template<typename T, qualifier Q>
yxxx(const glm::vec<2,T,Q> & v)1322 	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
1323 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1324 	}
1325 
1326 	template<typename T, qualifier Q>
yxxx(const glm::vec<3,T,Q> & v)1327 	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
1328 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1329 	}
1330 
1331 	template<typename T, qualifier Q>
yxxx(const glm::vec<4,T,Q> & v)1332 	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
1333 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1334 	}
1335 
1336 	// yxxy
1337 	template<typename T, qualifier Q>
yxxy(const glm::vec<2,T,Q> & v)1338 	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
1339 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1340 	}
1341 
1342 	template<typename T, qualifier Q>
yxxy(const glm::vec<3,T,Q> & v)1343 	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
1344 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1345 	}
1346 
1347 	template<typename T, qualifier Q>
yxxy(const glm::vec<4,T,Q> & v)1348 	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
1349 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1350 	}
1351 
1352 	// yxxz
1353 	template<typename T, qualifier Q>
yxxz(const glm::vec<3,T,Q> & v)1354 	GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
1355 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
1356 	}
1357 
1358 	template<typename T, qualifier Q>
yxxz(const glm::vec<4,T,Q> & v)1359 	GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
1360 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
1361 	}
1362 
1363 	// yxxw
1364 	template<typename T, qualifier Q>
yxxw(const glm::vec<4,T,Q> & v)1365 	GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
1366 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);
1367 	}
1368 
1369 	// yxyx
1370 	template<typename T, qualifier Q>
yxyx(const glm::vec<2,T,Q> & v)1371 	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
1372 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1373 	}
1374 
1375 	template<typename T, qualifier Q>
yxyx(const glm::vec<3,T,Q> & v)1376 	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
1377 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1378 	}
1379 
1380 	template<typename T, qualifier Q>
yxyx(const glm::vec<4,T,Q> & v)1381 	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
1382 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1383 	}
1384 
1385 	// yxyy
1386 	template<typename T, qualifier Q>
yxyy(const glm::vec<2,T,Q> & v)1387 	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
1388 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1389 	}
1390 
1391 	template<typename T, qualifier Q>
yxyy(const glm::vec<3,T,Q> & v)1392 	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
1393 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1394 	}
1395 
1396 	template<typename T, qualifier Q>
yxyy(const glm::vec<4,T,Q> & v)1397 	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
1398 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1399 	}
1400 
1401 	// yxyz
1402 	template<typename T, qualifier Q>
yxyz(const glm::vec<3,T,Q> & v)1403 	GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
1404 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
1405 	}
1406 
1407 	template<typename T, qualifier Q>
yxyz(const glm::vec<4,T,Q> & v)1408 	GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
1409 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
1410 	}
1411 
1412 	// yxyw
1413 	template<typename T, qualifier Q>
yxyw(const glm::vec<4,T,Q> & v)1414 	GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
1415 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);
1416 	}
1417 
1418 	// yxzx
1419 	template<typename T, qualifier Q>
yxzx(const glm::vec<3,T,Q> & v)1420 	GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
1421 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
1422 	}
1423 
1424 	template<typename T, qualifier Q>
yxzx(const glm::vec<4,T,Q> & v)1425 	GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
1426 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
1427 	}
1428 
1429 	// yxzy
1430 	template<typename T, qualifier Q>
yxzy(const glm::vec<3,T,Q> & v)1431 	GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
1432 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
1433 	}
1434 
1435 	template<typename T, qualifier Q>
yxzy(const glm::vec<4,T,Q> & v)1436 	GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
1437 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
1438 	}
1439 
1440 	// yxzz
1441 	template<typename T, qualifier Q>
yxzz(const glm::vec<3,T,Q> & v)1442 	GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
1443 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
1444 	}
1445 
1446 	template<typename T, qualifier Q>
yxzz(const glm::vec<4,T,Q> & v)1447 	GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
1448 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
1449 	}
1450 
1451 	// yxzw
1452 	template<typename T, qualifier Q>
yxzw(const glm::vec<4,T,Q> & v)1453 	GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
1454 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);
1455 	}
1456 
1457 	// yxwx
1458 	template<typename T, qualifier Q>
yxwx(const glm::vec<4,T,Q> & v)1459 	GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
1460 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);
1461 	}
1462 
1463 	// yxwy
1464 	template<typename T, qualifier Q>
yxwy(const glm::vec<4,T,Q> & v)1465 	GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
1466 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);
1467 	}
1468 
1469 	// yxwz
1470 	template<typename T, qualifier Q>
yxwz(const glm::vec<4,T,Q> & v)1471 	GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
1472 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);
1473 	}
1474 
1475 	// yxww
1476 	template<typename T, qualifier Q>
yxww(const glm::vec<4,T,Q> & v)1477 	GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
1478 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);
1479 	}
1480 
1481 	// yyxx
1482 	template<typename T, qualifier Q>
yyxx(const glm::vec<2,T,Q> & v)1483 	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
1484 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1485 	}
1486 
1487 	template<typename T, qualifier Q>
yyxx(const glm::vec<3,T,Q> & v)1488 	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
1489 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1490 	}
1491 
1492 	template<typename T, qualifier Q>
yyxx(const glm::vec<4,T,Q> & v)1493 	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
1494 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1495 	}
1496 
1497 	// yyxy
1498 	template<typename T, qualifier Q>
yyxy(const glm::vec<2,T,Q> & v)1499 	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
1500 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1501 	}
1502 
1503 	template<typename T, qualifier Q>
yyxy(const glm::vec<3,T,Q> & v)1504 	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
1505 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1506 	}
1507 
1508 	template<typename T, qualifier Q>
yyxy(const glm::vec<4,T,Q> & v)1509 	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
1510 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1511 	}
1512 
1513 	// yyxz
1514 	template<typename T, qualifier Q>
yyxz(const glm::vec<3,T,Q> & v)1515 	GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
1516 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
1517 	}
1518 
1519 	template<typename T, qualifier Q>
yyxz(const glm::vec<4,T,Q> & v)1520 	GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
1521 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
1522 	}
1523 
1524 	// yyxw
1525 	template<typename T, qualifier Q>
yyxw(const glm::vec<4,T,Q> & v)1526 	GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
1527 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);
1528 	}
1529 
1530 	// yyyx
1531 	template<typename T, qualifier Q>
yyyx(const glm::vec<2,T,Q> & v)1532 	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
1533 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1534 	}
1535 
1536 	template<typename T, qualifier Q>
yyyx(const glm::vec<3,T,Q> & v)1537 	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
1538 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1539 	}
1540 
1541 	template<typename T, qualifier Q>
yyyx(const glm::vec<4,T,Q> & v)1542 	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
1543 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1544 	}
1545 
1546 	// yyyy
1547 	template<typename T, qualifier Q>
yyyy(const glm::vec<2,T,Q> & v)1548 	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
1549 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1550 	}
1551 
1552 	template<typename T, qualifier Q>
yyyy(const glm::vec<3,T,Q> & v)1553 	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
1554 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1555 	}
1556 
1557 	template<typename T, qualifier Q>
yyyy(const glm::vec<4,T,Q> & v)1558 	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
1559 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1560 	}
1561 
1562 	// yyyz
1563 	template<typename T, qualifier Q>
yyyz(const glm::vec<3,T,Q> & v)1564 	GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
1565 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
1566 	}
1567 
1568 	template<typename T, qualifier Q>
yyyz(const glm::vec<4,T,Q> & v)1569 	GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
1570 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
1571 	}
1572 
1573 	// yyyw
1574 	template<typename T, qualifier Q>
yyyw(const glm::vec<4,T,Q> & v)1575 	GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
1576 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);
1577 	}
1578 
1579 	// yyzx
1580 	template<typename T, qualifier Q>
yyzx(const glm::vec<3,T,Q> & v)1581 	GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
1582 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
1583 	}
1584 
1585 	template<typename T, qualifier Q>
yyzx(const glm::vec<4,T,Q> & v)1586 	GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
1587 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
1588 	}
1589 
1590 	// yyzy
1591 	template<typename T, qualifier Q>
yyzy(const glm::vec<3,T,Q> & v)1592 	GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
1593 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
1594 	}
1595 
1596 	template<typename T, qualifier Q>
yyzy(const glm::vec<4,T,Q> & v)1597 	GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
1598 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
1599 	}
1600 
1601 	// yyzz
1602 	template<typename T, qualifier Q>
yyzz(const glm::vec<3,T,Q> & v)1603 	GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
1604 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
1605 	}
1606 
1607 	template<typename T, qualifier Q>
yyzz(const glm::vec<4,T,Q> & v)1608 	GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
1609 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
1610 	}
1611 
1612 	// yyzw
1613 	template<typename T, qualifier Q>
yyzw(const glm::vec<4,T,Q> & v)1614 	GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
1615 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);
1616 	}
1617 
1618 	// yywx
1619 	template<typename T, qualifier Q>
yywx(const glm::vec<4,T,Q> & v)1620 	GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
1621 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);
1622 	}
1623 
1624 	// yywy
1625 	template<typename T, qualifier Q>
yywy(const glm::vec<4,T,Q> & v)1626 	GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
1627 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);
1628 	}
1629 
1630 	// yywz
1631 	template<typename T, qualifier Q>
yywz(const glm::vec<4,T,Q> & v)1632 	GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
1633 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);
1634 	}
1635 
1636 	// yyww
1637 	template<typename T, qualifier Q>
yyww(const glm::vec<4,T,Q> & v)1638 	GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
1639 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);
1640 	}
1641 
1642 	// yzxx
1643 	template<typename T, qualifier Q>
yzxx(const glm::vec<3,T,Q> & v)1644 	GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
1645 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
1646 	}
1647 
1648 	template<typename T, qualifier Q>
yzxx(const glm::vec<4,T,Q> & v)1649 	GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
1650 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
1651 	}
1652 
1653 	// yzxy
1654 	template<typename T, qualifier Q>
yzxy(const glm::vec<3,T,Q> & v)1655 	GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
1656 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
1657 	}
1658 
1659 	template<typename T, qualifier Q>
yzxy(const glm::vec<4,T,Q> & v)1660 	GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
1661 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
1662 	}
1663 
1664 	// yzxz
1665 	template<typename T, qualifier Q>
yzxz(const glm::vec<3,T,Q> & v)1666 	GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
1667 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
1668 	}
1669 
1670 	template<typename T, qualifier Q>
yzxz(const glm::vec<4,T,Q> & v)1671 	GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
1672 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
1673 	}
1674 
1675 	// yzxw
1676 	template<typename T, qualifier Q>
yzxw(const glm::vec<4,T,Q> & v)1677 	GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
1678 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);
1679 	}
1680 
1681 	// yzyx
1682 	template<typename T, qualifier Q>
yzyx(const glm::vec<3,T,Q> & v)1683 	GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
1684 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
1685 	}
1686 
1687 	template<typename T, qualifier Q>
yzyx(const glm::vec<4,T,Q> & v)1688 	GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
1689 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
1690 	}
1691 
1692 	// yzyy
1693 	template<typename T, qualifier Q>
yzyy(const glm::vec<3,T,Q> & v)1694 	GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
1695 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
1696 	}
1697 
1698 	template<typename T, qualifier Q>
yzyy(const glm::vec<4,T,Q> & v)1699 	GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
1700 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
1701 	}
1702 
1703 	// yzyz
1704 	template<typename T, qualifier Q>
yzyz(const glm::vec<3,T,Q> & v)1705 	GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
1706 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
1707 	}
1708 
1709 	template<typename T, qualifier Q>
yzyz(const glm::vec<4,T,Q> & v)1710 	GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
1711 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
1712 	}
1713 
1714 	// yzyw
1715 	template<typename T, qualifier Q>
yzyw(const glm::vec<4,T,Q> & v)1716 	GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
1717 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);
1718 	}
1719 
1720 	// yzzx
1721 	template<typename T, qualifier Q>
yzzx(const glm::vec<3,T,Q> & v)1722 	GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
1723 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
1724 	}
1725 
1726 	template<typename T, qualifier Q>
yzzx(const glm::vec<4,T,Q> & v)1727 	GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
1728 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
1729 	}
1730 
1731 	// yzzy
1732 	template<typename T, qualifier Q>
yzzy(const glm::vec<3,T,Q> & v)1733 	GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
1734 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
1735 	}
1736 
1737 	template<typename T, qualifier Q>
yzzy(const glm::vec<4,T,Q> & v)1738 	GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
1739 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
1740 	}
1741 
1742 	// yzzz
1743 	template<typename T, qualifier Q>
yzzz(const glm::vec<3,T,Q> & v)1744 	GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
1745 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
1746 	}
1747 
1748 	template<typename T, qualifier Q>
yzzz(const glm::vec<4,T,Q> & v)1749 	GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
1750 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
1751 	}
1752 
1753 	// yzzw
1754 	template<typename T, qualifier Q>
yzzw(const glm::vec<4,T,Q> & v)1755 	GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
1756 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);
1757 	}
1758 
1759 	// yzwx
1760 	template<typename T, qualifier Q>
yzwx(const glm::vec<4,T,Q> & v)1761 	GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
1762 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);
1763 	}
1764 
1765 	// yzwy
1766 	template<typename T, qualifier Q>
yzwy(const glm::vec<4,T,Q> & v)1767 	GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
1768 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);
1769 	}
1770 
1771 	// yzwz
1772 	template<typename T, qualifier Q>
yzwz(const glm::vec<4,T,Q> & v)1773 	GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
1774 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);
1775 	}
1776 
1777 	// yzww
1778 	template<typename T, qualifier Q>
yzww(const glm::vec<4,T,Q> & v)1779 	GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
1780 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);
1781 	}
1782 
1783 	// ywxx
1784 	template<typename T, qualifier Q>
ywxx(const glm::vec<4,T,Q> & v)1785 	GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
1786 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);
1787 	}
1788 
1789 	// ywxy
1790 	template<typename T, qualifier Q>
ywxy(const glm::vec<4,T,Q> & v)1791 	GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
1792 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);
1793 	}
1794 
1795 	// ywxz
1796 	template<typename T, qualifier Q>
ywxz(const glm::vec<4,T,Q> & v)1797 	GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
1798 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);
1799 	}
1800 
1801 	// ywxw
1802 	template<typename T, qualifier Q>
ywxw(const glm::vec<4,T,Q> & v)1803 	GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
1804 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);
1805 	}
1806 
1807 	// ywyx
1808 	template<typename T, qualifier Q>
ywyx(const glm::vec<4,T,Q> & v)1809 	GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
1810 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);
1811 	}
1812 
1813 	// ywyy
1814 	template<typename T, qualifier Q>
ywyy(const glm::vec<4,T,Q> & v)1815 	GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
1816 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);
1817 	}
1818 
1819 	// ywyz
1820 	template<typename T, qualifier Q>
ywyz(const glm::vec<4,T,Q> & v)1821 	GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
1822 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);
1823 	}
1824 
1825 	// ywyw
1826 	template<typename T, qualifier Q>
ywyw(const glm::vec<4,T,Q> & v)1827 	GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
1828 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);
1829 	}
1830 
1831 	// ywzx
1832 	template<typename T, qualifier Q>
ywzx(const glm::vec<4,T,Q> & v)1833 	GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
1834 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);
1835 	}
1836 
1837 	// ywzy
1838 	template<typename T, qualifier Q>
ywzy(const glm::vec<4,T,Q> & v)1839 	GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
1840 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);
1841 	}
1842 
1843 	// ywzz
1844 	template<typename T, qualifier Q>
ywzz(const glm::vec<4,T,Q> & v)1845 	GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
1846 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);
1847 	}
1848 
1849 	// ywzw
1850 	template<typename T, qualifier Q>
ywzw(const glm::vec<4,T,Q> & v)1851 	GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
1852 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);
1853 	}
1854 
1855 	// ywwx
1856 	template<typename T, qualifier Q>
ywwx(const glm::vec<4,T,Q> & v)1857 	GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
1858 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);
1859 	}
1860 
1861 	// ywwy
1862 	template<typename T, qualifier Q>
ywwy(const glm::vec<4,T,Q> & v)1863 	GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
1864 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);
1865 	}
1866 
1867 	// ywwz
1868 	template<typename T, qualifier Q>
ywwz(const glm::vec<4,T,Q> & v)1869 	GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
1870 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);
1871 	}
1872 
1873 	// ywww
1874 	template<typename T, qualifier Q>
ywww(const glm::vec<4,T,Q> & v)1875 	GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
1876 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);
1877 	}
1878 
1879 	// zxxx
1880 	template<typename T, qualifier Q>
zxxx(const glm::vec<3,T,Q> & v)1881 	GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
1882 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
1883 	}
1884 
1885 	template<typename T, qualifier Q>
zxxx(const glm::vec<4,T,Q> & v)1886 	GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
1887 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
1888 	}
1889 
1890 	// zxxy
1891 	template<typename T, qualifier Q>
zxxy(const glm::vec<3,T,Q> & v)1892 	GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
1893 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
1894 	}
1895 
1896 	template<typename T, qualifier Q>
zxxy(const glm::vec<4,T,Q> & v)1897 	GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
1898 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
1899 	}
1900 
1901 	// zxxz
1902 	template<typename T, qualifier Q>
zxxz(const glm::vec<3,T,Q> & v)1903 	GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
1904 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
1905 	}
1906 
1907 	template<typename T, qualifier Q>
zxxz(const glm::vec<4,T,Q> & v)1908 	GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
1909 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
1910 	}
1911 
1912 	// zxxw
1913 	template<typename T, qualifier Q>
zxxw(const glm::vec<4,T,Q> & v)1914 	GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
1915 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);
1916 	}
1917 
1918 	// zxyx
1919 	template<typename T, qualifier Q>
zxyx(const glm::vec<3,T,Q> & v)1920 	GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
1921 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
1922 	}
1923 
1924 	template<typename T, qualifier Q>
zxyx(const glm::vec<4,T,Q> & v)1925 	GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
1926 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
1927 	}
1928 
1929 	// zxyy
1930 	template<typename T, qualifier Q>
zxyy(const glm::vec<3,T,Q> & v)1931 	GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
1932 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
1933 	}
1934 
1935 	template<typename T, qualifier Q>
zxyy(const glm::vec<4,T,Q> & v)1936 	GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
1937 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
1938 	}
1939 
1940 	// zxyz
1941 	template<typename T, qualifier Q>
zxyz(const glm::vec<3,T,Q> & v)1942 	GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
1943 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
1944 	}
1945 
1946 	template<typename T, qualifier Q>
zxyz(const glm::vec<4,T,Q> & v)1947 	GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
1948 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
1949 	}
1950 
1951 	// zxyw
1952 	template<typename T, qualifier Q>
zxyw(const glm::vec<4,T,Q> & v)1953 	GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
1954 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);
1955 	}
1956 
1957 	// zxzx
1958 	template<typename T, qualifier Q>
zxzx(const glm::vec<3,T,Q> & v)1959 	GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
1960 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
1961 	}
1962 
1963 	template<typename T, qualifier Q>
zxzx(const glm::vec<4,T,Q> & v)1964 	GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
1965 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
1966 	}
1967 
1968 	// zxzy
1969 	template<typename T, qualifier Q>
zxzy(const glm::vec<3,T,Q> & v)1970 	GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
1971 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
1972 	}
1973 
1974 	template<typename T, qualifier Q>
zxzy(const glm::vec<4,T,Q> & v)1975 	GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
1976 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
1977 	}
1978 
1979 	// zxzz
1980 	template<typename T, qualifier Q>
zxzz(const glm::vec<3,T,Q> & v)1981 	GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
1982 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
1983 	}
1984 
1985 	template<typename T, qualifier Q>
zxzz(const glm::vec<4,T,Q> & v)1986 	GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
1987 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
1988 	}
1989 
1990 	// zxzw
1991 	template<typename T, qualifier Q>
zxzw(const glm::vec<4,T,Q> & v)1992 	GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
1993 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);
1994 	}
1995 
1996 	// zxwx
1997 	template<typename T, qualifier Q>
zxwx(const glm::vec<4,T,Q> & v)1998 	GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
1999 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);
2000 	}
2001 
2002 	// zxwy
2003 	template<typename T, qualifier Q>
zxwy(const glm::vec<4,T,Q> & v)2004 	GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
2005 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);
2006 	}
2007 
2008 	// zxwz
2009 	template<typename T, qualifier Q>
zxwz(const glm::vec<4,T,Q> & v)2010 	GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
2011 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);
2012 	}
2013 
2014 	// zxww
2015 	template<typename T, qualifier Q>
zxww(const glm::vec<4,T,Q> & v)2016 	GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
2017 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);
2018 	}
2019 
2020 	// zyxx
2021 	template<typename T, qualifier Q>
zyxx(const glm::vec<3,T,Q> & v)2022 	GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
2023 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
2024 	}
2025 
2026 	template<typename T, qualifier Q>
zyxx(const glm::vec<4,T,Q> & v)2027 	GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
2028 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
2029 	}
2030 
2031 	// zyxy
2032 	template<typename T, qualifier Q>
zyxy(const glm::vec<3,T,Q> & v)2033 	GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
2034 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
2035 	}
2036 
2037 	template<typename T, qualifier Q>
zyxy(const glm::vec<4,T,Q> & v)2038 	GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
2039 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
2040 	}
2041 
2042 	// zyxz
2043 	template<typename T, qualifier Q>
zyxz(const glm::vec<3,T,Q> & v)2044 	GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
2045 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
2046 	}
2047 
2048 	template<typename T, qualifier Q>
zyxz(const glm::vec<4,T,Q> & v)2049 	GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
2050 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
2051 	}
2052 
2053 	// zyxw
2054 	template<typename T, qualifier Q>
zyxw(const glm::vec<4,T,Q> & v)2055 	GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
2056 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);
2057 	}
2058 
2059 	// zyyx
2060 	template<typename T, qualifier Q>
zyyx(const glm::vec<3,T,Q> & v)2061 	GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
2062 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
2063 	}
2064 
2065 	template<typename T, qualifier Q>
zyyx(const glm::vec<4,T,Q> & v)2066 	GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
2067 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
2068 	}
2069 
2070 	// zyyy
2071 	template<typename T, qualifier Q>
zyyy(const glm::vec<3,T,Q> & v)2072 	GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
2073 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
2074 	}
2075 
2076 	template<typename T, qualifier Q>
zyyy(const glm::vec<4,T,Q> & v)2077 	GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
2078 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
2079 	}
2080 
2081 	// zyyz
2082 	template<typename T, qualifier Q>
zyyz(const glm::vec<3,T,Q> & v)2083 	GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
2084 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
2085 	}
2086 
2087 	template<typename T, qualifier Q>
zyyz(const glm::vec<4,T,Q> & v)2088 	GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
2089 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
2090 	}
2091 
2092 	// zyyw
2093 	template<typename T, qualifier Q>
zyyw(const glm::vec<4,T,Q> & v)2094 	GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
2095 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);
2096 	}
2097 
2098 	// zyzx
2099 	template<typename T, qualifier Q>
zyzx(const glm::vec<3,T,Q> & v)2100 	GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
2101 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
2102 	}
2103 
2104 	template<typename T, qualifier Q>
zyzx(const glm::vec<4,T,Q> & v)2105 	GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
2106 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
2107 	}
2108 
2109 	// zyzy
2110 	template<typename T, qualifier Q>
zyzy(const glm::vec<3,T,Q> & v)2111 	GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
2112 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
2113 	}
2114 
2115 	template<typename T, qualifier Q>
zyzy(const glm::vec<4,T,Q> & v)2116 	GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
2117 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
2118 	}
2119 
2120 	// zyzz
2121 	template<typename T, qualifier Q>
zyzz(const glm::vec<3,T,Q> & v)2122 	GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
2123 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
2124 	}
2125 
2126 	template<typename T, qualifier Q>
zyzz(const glm::vec<4,T,Q> & v)2127 	GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
2128 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
2129 	}
2130 
2131 	// zyzw
2132 	template<typename T, qualifier Q>
zyzw(const glm::vec<4,T,Q> & v)2133 	GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
2134 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);
2135 	}
2136 
2137 	// zywx
2138 	template<typename T, qualifier Q>
zywx(const glm::vec<4,T,Q> & v)2139 	GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
2140 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);
2141 	}
2142 
2143 	// zywy
2144 	template<typename T, qualifier Q>
zywy(const glm::vec<4,T,Q> & v)2145 	GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
2146 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);
2147 	}
2148 
2149 	// zywz
2150 	template<typename T, qualifier Q>
zywz(const glm::vec<4,T,Q> & v)2151 	GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
2152 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);
2153 	}
2154 
2155 	// zyww
2156 	template<typename T, qualifier Q>
zyww(const glm::vec<4,T,Q> & v)2157 	GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
2158 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);
2159 	}
2160 
2161 	// zzxx
2162 	template<typename T, qualifier Q>
zzxx(const glm::vec<3,T,Q> & v)2163 	GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
2164 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
2165 	}
2166 
2167 	template<typename T, qualifier Q>
zzxx(const glm::vec<4,T,Q> & v)2168 	GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
2169 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
2170 	}
2171 
2172 	// zzxy
2173 	template<typename T, qualifier Q>
zzxy(const glm::vec<3,T,Q> & v)2174 	GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
2175 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
2176 	}
2177 
2178 	template<typename T, qualifier Q>
zzxy(const glm::vec<4,T,Q> & v)2179 	GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
2180 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
2181 	}
2182 
2183 	// zzxz
2184 	template<typename T, qualifier Q>
zzxz(const glm::vec<3,T,Q> & v)2185 	GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
2186 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
2187 	}
2188 
2189 	template<typename T, qualifier Q>
zzxz(const glm::vec<4,T,Q> & v)2190 	GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
2191 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
2192 	}
2193 
2194 	// zzxw
2195 	template<typename T, qualifier Q>
zzxw(const glm::vec<4,T,Q> & v)2196 	GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
2197 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);
2198 	}
2199 
2200 	// zzyx
2201 	template<typename T, qualifier Q>
zzyx(const glm::vec<3,T,Q> & v)2202 	GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
2203 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
2204 	}
2205 
2206 	template<typename T, qualifier Q>
zzyx(const glm::vec<4,T,Q> & v)2207 	GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
2208 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
2209 	}
2210 
2211 	// zzyy
2212 	template<typename T, qualifier Q>
zzyy(const glm::vec<3,T,Q> & v)2213 	GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
2214 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
2215 	}
2216 
2217 	template<typename T, qualifier Q>
zzyy(const glm::vec<4,T,Q> & v)2218 	GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
2219 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
2220 	}
2221 
2222 	// zzyz
2223 	template<typename T, qualifier Q>
zzyz(const glm::vec<3,T,Q> & v)2224 	GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
2225 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
2226 	}
2227 
2228 	template<typename T, qualifier Q>
zzyz(const glm::vec<4,T,Q> & v)2229 	GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
2230 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
2231 	}
2232 
2233 	// zzyw
2234 	template<typename T, qualifier Q>
zzyw(const glm::vec<4,T,Q> & v)2235 	GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
2236 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);
2237 	}
2238 
2239 	// zzzx
2240 	template<typename T, qualifier Q>
zzzx(const glm::vec<3,T,Q> & v)2241 	GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
2242 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
2243 	}
2244 
2245 	template<typename T, qualifier Q>
zzzx(const glm::vec<4,T,Q> & v)2246 	GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
2247 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
2248 	}
2249 
2250 	// zzzy
2251 	template<typename T, qualifier Q>
zzzy(const glm::vec<3,T,Q> & v)2252 	GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
2253 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
2254 	}
2255 
2256 	template<typename T, qualifier Q>
zzzy(const glm::vec<4,T,Q> & v)2257 	GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
2258 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
2259 	}
2260 
2261 	// zzzz
2262 	template<typename T, qualifier Q>
zzzz(const glm::vec<3,T,Q> & v)2263 	GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
2264 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
2265 	}
2266 
2267 	template<typename T, qualifier Q>
zzzz(const glm::vec<4,T,Q> & v)2268 	GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
2269 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
2270 	}
2271 
2272 	// zzzw
2273 	template<typename T, qualifier Q>
zzzw(const glm::vec<4,T,Q> & v)2274 	GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
2275 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);
2276 	}
2277 
2278 	// zzwx
2279 	template<typename T, qualifier Q>
zzwx(const glm::vec<4,T,Q> & v)2280 	GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
2281 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);
2282 	}
2283 
2284 	// zzwy
2285 	template<typename T, qualifier Q>
zzwy(const glm::vec<4,T,Q> & v)2286 	GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
2287 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);
2288 	}
2289 
2290 	// zzwz
2291 	template<typename T, qualifier Q>
zzwz(const glm::vec<4,T,Q> & v)2292 	GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
2293 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);
2294 	}
2295 
2296 	// zzww
2297 	template<typename T, qualifier Q>
zzww(const glm::vec<4,T,Q> & v)2298 	GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
2299 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);
2300 	}
2301 
2302 	// zwxx
2303 	template<typename T, qualifier Q>
zwxx(const glm::vec<4,T,Q> & v)2304 	GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
2305 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);
2306 	}
2307 
2308 	// zwxy
2309 	template<typename T, qualifier Q>
zwxy(const glm::vec<4,T,Q> & v)2310 	GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
2311 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);
2312 	}
2313 
2314 	// zwxz
2315 	template<typename T, qualifier Q>
zwxz(const glm::vec<4,T,Q> & v)2316 	GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
2317 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);
2318 	}
2319 
2320 	// zwxw
2321 	template<typename T, qualifier Q>
zwxw(const glm::vec<4,T,Q> & v)2322 	GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
2323 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);
2324 	}
2325 
2326 	// zwyx
2327 	template<typename T, qualifier Q>
zwyx(const glm::vec<4,T,Q> & v)2328 	GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
2329 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);
2330 	}
2331 
2332 	// zwyy
2333 	template<typename T, qualifier Q>
zwyy(const glm::vec<4,T,Q> & v)2334 	GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
2335 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);
2336 	}
2337 
2338 	// zwyz
2339 	template<typename T, qualifier Q>
zwyz(const glm::vec<4,T,Q> & v)2340 	GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
2341 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);
2342 	}
2343 
2344 	// zwyw
2345 	template<typename T, qualifier Q>
zwyw(const glm::vec<4,T,Q> & v)2346 	GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
2347 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);
2348 	}
2349 
2350 	// zwzx
2351 	template<typename T, qualifier Q>
zwzx(const glm::vec<4,T,Q> & v)2352 	GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
2353 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);
2354 	}
2355 
2356 	// zwzy
2357 	template<typename T, qualifier Q>
zwzy(const glm::vec<4,T,Q> & v)2358 	GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
2359 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);
2360 	}
2361 
2362 	// zwzz
2363 	template<typename T, qualifier Q>
zwzz(const glm::vec<4,T,Q> & v)2364 	GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
2365 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);
2366 	}
2367 
2368 	// zwzw
2369 	template<typename T, qualifier Q>
zwzw(const glm::vec<4,T,Q> & v)2370 	GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
2371 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);
2372 	}
2373 
2374 	// zwwx
2375 	template<typename T, qualifier Q>
zwwx(const glm::vec<4,T,Q> & v)2376 	GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
2377 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);
2378 	}
2379 
2380 	// zwwy
2381 	template<typename T, qualifier Q>
zwwy(const glm::vec<4,T,Q> & v)2382 	GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
2383 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);
2384 	}
2385 
2386 	// zwwz
2387 	template<typename T, qualifier Q>
zwwz(const glm::vec<4,T,Q> & v)2388 	GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
2389 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);
2390 	}
2391 
2392 	// zwww
2393 	template<typename T, qualifier Q>
zwww(const glm::vec<4,T,Q> & v)2394 	GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
2395 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);
2396 	}
2397 
2398 	// wxxx
2399 	template<typename T, qualifier Q>
wxxx(const glm::vec<4,T,Q> & v)2400 	GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
2401 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);
2402 	}
2403 
2404 	// wxxy
2405 	template<typename T, qualifier Q>
wxxy(const glm::vec<4,T,Q> & v)2406 	GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
2407 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);
2408 	}
2409 
2410 	// wxxz
2411 	template<typename T, qualifier Q>
wxxz(const glm::vec<4,T,Q> & v)2412 	GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
2413 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);
2414 	}
2415 
2416 	// wxxw
2417 	template<typename T, qualifier Q>
wxxw(const glm::vec<4,T,Q> & v)2418 	GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
2419 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);
2420 	}
2421 
2422 	// wxyx
2423 	template<typename T, qualifier Q>
wxyx(const glm::vec<4,T,Q> & v)2424 	GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
2425 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);
2426 	}
2427 
2428 	// wxyy
2429 	template<typename T, qualifier Q>
wxyy(const glm::vec<4,T,Q> & v)2430 	GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
2431 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);
2432 	}
2433 
2434 	// wxyz
2435 	template<typename T, qualifier Q>
wxyz(const glm::vec<4,T,Q> & v)2436 	GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
2437 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);
2438 	}
2439 
2440 	// wxyw
2441 	template<typename T, qualifier Q>
wxyw(const glm::vec<4,T,Q> & v)2442 	GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
2443 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);
2444 	}
2445 
2446 	// wxzx
2447 	template<typename T, qualifier Q>
wxzx(const glm::vec<4,T,Q> & v)2448 	GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
2449 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);
2450 	}
2451 
2452 	// wxzy
2453 	template<typename T, qualifier Q>
wxzy(const glm::vec<4,T,Q> & v)2454 	GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
2455 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);
2456 	}
2457 
2458 	// wxzz
2459 	template<typename T, qualifier Q>
wxzz(const glm::vec<4,T,Q> & v)2460 	GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
2461 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);
2462 	}
2463 
2464 	// wxzw
2465 	template<typename T, qualifier Q>
wxzw(const glm::vec<4,T,Q> & v)2466 	GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
2467 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);
2468 	}
2469 
2470 	// wxwx
2471 	template<typename T, qualifier Q>
wxwx(const glm::vec<4,T,Q> & v)2472 	GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
2473 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);
2474 	}
2475 
2476 	// wxwy
2477 	template<typename T, qualifier Q>
wxwy(const glm::vec<4,T,Q> & v)2478 	GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
2479 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);
2480 	}
2481 
2482 	// wxwz
2483 	template<typename T, qualifier Q>
wxwz(const glm::vec<4,T,Q> & v)2484 	GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
2485 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);
2486 	}
2487 
2488 	// wxww
2489 	template<typename T, qualifier Q>
wxww(const glm::vec<4,T,Q> & v)2490 	GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
2491 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);
2492 	}
2493 
2494 	// wyxx
2495 	template<typename T, qualifier Q>
wyxx(const glm::vec<4,T,Q> & v)2496 	GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
2497 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);
2498 	}
2499 
2500 	// wyxy
2501 	template<typename T, qualifier Q>
wyxy(const glm::vec<4,T,Q> & v)2502 	GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
2503 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);
2504 	}
2505 
2506 	// wyxz
2507 	template<typename T, qualifier Q>
wyxz(const glm::vec<4,T,Q> & v)2508 	GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
2509 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);
2510 	}
2511 
2512 	// wyxw
2513 	template<typename T, qualifier Q>
wyxw(const glm::vec<4,T,Q> & v)2514 	GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
2515 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);
2516 	}
2517 
2518 	// wyyx
2519 	template<typename T, qualifier Q>
wyyx(const glm::vec<4,T,Q> & v)2520 	GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
2521 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);
2522 	}
2523 
2524 	// wyyy
2525 	template<typename T, qualifier Q>
wyyy(const glm::vec<4,T,Q> & v)2526 	GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
2527 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);
2528 	}
2529 
2530 	// wyyz
2531 	template<typename T, qualifier Q>
wyyz(const glm::vec<4,T,Q> & v)2532 	GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
2533 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);
2534 	}
2535 
2536 	// wyyw
2537 	template<typename T, qualifier Q>
wyyw(const glm::vec<4,T,Q> & v)2538 	GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
2539 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);
2540 	}
2541 
2542 	// wyzx
2543 	template<typename T, qualifier Q>
wyzx(const glm::vec<4,T,Q> & v)2544 	GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
2545 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);
2546 	}
2547 
2548 	// wyzy
2549 	template<typename T, qualifier Q>
wyzy(const glm::vec<4,T,Q> & v)2550 	GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
2551 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);
2552 	}
2553 
2554 	// wyzz
2555 	template<typename T, qualifier Q>
wyzz(const glm::vec<4,T,Q> & v)2556 	GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
2557 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);
2558 	}
2559 
2560 	// wyzw
2561 	template<typename T, qualifier Q>
wyzw(const glm::vec<4,T,Q> & v)2562 	GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
2563 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);
2564 	}
2565 
2566 	// wywx
2567 	template<typename T, qualifier Q>
wywx(const glm::vec<4,T,Q> & v)2568 	GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
2569 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);
2570 	}
2571 
2572 	// wywy
2573 	template<typename T, qualifier Q>
wywy(const glm::vec<4,T,Q> & v)2574 	GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
2575 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);
2576 	}
2577 
2578 	// wywz
2579 	template<typename T, qualifier Q>
wywz(const glm::vec<4,T,Q> & v)2580 	GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
2581 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);
2582 	}
2583 
2584 	// wyww
2585 	template<typename T, qualifier Q>
wyww(const glm::vec<4,T,Q> & v)2586 	GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
2587 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);
2588 	}
2589 
2590 	// wzxx
2591 	template<typename T, qualifier Q>
wzxx(const glm::vec<4,T,Q> & v)2592 	GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
2593 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);
2594 	}
2595 
2596 	// wzxy
2597 	template<typename T, qualifier Q>
wzxy(const glm::vec<4,T,Q> & v)2598 	GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
2599 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);
2600 	}
2601 
2602 	// wzxz
2603 	template<typename T, qualifier Q>
wzxz(const glm::vec<4,T,Q> & v)2604 	GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
2605 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);
2606 	}
2607 
2608 	// wzxw
2609 	template<typename T, qualifier Q>
wzxw(const glm::vec<4,T,Q> & v)2610 	GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
2611 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);
2612 	}
2613 
2614 	// wzyx
2615 	template<typename T, qualifier Q>
wzyx(const glm::vec<4,T,Q> & v)2616 	GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
2617 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);
2618 	}
2619 
2620 	// wzyy
2621 	template<typename T, qualifier Q>
wzyy(const glm::vec<4,T,Q> & v)2622 	GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
2623 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);
2624 	}
2625 
2626 	// wzyz
2627 	template<typename T, qualifier Q>
wzyz(const glm::vec<4,T,Q> & v)2628 	GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
2629 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);
2630 	}
2631 
2632 	// wzyw
2633 	template<typename T, qualifier Q>
wzyw(const glm::vec<4,T,Q> & v)2634 	GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
2635 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);
2636 	}
2637 
2638 	// wzzx
2639 	template<typename T, qualifier Q>
wzzx(const glm::vec<4,T,Q> & v)2640 	GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
2641 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);
2642 	}
2643 
2644 	// wzzy
2645 	template<typename T, qualifier Q>
wzzy(const glm::vec<4,T,Q> & v)2646 	GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
2647 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);
2648 	}
2649 
2650 	// wzzz
2651 	template<typename T, qualifier Q>
wzzz(const glm::vec<4,T,Q> & v)2652 	GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
2653 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);
2654 	}
2655 
2656 	// wzzw
2657 	template<typename T, qualifier Q>
wzzw(const glm::vec<4,T,Q> & v)2658 	GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
2659 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);
2660 	}
2661 
2662 	// wzwx
2663 	template<typename T, qualifier Q>
wzwx(const glm::vec<4,T,Q> & v)2664 	GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
2665 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);
2666 	}
2667 
2668 	// wzwy
2669 	template<typename T, qualifier Q>
wzwy(const glm::vec<4,T,Q> & v)2670 	GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
2671 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);
2672 	}
2673 
2674 	// wzwz
2675 	template<typename T, qualifier Q>
wzwz(const glm::vec<4,T,Q> & v)2676 	GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
2677 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);
2678 	}
2679 
2680 	// wzww
2681 	template<typename T, qualifier Q>
wzww(const glm::vec<4,T,Q> & v)2682 	GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
2683 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);
2684 	}
2685 
2686 	// wwxx
2687 	template<typename T, qualifier Q>
wwxx(const glm::vec<4,T,Q> & v)2688 	GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
2689 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);
2690 	}
2691 
2692 	// wwxy
2693 	template<typename T, qualifier Q>
wwxy(const glm::vec<4,T,Q> & v)2694 	GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
2695 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);
2696 	}
2697 
2698 	// wwxz
2699 	template<typename T, qualifier Q>
wwxz(const glm::vec<4,T,Q> & v)2700 	GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
2701 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);
2702 	}
2703 
2704 	// wwxw
2705 	template<typename T, qualifier Q>
wwxw(const glm::vec<4,T,Q> & v)2706 	GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
2707 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);
2708 	}
2709 
2710 	// wwyx
2711 	template<typename T, qualifier Q>
wwyx(const glm::vec<4,T,Q> & v)2712 	GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
2713 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);
2714 	}
2715 
2716 	// wwyy
2717 	template<typename T, qualifier Q>
wwyy(const glm::vec<4,T,Q> & v)2718 	GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
2719 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);
2720 	}
2721 
2722 	// wwyz
2723 	template<typename T, qualifier Q>
wwyz(const glm::vec<4,T,Q> & v)2724 	GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
2725 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);
2726 	}
2727 
2728 	// wwyw
2729 	template<typename T, qualifier Q>
wwyw(const glm::vec<4,T,Q> & v)2730 	GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
2731 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);
2732 	}
2733 
2734 	// wwzx
2735 	template<typename T, qualifier Q>
wwzx(const glm::vec<4,T,Q> & v)2736 	GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
2737 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);
2738 	}
2739 
2740 	// wwzy
2741 	template<typename T, qualifier Q>
wwzy(const glm::vec<4,T,Q> & v)2742 	GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
2743 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);
2744 	}
2745 
2746 	// wwzz
2747 	template<typename T, qualifier Q>
wwzz(const glm::vec<4,T,Q> & v)2748 	GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
2749 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);
2750 	}
2751 
2752 	// wwzw
2753 	template<typename T, qualifier Q>
wwzw(const glm::vec<4,T,Q> & v)2754 	GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
2755 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);
2756 	}
2757 
2758 	// wwwx
2759 	template<typename T, qualifier Q>
wwwx(const glm::vec<4,T,Q> & v)2760 	GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
2761 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);
2762 	}
2763 
2764 	// wwwy
2765 	template<typename T, qualifier Q>
wwwy(const glm::vec<4,T,Q> & v)2766 	GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
2767 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);
2768 	}
2769 
2770 	// wwwz
2771 	template<typename T, qualifier Q>
wwwz(const glm::vec<4,T,Q> & v)2772 	GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
2773 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);
2774 	}
2775 
2776 	// wwww
2777 	template<typename T, qualifier Q>
wwww(const glm::vec<4,T,Q> & v)2778 	GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {
2779 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);
2780 	}
2781 
2782 }
2783