master
ブランチ master
ShaderPlayground / deps / glm / glm / gtx / vec_swizzle.hpp
74.3 KB、2778行 生 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#endif
20
21namespace glm {
22 // xx
23 template<typename T, qualifier Q>
24 GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
25 return glm::vec<2, T, Q>(v.x, v.x);
26 }
27
28 template<typename T, qualifier Q>
29 GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
30 return glm::vec<2, T, Q>(v.x, v.x);
31 }
32
33 template<typename T, qualifier Q>
34 GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
35 return glm::vec<2, T, Q>(v.x, v.x);
36 }
37
38 template<typename T, qualifier Q>
39 GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
40 return glm::vec<2, T, Q>(v.x, v.x);
41 }
42
43 // xy
44 template<typename T, qualifier Q>
45 GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
46 return glm::vec<2, T, Q>(v.x, v.y);
47 }
48
49 template<typename T, qualifier Q>
50 GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
51 return glm::vec<2, T, Q>(v.x, v.y);
52 }
53
54 template<typename T, qualifier Q>
55 GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
56 return glm::vec<2, T, Q>(v.x, v.y);
57 }
58
59 // xz
60 template<typename T, qualifier Q>
61 GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
62 return glm::vec<2, T, Q>(v.x, v.z);
63 }
64
65 template<typename T, qualifier Q>
66 GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
67 return glm::vec<2, T, Q>(v.x, v.z);
68 }
69
70 // xw
71 template<typename T, qualifier Q>
72 GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
73 return glm::vec<2, T, Q>(v.x, v.w);
74 }
75
76 // yx
77 template<typename T, qualifier Q>
78 GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
79 return glm::vec<2, T, Q>(v.y, v.x);
80 }
81
82 template<typename T, qualifier Q>
83 GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
84 return glm::vec<2, T, Q>(v.y, v.x);
85 }
86
87 template<typename T, qualifier Q>
88 GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
89 return glm::vec<2, T, Q>(v.y, v.x);
90 }
91
92 // yy
93 template<typename T, qualifier Q>
94 GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
95 return glm::vec<2, T, Q>(v.y, v.y);
96 }
97
98 template<typename T, qualifier Q>
99 GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
100 return glm::vec<2, T, Q>(v.y, v.y);
101 }
102
103 template<typename T, qualifier Q>
104 GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
105 return glm::vec<2, T, Q>(v.y, v.y);
106 }
107
108 // yz
109 template<typename T, qualifier Q>
110 GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
111 return glm::vec<2, T, Q>(v.y, v.z);
112 }
113
114 template<typename T, qualifier Q>
115 GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
116 return glm::vec<2, T, Q>(v.y, v.z);
117 }
118
119 // yw
120 template<typename T, qualifier Q>
121 GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
122 return glm::vec<2, T, Q>(v.y, v.w);
123 }
124
125 // zx
126 template<typename T, qualifier Q>
127 GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
128 return glm::vec<2, T, Q>(v.z, v.x);
129 }
130
131 template<typename T, qualifier Q>
132 GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
133 return glm::vec<2, T, Q>(v.z, v.x);
134 }
135
136 // zy
137 template<typename T, qualifier Q>
138 GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
139 return glm::vec<2, T, Q>(v.z, v.y);
140 }
141
142 template<typename T, qualifier Q>
143 GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
144 return glm::vec<2, T, Q>(v.z, v.y);
145 }
146
147 // zz
148 template<typename T, qualifier Q>
149 GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
150 return glm::vec<2, T, Q>(v.z, v.z);
151 }
152
153 template<typename T, qualifier Q>
154 GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
155 return glm::vec<2, T, Q>(v.z, v.z);
156 }
157
158 // zw
159 template<typename T, qualifier Q>
160 GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
161 return glm::vec<2, T, Q>(v.z, v.w);
162 }
163
164 // wx
165 template<typename T, qualifier Q>
166 GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
167 return glm::vec<2, T, Q>(v.w, v.x);
168 }
169
170 // wy
171 template<typename T, qualifier Q>
172 GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
173 return glm::vec<2, T, Q>(v.w, v.y);
174 }
175
176 // wz
177 template<typename T, qualifier Q>
178 GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
179 return glm::vec<2, T, Q>(v.w, v.z);
180 }
181
182 // ww
183 template<typename T, qualifier Q>
184 GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
185 return glm::vec<2, T, Q>(v.w, v.w);
186 }
187
188 // xxx
189 template<typename T, qualifier Q>
190 GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
191 return glm::vec<3, T, Q>(v.x, v.x, v.x);
192 }
193
194 template<typename T, qualifier Q>
195 GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, 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_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, 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_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
206 return glm::vec<3, T, Q>(v.x, v.x, v.x);
207 }
208
209 // xxy
210 template<typename T, qualifier Q>
211 GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
212 return glm::vec<3, T, Q>(v.x, v.x, v.y);
213 }
214
215 template<typename T, qualifier Q>
216 GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, 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_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
222 return glm::vec<3, T, Q>(v.x, v.x, v.y);
223 }
224
225 // xxz
226 template<typename T, qualifier Q>
227 GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
228 return glm::vec<3, T, Q>(v.x, v.x, v.z);
229 }
230
231 template<typename T, qualifier Q>
232 GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
233 return glm::vec<3, T, Q>(v.x, v.x, v.z);
234 }
235
236 // xxw
237 template<typename T, qualifier Q>
238 GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
239 return glm::vec<3, T, Q>(v.x, v.x, v.w);
240 }
241
242 // xyx
243 template<typename T, qualifier Q>
244 GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
245 return glm::vec<3, T, Q>(v.x, v.y, v.x);
246 }
247
248 template<typename T, qualifier Q>
249 GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, 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_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
255 return glm::vec<3, T, Q>(v.x, v.y, v.x);
256 }
257
258 // xyy
259 template<typename T, qualifier Q>
260 GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
261 return glm::vec<3, T, Q>(v.x, v.y, v.y);
262 }
263
264 template<typename T, qualifier Q>
265 GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, 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_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
271 return glm::vec<3, T, Q>(v.x, v.y, v.y);
272 }
273
274 // xyz
275 template<typename T, qualifier Q>
276 GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
277 return glm::vec<3, T, Q>(v.x, v.y, v.z);
278 }
279
280 template<typename T, qualifier Q>
281 GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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_INLINE 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 // xyzz
1039 template<typename T, qualifier Q>
1040 GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
1041 return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
1042 }
1043
1044 template<typename T, qualifier Q>
1045 GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
1046 return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
1047 }
1048
1049 // xyzw
1050 template<typename T, qualifier Q>
1051 GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
1052 return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);
1053 }
1054
1055 // xywx
1056 template<typename T, qualifier Q>
1057 GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
1058 return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);
1059 }
1060
1061 // xywy
1062 template<typename T, qualifier Q>
1063 GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
1064 return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);
1065 }
1066
1067 // xywz
1068 template<typename T, qualifier Q>
1069 GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
1070 return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);
1071 }
1072
1073 // xyww
1074 template<typename T, qualifier Q>
1075 GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
1076 return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);
1077 }
1078
1079 // xzxx
1080 template<typename T, qualifier Q>
1081 GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
1082 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
1083 }
1084
1085 template<typename T, qualifier Q>
1086 GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
1087 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
1088 }
1089
1090 // xzxy
1091 template<typename T, qualifier Q>
1092 GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
1093 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
1094 }
1095
1096 template<typename T, qualifier Q>
1097 GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
1098 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
1099 }
1100
1101 // xzxz
1102 template<typename T, qualifier Q>
1103 GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
1104 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
1105 }
1106
1107 template<typename T, qualifier Q>
1108 GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
1109 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
1110 }
1111
1112 // xzxw
1113 template<typename T, qualifier Q>
1114 GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
1115 return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);
1116 }
1117
1118 // xzyx
1119 template<typename T, qualifier Q>
1120 GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
1121 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
1122 }
1123
1124 template<typename T, qualifier Q>
1125 GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
1126 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
1127 }
1128
1129 // xzyy
1130 template<typename T, qualifier Q>
1131 GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
1132 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
1133 }
1134
1135 template<typename T, qualifier Q>
1136 GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
1137 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
1138 }
1139
1140 // xzyz
1141 template<typename T, qualifier Q>
1142 GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
1143 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
1144 }
1145
1146 template<typename T, qualifier Q>
1147 GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
1148 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
1149 }
1150
1151 // xzyw
1152 template<typename T, qualifier Q>
1153 GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
1154 return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);
1155 }
1156
1157 // xzzx
1158 template<typename T, qualifier Q>
1159 GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
1160 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
1161 }
1162
1163 template<typename T, qualifier Q>
1164 GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
1165 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
1166 }
1167
1168 // xzzy
1169 template<typename T, qualifier Q>
1170 GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
1171 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
1172 }
1173
1174 template<typename T, qualifier Q>
1175 GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
1176 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
1177 }
1178
1179 // xzzz
1180 template<typename T, qualifier Q>
1181 GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
1182 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
1183 }
1184
1185 template<typename T, qualifier Q>
1186 GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
1187 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
1188 }
1189
1190 // xzzw
1191 template<typename T, qualifier Q>
1192 GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
1193 return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);
1194 }
1195
1196 // xzwx
1197 template<typename T, qualifier Q>
1198 GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
1199 return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);
1200 }
1201
1202 // xzwy
1203 template<typename T, qualifier Q>
1204 GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
1205 return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);
1206 }
1207
1208 // xzwz
1209 template<typename T, qualifier Q>
1210 GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
1211 return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);
1212 }
1213
1214 // xzww
1215 template<typename T, qualifier Q>
1216 GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
1217 return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);
1218 }
1219
1220 // xwxx
1221 template<typename T, qualifier Q>
1222 GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
1223 return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);
1224 }
1225
1226 // xwxy
1227 template<typename T, qualifier Q>
1228 GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
1229 return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);
1230 }
1231
1232 // xwxz
1233 template<typename T, qualifier Q>
1234 GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
1235 return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);
1236 }
1237
1238 // xwxw
1239 template<typename T, qualifier Q>
1240 GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
1241 return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);
1242 }
1243
1244 // xwyx
1245 template<typename T, qualifier Q>
1246 GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
1247 return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);
1248 }
1249
1250 // xwyy
1251 template<typename T, qualifier Q>
1252 GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
1253 return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);
1254 }
1255
1256 // xwyz
1257 template<typename T, qualifier Q>
1258 GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
1259 return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);
1260 }
1261
1262 // xwyw
1263 template<typename T, qualifier Q>
1264 GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
1265 return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);
1266 }
1267
1268 // xwzx
1269 template<typename T, qualifier Q>
1270 GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
1271 return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);
1272 }
1273
1274 // xwzy
1275 template<typename T, qualifier Q>
1276 GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
1277 return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);
1278 }
1279
1280 // xwzz
1281 template<typename T, qualifier Q>
1282 GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
1283 return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);
1284 }
1285
1286 // xwzw
1287 template<typename T, qualifier Q>
1288 GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
1289 return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);
1290 }
1291
1292 // xwwx
1293 template<typename T, qualifier Q>
1294 GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
1295 return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);
1296 }
1297
1298 // xwwy
1299 template<typename T, qualifier Q>
1300 GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
1301 return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);
1302 }
1303
1304 // xwwz
1305 template<typename T, qualifier Q>
1306 GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
1307 return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);
1308 }
1309
1310 // xwww
1311 template<typename T, qualifier Q>
1312 GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
1313 return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);
1314 }
1315
1316 // yxxx
1317 template<typename T, qualifier Q>
1318 GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
1319 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1320 }
1321
1322 template<typename T, qualifier Q>
1323 GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
1324 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1325 }
1326
1327 template<typename T, qualifier Q>
1328 GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
1329 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1330 }
1331
1332 // yxxy
1333 template<typename T, qualifier Q>
1334 GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
1335 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1336 }
1337
1338 template<typename T, qualifier Q>
1339 GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
1340 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1341 }
1342
1343 template<typename T, qualifier Q>
1344 GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
1345 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1346 }
1347
1348 // yxxz
1349 template<typename T, qualifier Q>
1350 GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
1351 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
1352 }
1353
1354 template<typename T, qualifier Q>
1355 GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
1356 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
1357 }
1358
1359 // yxxw
1360 template<typename T, qualifier Q>
1361 GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
1362 return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);
1363 }
1364
1365 // yxyx
1366 template<typename T, qualifier Q>
1367 GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
1368 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1369 }
1370
1371 template<typename T, qualifier Q>
1372 GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
1373 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1374 }
1375
1376 template<typename T, qualifier Q>
1377 GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
1378 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1379 }
1380
1381 // yxyy
1382 template<typename T, qualifier Q>
1383 GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
1384 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1385 }
1386
1387 template<typename T, qualifier Q>
1388 GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
1389 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1390 }
1391
1392 template<typename T, qualifier Q>
1393 GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
1394 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1395 }
1396
1397 // yxyz
1398 template<typename T, qualifier Q>
1399 GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
1400 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
1401 }
1402
1403 template<typename T, qualifier Q>
1404 GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
1405 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
1406 }
1407
1408 // yxyw
1409 template<typename T, qualifier Q>
1410 GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
1411 return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);
1412 }
1413
1414 // yxzx
1415 template<typename T, qualifier Q>
1416 GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
1417 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
1418 }
1419
1420 template<typename T, qualifier Q>
1421 GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
1422 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
1423 }
1424
1425 // yxzy
1426 template<typename T, qualifier Q>
1427 GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
1428 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
1429 }
1430
1431 template<typename T, qualifier Q>
1432 GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
1433 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
1434 }
1435
1436 // yxzz
1437 template<typename T, qualifier Q>
1438 GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
1439 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
1440 }
1441
1442 template<typename T, qualifier Q>
1443 GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
1444 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
1445 }
1446
1447 // yxzw
1448 template<typename T, qualifier Q>
1449 GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
1450 return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);
1451 }
1452
1453 // yxwx
1454 template<typename T, qualifier Q>
1455 GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
1456 return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);
1457 }
1458
1459 // yxwy
1460 template<typename T, qualifier Q>
1461 GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
1462 return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);
1463 }
1464
1465 // yxwz
1466 template<typename T, qualifier Q>
1467 GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
1468 return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);
1469 }
1470
1471 // yxww
1472 template<typename T, qualifier Q>
1473 GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
1474 return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);
1475 }
1476
1477 // yyxx
1478 template<typename T, qualifier Q>
1479 GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
1480 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1481 }
1482
1483 template<typename T, qualifier Q>
1484 GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
1485 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1486 }
1487
1488 template<typename T, qualifier Q>
1489 GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
1490 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1491 }
1492
1493 // yyxy
1494 template<typename T, qualifier Q>
1495 GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
1496 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1497 }
1498
1499 template<typename T, qualifier Q>
1500 GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
1501 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1502 }
1503
1504 template<typename T, qualifier Q>
1505 GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
1506 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1507 }
1508
1509 // yyxz
1510 template<typename T, qualifier Q>
1511 GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
1512 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
1513 }
1514
1515 template<typename T, qualifier Q>
1516 GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
1517 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
1518 }
1519
1520 // yyxw
1521 template<typename T, qualifier Q>
1522 GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
1523 return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);
1524 }
1525
1526 // yyyx
1527 template<typename T, qualifier Q>
1528 GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
1529 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1530 }
1531
1532 template<typename T, qualifier Q>
1533 GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
1534 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1535 }
1536
1537 template<typename T, qualifier Q>
1538 GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
1539 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1540 }
1541
1542 // yyyy
1543 template<typename T, qualifier Q>
1544 GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
1545 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1546 }
1547
1548 template<typename T, qualifier Q>
1549 GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
1550 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1551 }
1552
1553 template<typename T, qualifier Q>
1554 GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
1555 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1556 }
1557
1558 // yyyz
1559 template<typename T, qualifier Q>
1560 GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
1561 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
1562 }
1563
1564 template<typename T, qualifier Q>
1565 GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
1566 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
1567 }
1568
1569 // yyyw
1570 template<typename T, qualifier Q>
1571 GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
1572 return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);
1573 }
1574
1575 // yyzx
1576 template<typename T, qualifier Q>
1577 GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
1578 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
1579 }
1580
1581 template<typename T, qualifier Q>
1582 GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
1583 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
1584 }
1585
1586 // yyzy
1587 template<typename T, qualifier Q>
1588 GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
1589 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
1590 }
1591
1592 template<typename T, qualifier Q>
1593 GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
1594 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
1595 }
1596
1597 // yyzz
1598 template<typename T, qualifier Q>
1599 GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
1600 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
1601 }
1602
1603 template<typename T, qualifier Q>
1604 GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
1605 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
1606 }
1607
1608 // yyzw
1609 template<typename T, qualifier Q>
1610 GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
1611 return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);
1612 }
1613
1614 // yywx
1615 template<typename T, qualifier Q>
1616 GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
1617 return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);
1618 }
1619
1620 // yywy
1621 template<typename T, qualifier Q>
1622 GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
1623 return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);
1624 }
1625
1626 // yywz
1627 template<typename T, qualifier Q>
1628 GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
1629 return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);
1630 }
1631
1632 // yyww
1633 template<typename T, qualifier Q>
1634 GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
1635 return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);
1636 }
1637
1638 // yzxx
1639 template<typename T, qualifier Q>
1640 GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
1641 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
1642 }
1643
1644 template<typename T, qualifier Q>
1645 GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
1646 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
1647 }
1648
1649 // yzxy
1650 template<typename T, qualifier Q>
1651 GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
1652 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
1653 }
1654
1655 template<typename T, qualifier Q>
1656 GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
1657 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
1658 }
1659
1660 // yzxz
1661 template<typename T, qualifier Q>
1662 GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
1663 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
1664 }
1665
1666 template<typename T, qualifier Q>
1667 GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
1668 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
1669 }
1670
1671 // yzxw
1672 template<typename T, qualifier Q>
1673 GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
1674 return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);
1675 }
1676
1677 // yzyx
1678 template<typename T, qualifier Q>
1679 GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
1680 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
1681 }
1682
1683 template<typename T, qualifier Q>
1684 GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
1685 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
1686 }
1687
1688 // yzyy
1689 template<typename T, qualifier Q>
1690 GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
1691 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
1692 }
1693
1694 template<typename T, qualifier Q>
1695 GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
1696 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
1697 }
1698
1699 // yzyz
1700 template<typename T, qualifier Q>
1701 GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
1702 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
1703 }
1704
1705 template<typename T, qualifier Q>
1706 GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
1707 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
1708 }
1709
1710 // yzyw
1711 template<typename T, qualifier Q>
1712 GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
1713 return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);
1714 }
1715
1716 // yzzx
1717 template<typename T, qualifier Q>
1718 GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
1719 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
1720 }
1721
1722 template<typename T, qualifier Q>
1723 GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
1724 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
1725 }
1726
1727 // yzzy
1728 template<typename T, qualifier Q>
1729 GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
1730 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
1731 }
1732
1733 template<typename T, qualifier Q>
1734 GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
1735 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
1736 }
1737
1738 // yzzz
1739 template<typename T, qualifier Q>
1740 GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
1741 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
1742 }
1743
1744 template<typename T, qualifier Q>
1745 GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
1746 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
1747 }
1748
1749 // yzzw
1750 template<typename T, qualifier Q>
1751 GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
1752 return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);
1753 }
1754
1755 // yzwx
1756 template<typename T, qualifier Q>
1757 GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
1758 return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);
1759 }
1760
1761 // yzwy
1762 template<typename T, qualifier Q>
1763 GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
1764 return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);
1765 }
1766
1767 // yzwz
1768 template<typename T, qualifier Q>
1769 GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
1770 return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);
1771 }
1772
1773 // yzww
1774 template<typename T, qualifier Q>
1775 GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
1776 return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);
1777 }
1778
1779 // ywxx
1780 template<typename T, qualifier Q>
1781 GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
1782 return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);
1783 }
1784
1785 // ywxy
1786 template<typename T, qualifier Q>
1787 GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
1788 return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);
1789 }
1790
1791 // ywxz
1792 template<typename T, qualifier Q>
1793 GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
1794 return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);
1795 }
1796
1797 // ywxw
1798 template<typename T, qualifier Q>
1799 GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
1800 return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);
1801 }
1802
1803 // ywyx
1804 template<typename T, qualifier Q>
1805 GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
1806 return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);
1807 }
1808
1809 // ywyy
1810 template<typename T, qualifier Q>
1811 GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
1812 return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);
1813 }
1814
1815 // ywyz
1816 template<typename T, qualifier Q>
1817 GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
1818 return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);
1819 }
1820
1821 // ywyw
1822 template<typename T, qualifier Q>
1823 GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
1824 return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);
1825 }
1826
1827 // ywzx
1828 template<typename T, qualifier Q>
1829 GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
1830 return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);
1831 }
1832
1833 // ywzy
1834 template<typename T, qualifier Q>
1835 GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
1836 return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);
1837 }
1838
1839 // ywzz
1840 template<typename T, qualifier Q>
1841 GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
1842 return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);
1843 }
1844
1845 // ywzw
1846 template<typename T, qualifier Q>
1847 GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
1848 return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);
1849 }
1850
1851 // ywwx
1852 template<typename T, qualifier Q>
1853 GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
1854 return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);
1855 }
1856
1857 // ywwy
1858 template<typename T, qualifier Q>
1859 GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
1860 return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);
1861 }
1862
1863 // ywwz
1864 template<typename T, qualifier Q>
1865 GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
1866 return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);
1867 }
1868
1869 // ywww
1870 template<typename T, qualifier Q>
1871 GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
1872 return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);
1873 }
1874
1875 // zxxx
1876 template<typename T, qualifier Q>
1877 GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
1878 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
1879 }
1880
1881 template<typename T, qualifier Q>
1882 GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
1883 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
1884 }
1885
1886 // zxxy
1887 template<typename T, qualifier Q>
1888 GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
1889 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
1890 }
1891
1892 template<typename T, qualifier Q>
1893 GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
1894 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
1895 }
1896
1897 // zxxz
1898 template<typename T, qualifier Q>
1899 GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
1900 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
1901 }
1902
1903 template<typename T, qualifier Q>
1904 GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
1905 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
1906 }
1907
1908 // zxxw
1909 template<typename T, qualifier Q>
1910 GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
1911 return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);
1912 }
1913
1914 // zxyx
1915 template<typename T, qualifier Q>
1916 GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
1917 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
1918 }
1919
1920 template<typename T, qualifier Q>
1921 GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
1922 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
1923 }
1924
1925 // zxyy
1926 template<typename T, qualifier Q>
1927 GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
1928 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
1929 }
1930
1931 template<typename T, qualifier Q>
1932 GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
1933 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
1934 }
1935
1936 // zxyz
1937 template<typename T, qualifier Q>
1938 GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
1939 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
1940 }
1941
1942 template<typename T, qualifier Q>
1943 GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
1944 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
1945 }
1946
1947 // zxyw
1948 template<typename T, qualifier Q>
1949 GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
1950 return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);
1951 }
1952
1953 // zxzx
1954 template<typename T, qualifier Q>
1955 GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
1956 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
1957 }
1958
1959 template<typename T, qualifier Q>
1960 GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
1961 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
1962 }
1963
1964 // zxzy
1965 template<typename T, qualifier Q>
1966 GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
1967 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
1968 }
1969
1970 template<typename T, qualifier Q>
1971 GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
1972 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
1973 }
1974
1975 // zxzz
1976 template<typename T, qualifier Q>
1977 GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
1978 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
1979 }
1980
1981 template<typename T, qualifier Q>
1982 GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
1983 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
1984 }
1985
1986 // zxzw
1987 template<typename T, qualifier Q>
1988 GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
1989 return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);
1990 }
1991
1992 // zxwx
1993 template<typename T, qualifier Q>
1994 GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
1995 return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);
1996 }
1997
1998 // zxwy
1999 template<typename T, qualifier Q>
2000 GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
2001 return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);
2002 }
2003
2004 // zxwz
2005 template<typename T, qualifier Q>
2006 GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
2007 return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);
2008 }
2009
2010 // zxww
2011 template<typename T, qualifier Q>
2012 GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
2013 return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);
2014 }
2015
2016 // zyxx
2017 template<typename T, qualifier Q>
2018 GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
2019 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
2020 }
2021
2022 template<typename T, qualifier Q>
2023 GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
2024 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
2025 }
2026
2027 // zyxy
2028 template<typename T, qualifier Q>
2029 GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
2030 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
2031 }
2032
2033 template<typename T, qualifier Q>
2034 GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
2035 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
2036 }
2037
2038 // zyxz
2039 template<typename T, qualifier Q>
2040 GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
2041 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
2042 }
2043
2044 template<typename T, qualifier Q>
2045 GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
2046 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
2047 }
2048
2049 // zyxw
2050 template<typename T, qualifier Q>
2051 GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
2052 return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);
2053 }
2054
2055 // zyyx
2056 template<typename T, qualifier Q>
2057 GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
2058 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
2059 }
2060
2061 template<typename T, qualifier Q>
2062 GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
2063 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
2064 }
2065
2066 // zyyy
2067 template<typename T, qualifier Q>
2068 GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
2069 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
2070 }
2071
2072 template<typename T, qualifier Q>
2073 GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
2074 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
2075 }
2076
2077 // zyyz
2078 template<typename T, qualifier Q>
2079 GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
2080 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
2081 }
2082
2083 template<typename T, qualifier Q>
2084 GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
2085 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
2086 }
2087
2088 // zyyw
2089 template<typename T, qualifier Q>
2090 GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
2091 return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);
2092 }
2093
2094 // zyzx
2095 template<typename T, qualifier Q>
2096 GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
2097 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
2098 }
2099
2100 template<typename T, qualifier Q>
2101 GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
2102 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
2103 }
2104
2105 // zyzy
2106 template<typename T, qualifier Q>
2107 GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
2108 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
2109 }
2110
2111 template<typename T, qualifier Q>
2112 GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
2113 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
2114 }
2115
2116 // zyzz
2117 template<typename T, qualifier Q>
2118 GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
2119 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
2120 }
2121
2122 template<typename T, qualifier Q>
2123 GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
2124 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
2125 }
2126
2127 // zyzw
2128 template<typename T, qualifier Q>
2129 GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
2130 return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);
2131 }
2132
2133 // zywx
2134 template<typename T, qualifier Q>
2135 GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
2136 return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);
2137 }
2138
2139 // zywy
2140 template<typename T, qualifier Q>
2141 GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
2142 return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);
2143 }
2144
2145 // zywz
2146 template<typename T, qualifier Q>
2147 GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
2148 return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);
2149 }
2150
2151 // zyww
2152 template<typename T, qualifier Q>
2153 GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
2154 return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);
2155 }
2156
2157 // zzxx
2158 template<typename T, qualifier Q>
2159 GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
2160 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
2161 }
2162
2163 template<typename T, qualifier Q>
2164 GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
2165 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
2166 }
2167
2168 // zzxy
2169 template<typename T, qualifier Q>
2170 GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
2171 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
2172 }
2173
2174 template<typename T, qualifier Q>
2175 GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
2176 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
2177 }
2178
2179 // zzxz
2180 template<typename T, qualifier Q>
2181 GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
2182 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
2183 }
2184
2185 template<typename T, qualifier Q>
2186 GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
2187 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
2188 }
2189
2190 // zzxw
2191 template<typename T, qualifier Q>
2192 GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
2193 return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);
2194 }
2195
2196 // zzyx
2197 template<typename T, qualifier Q>
2198 GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
2199 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
2200 }
2201
2202 template<typename T, qualifier Q>
2203 GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
2204 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
2205 }
2206
2207 // zzyy
2208 template<typename T, qualifier Q>
2209 GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
2210 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
2211 }
2212
2213 template<typename T, qualifier Q>
2214 GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
2215 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
2216 }
2217
2218 // zzyz
2219 template<typename T, qualifier Q>
2220 GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
2221 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
2222 }
2223
2224 template<typename T, qualifier Q>
2225 GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
2226 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
2227 }
2228
2229 // zzyw
2230 template<typename T, qualifier Q>
2231 GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
2232 return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);
2233 }
2234
2235 // zzzx
2236 template<typename T, qualifier Q>
2237 GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
2238 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
2239 }
2240
2241 template<typename T, qualifier Q>
2242 GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
2243 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
2244 }
2245
2246 // zzzy
2247 template<typename T, qualifier Q>
2248 GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
2249 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
2250 }
2251
2252 template<typename T, qualifier Q>
2253 GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
2254 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
2255 }
2256
2257 // zzzz
2258 template<typename T, qualifier Q>
2259 GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
2260 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
2261 }
2262
2263 template<typename T, qualifier Q>
2264 GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
2265 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
2266 }
2267
2268 // zzzw
2269 template<typename T, qualifier Q>
2270 GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
2271 return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);
2272 }
2273
2274 // zzwx
2275 template<typename T, qualifier Q>
2276 GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
2277 return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);
2278 }
2279
2280 // zzwy
2281 template<typename T, qualifier Q>
2282 GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
2283 return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);
2284 }
2285
2286 // zzwz
2287 template<typename T, qualifier Q>
2288 GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
2289 return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);
2290 }
2291
2292 // zzww
2293 template<typename T, qualifier Q>
2294 GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
2295 return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);
2296 }
2297
2298 // zwxx
2299 template<typename T, qualifier Q>
2300 GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
2301 return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);
2302 }
2303
2304 // zwxy
2305 template<typename T, qualifier Q>
2306 GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
2307 return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);
2308 }
2309
2310 // zwxz
2311 template<typename T, qualifier Q>
2312 GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
2313 return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);
2314 }
2315
2316 // zwxw
2317 template<typename T, qualifier Q>
2318 GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
2319 return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);
2320 }
2321
2322 // zwyx
2323 template<typename T, qualifier Q>
2324 GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
2325 return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);
2326 }
2327
2328 // zwyy
2329 template<typename T, qualifier Q>
2330 GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
2331 return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);
2332 }
2333
2334 // zwyz
2335 template<typename T, qualifier Q>
2336 GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
2337 return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);
2338 }
2339
2340 // zwyw
2341 template<typename T, qualifier Q>
2342 GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
2343 return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);
2344 }
2345
2346 // zwzx
2347 template<typename T, qualifier Q>
2348 GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
2349 return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);
2350 }
2351
2352 // zwzy
2353 template<typename T, qualifier Q>
2354 GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
2355 return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);
2356 }
2357
2358 // zwzz
2359 template<typename T, qualifier Q>
2360 GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
2361 return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);
2362 }
2363
2364 // zwzw
2365 template<typename T, qualifier Q>
2366 GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
2367 return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);
2368 }
2369
2370 // zwwx
2371 template<typename T, qualifier Q>
2372 GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
2373 return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);
2374 }
2375
2376 // zwwy
2377 template<typename T, qualifier Q>
2378 GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
2379 return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);
2380 }
2381
2382 // zwwz
2383 template<typename T, qualifier Q>
2384 GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
2385 return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);
2386 }
2387
2388 // zwww
2389 template<typename T, qualifier Q>
2390 GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
2391 return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);
2392 }
2393
2394 // wxxx
2395 template<typename T, qualifier Q>
2396 GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
2397 return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);
2398 }
2399
2400 // wxxy
2401 template<typename T, qualifier Q>
2402 GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
2403 return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);
2404 }
2405
2406 // wxxz
2407 template<typename T, qualifier Q>
2408 GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
2409 return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);
2410 }
2411
2412 // wxxw
2413 template<typename T, qualifier Q>
2414 GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
2415 return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);
2416 }
2417
2418 // wxyx
2419 template<typename T, qualifier Q>
2420 GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
2421 return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);
2422 }
2423
2424 // wxyy
2425 template<typename T, qualifier Q>
2426 GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
2427 return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);
2428 }
2429
2430 // wxyz
2431 template<typename T, qualifier Q>
2432 GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
2433 return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);
2434 }
2435
2436 // wxyw
2437 template<typename T, qualifier Q>
2438 GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
2439 return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);
2440 }
2441
2442 // wxzx
2443 template<typename T, qualifier Q>
2444 GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
2445 return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);
2446 }
2447
2448 // wxzy
2449 template<typename T, qualifier Q>
2450 GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
2451 return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);
2452 }
2453
2454 // wxzz
2455 template<typename T, qualifier Q>
2456 GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
2457 return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);
2458 }
2459
2460 // wxzw
2461 template<typename T, qualifier Q>
2462 GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
2463 return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);
2464 }
2465
2466 // wxwx
2467 template<typename T, qualifier Q>
2468 GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
2469 return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);
2470 }
2471
2472 // wxwy
2473 template<typename T, qualifier Q>
2474 GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
2475 return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);
2476 }
2477
2478 // wxwz
2479 template<typename T, qualifier Q>
2480 GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
2481 return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);
2482 }
2483
2484 // wxww
2485 template<typename T, qualifier Q>
2486 GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
2487 return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);
2488 }
2489
2490 // wyxx
2491 template<typename T, qualifier Q>
2492 GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
2493 return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);
2494 }
2495
2496 // wyxy
2497 template<typename T, qualifier Q>
2498 GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
2499 return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);
2500 }
2501
2502 // wyxz
2503 template<typename T, qualifier Q>
2504 GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
2505 return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);
2506 }
2507
2508 // wyxw
2509 template<typename T, qualifier Q>
2510 GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
2511 return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);
2512 }
2513
2514 // wyyx
2515 template<typename T, qualifier Q>
2516 GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
2517 return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);
2518 }
2519
2520 // wyyy
2521 template<typename T, qualifier Q>
2522 GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
2523 return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);
2524 }
2525
2526 // wyyz
2527 template<typename T, qualifier Q>
2528 GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
2529 return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);
2530 }
2531
2532 // wyyw
2533 template<typename T, qualifier Q>
2534 GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
2535 return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);
2536 }
2537
2538 // wyzx
2539 template<typename T, qualifier Q>
2540 GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
2541 return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);
2542 }
2543
2544 // wyzy
2545 template<typename T, qualifier Q>
2546 GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
2547 return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);
2548 }
2549
2550 // wyzz
2551 template<typename T, qualifier Q>
2552 GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
2553 return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);
2554 }
2555
2556 // wyzw
2557 template<typename T, qualifier Q>
2558 GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
2559 return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);
2560 }
2561
2562 // wywx
2563 template<typename T, qualifier Q>
2564 GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
2565 return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);
2566 }
2567
2568 // wywy
2569 template<typename T, qualifier Q>
2570 GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
2571 return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);
2572 }
2573
2574 // wywz
2575 template<typename T, qualifier Q>
2576 GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
2577 return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);
2578 }
2579
2580 // wyww
2581 template<typename T, qualifier Q>
2582 GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
2583 return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);
2584 }
2585
2586 // wzxx
2587 template<typename T, qualifier Q>
2588 GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
2589 return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);
2590 }
2591
2592 // wzxy
2593 template<typename T, qualifier Q>
2594 GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
2595 return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);
2596 }
2597
2598 // wzxz
2599 template<typename T, qualifier Q>
2600 GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
2601 return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);
2602 }
2603
2604 // wzxw
2605 template<typename T, qualifier Q>
2606 GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
2607 return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);
2608 }
2609
2610 // wzyx
2611 template<typename T, qualifier Q>
2612 GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
2613 return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);
2614 }
2615
2616 // wzyy
2617 template<typename T, qualifier Q>
2618 GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
2619 return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);
2620 }
2621
2622 // wzyz
2623 template<typename T, qualifier Q>
2624 GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
2625 return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);
2626 }
2627
2628 // wzyw
2629 template<typename T, qualifier Q>
2630 GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
2631 return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);
2632 }
2633
2634 // wzzx
2635 template<typename T, qualifier Q>
2636 GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
2637 return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);
2638 }
2639
2640 // wzzy
2641 template<typename T, qualifier Q>
2642 GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
2643 return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);
2644 }
2645
2646 // wzzz
2647 template<typename T, qualifier Q>
2648 GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
2649 return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);
2650 }
2651
2652 // wzzw
2653 template<typename T, qualifier Q>
2654 GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
2655 return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);
2656 }
2657
2658 // wzwx
2659 template<typename T, qualifier Q>
2660 GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
2661 return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);
2662 }
2663
2664 // wzwy
2665 template<typename T, qualifier Q>
2666 GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
2667 return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);
2668 }
2669
2670 // wzwz
2671 template<typename T, qualifier Q>
2672 GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
2673 return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);
2674 }
2675
2676 // wzww
2677 template<typename T, qualifier Q>
2678 GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
2679 return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);
2680 }
2681
2682 // wwxx
2683 template<typename T, qualifier Q>
2684 GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
2685 return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);
2686 }
2687
2688 // wwxy
2689 template<typename T, qualifier Q>
2690 GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
2691 return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);
2692 }
2693
2694 // wwxz
2695 template<typename T, qualifier Q>
2696 GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
2697 return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);
2698 }
2699
2700 // wwxw
2701 template<typename T, qualifier Q>
2702 GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
2703 return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);
2704 }
2705
2706 // wwyx
2707 template<typename T, qualifier Q>
2708 GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
2709 return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);
2710 }
2711
2712 // wwyy
2713 template<typename T, qualifier Q>
2714 GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
2715 return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);
2716 }
2717
2718 // wwyz
2719 template<typename T, qualifier Q>
2720 GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
2721 return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);
2722 }
2723
2724 // wwyw
2725 template<typename T, qualifier Q>
2726 GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
2727 return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);
2728 }
2729
2730 // wwzx
2731 template<typename T, qualifier Q>
2732 GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
2733 return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);
2734 }
2735
2736 // wwzy
2737 template<typename T, qualifier Q>
2738 GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
2739 return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);
2740 }
2741
2742 // wwzz
2743 template<typename T, qualifier Q>
2744 GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
2745 return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);
2746 }
2747
2748 // wwzw
2749 template<typename T, qualifier Q>
2750 GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
2751 return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);
2752 }
2753
2754 // wwwx
2755 template<typename T, qualifier Q>
2756 GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
2757 return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);
2758 }
2759
2760 // wwwy
2761 template<typename T, qualifier Q>
2762 GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
2763 return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);
2764 }
2765
2766 // wwwz
2767 template<typename T, qualifier Q>
2768 GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
2769 return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);
2770 }
2771
2772 // wwww
2773 template<typename T, qualifier Q>
2774 GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {
2775 return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);
2776 }
2777
2778}