| 1.0.0 API documentation

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