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