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