17 #ifndef GLM_ENABLE_EXPERIMENTAL
18 # error "GLM: GLM_GTX_vec_swizzle is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
23 template<
typename T, precision P>
24 GLM_INLINE glm::tvec2<T, P> xx(
const glm::tvec1<T, P> &v) {
25 return glm::tvec2<T, P>(v.x, v.x);
28 template<
typename T, precision P>
29 GLM_INLINE glm::tvec2<T, P> xx(
const glm::tvec2<T, P> &v) {
30 return glm::tvec2<T, P>(v.x, v.x);
33 template<
typename T, precision P>
34 GLM_INLINE glm::tvec2<T, P> xx(
const glm::tvec3<T, P> &v) {
35 return glm::tvec2<T, P>(v.x, v.x);
38 template<
typename T, precision P>
39 GLM_INLINE glm::tvec2<T, P> xx(
const glm::tvec4<T, P> &v) {
40 return glm::tvec2<T, P>(v.x, v.x);
44 template<
typename T, precision P>
45 GLM_INLINE glm::tvec2<T, P> xy(
const glm::tvec2<T, P> &v) {
46 return glm::tvec2<T, P>(v.x, v.y);
49 template<
typename T, precision P>
50 GLM_INLINE glm::tvec2<T, P> xy(
const glm::tvec3<T, P> &v) {
51 return glm::tvec2<T, P>(v.x, v.y);
54 template<
typename T, precision P>
55 GLM_INLINE glm::tvec2<T, P> xy(
const glm::tvec4<T, P> &v) {
56 return glm::tvec2<T, P>(v.x, v.y);
60 template<
typename T, precision P>
61 GLM_INLINE glm::tvec2<T, P> xz(
const glm::tvec3<T, P> &v) {
62 return glm::tvec2<T, P>(v.x, v.z);
65 template<
typename T, precision P>
66 GLM_INLINE glm::tvec2<T, P> xz(
const glm::tvec4<T, P> &v) {
67 return glm::tvec2<T, P>(v.x, v.z);
71 template<
typename T, precision P>
72 GLM_INLINE glm::tvec2<T, P> xw(
const glm::tvec4<T, P> &v) {
73 return glm::tvec2<T, P>(v.x, v.w);
77 template<
typename T, precision P>
78 GLM_INLINE glm::tvec2<T, P> yx(
const glm::tvec2<T, P> &v) {
79 return glm::tvec2<T, P>(v.y, v.x);
82 template<
typename T, precision P>
83 GLM_INLINE glm::tvec2<T, P> yx(
const glm::tvec3<T, P> &v) {
84 return glm::tvec2<T, P>(v.y, v.x);
87 template<
typename T, precision P>
88 GLM_INLINE glm::tvec2<T, P> yx(
const glm::tvec4<T, P> &v) {
89 return glm::tvec2<T, P>(v.y, v.x);
93 template<
typename T, precision P>
94 GLM_INLINE glm::tvec2<T, P> yy(
const glm::tvec2<T, P> &v) {
95 return glm::tvec2<T, P>(v.y, v.y);
98 template<
typename T, precision P>
99 GLM_INLINE glm::tvec2<T, P> yy(
const glm::tvec3<T, P> &v) {
100 return glm::tvec2<T, P>(v.y, v.y);
103 template<
typename T, precision P>
104 GLM_INLINE glm::tvec2<T, P> yy(
const glm::tvec4<T, P> &v) {
105 return glm::tvec2<T, P>(v.y, v.y);
109 template<
typename T, precision P>
110 GLM_INLINE glm::tvec2<T, P> yz(
const glm::tvec3<T, P> &v) {
111 return glm::tvec2<T, P>(v.y, v.z);
114 template<
typename T, precision P>
115 GLM_INLINE glm::tvec2<T, P> yz(
const glm::tvec4<T, P> &v) {
116 return glm::tvec2<T, P>(v.y, v.z);
120 template<
typename T, precision P>
121 GLM_INLINE glm::tvec2<T, P> yw(
const glm::tvec4<T, P> &v) {
122 return glm::tvec2<T, P>(v.y, v.w);
126 template<
typename T, precision P>
127 GLM_INLINE glm::tvec2<T, P> zx(
const glm::tvec3<T, P> &v) {
128 return glm::tvec2<T, P>(v.z, v.x);
131 template<
typename T, precision P>
132 GLM_INLINE glm::tvec2<T, P> zx(
const glm::tvec4<T, P> &v) {
133 return glm::tvec2<T, P>(v.z, v.x);
137 template<
typename T, precision P>
138 GLM_INLINE glm::tvec2<T, P> zy(
const glm::tvec3<T, P> &v) {
139 return glm::tvec2<T, P>(v.z, v.y);
142 template<
typename T, precision P>
143 GLM_INLINE glm::tvec2<T, P> zy(
const glm::tvec4<T, P> &v) {
144 return glm::tvec2<T, P>(v.z, v.y);
148 template<
typename T, precision P>
149 GLM_INLINE glm::tvec2<T, P> zz(
const glm::tvec3<T, P> &v) {
150 return glm::tvec2<T, P>(v.z, v.z);
153 template<
typename T, precision P>
154 GLM_INLINE glm::tvec2<T, P> zz(
const glm::tvec4<T, P> &v) {
155 return glm::tvec2<T, P>(v.z, v.z);
159 template<
typename T, precision P>
160 GLM_INLINE glm::tvec2<T, P> zw(
const glm::tvec4<T, P> &v) {
161 return glm::tvec2<T, P>(v.z, v.w);
165 template<
typename T, precision P>
166 GLM_INLINE glm::tvec2<T, P> wx(
const glm::tvec4<T, P> &v) {
167 return glm::tvec2<T, P>(v.w, v.x);
171 template<
typename T, precision P>
172 GLM_INLINE glm::tvec2<T, P> wy(
const glm::tvec4<T, P> &v) {
173 return glm::tvec2<T, P>(v.w, v.y);
177 template<
typename T, precision P>
178 GLM_INLINE glm::tvec2<T, P> wz(
const glm::tvec4<T, P> &v) {
179 return glm::tvec2<T, P>(v.w, v.z);
183 template<
typename T, precision P>
184 GLM_INLINE glm::tvec2<T, P> ww(
const glm::tvec4<T, P> &v) {
185 return glm::tvec2<T, P>(v.w, v.w);
189 template<
typename T, precision P>
190 GLM_INLINE glm::tvec3<T, P> xxx(
const glm::tvec1<T, P> &v) {
191 return glm::tvec3<T, P>(v.x, v.x, v.x);
194 template<
typename T, precision P>
195 GLM_INLINE glm::tvec3<T, P> xxx(
const glm::tvec2<T, P> &v) {
196 return glm::tvec3<T, P>(v.x, v.x, v.x);
199 template<
typename T, precision P>
200 GLM_INLINE glm::tvec3<T, P> xxx(
const glm::tvec3<T, P> &v) {
201 return glm::tvec3<T, P>(v.x, v.x, v.x);
204 template<
typename T, precision P>
205 GLM_INLINE glm::tvec3<T, P> xxx(
const glm::tvec4<T, P> &v) {
206 return glm::tvec3<T, P>(v.x, v.x, v.x);
210 template<
typename T, precision P>
211 GLM_INLINE glm::tvec3<T, P> xxy(
const glm::tvec2<T, P> &v) {
212 return glm::tvec3<T, P>(v.x, v.x, v.y);
215 template<
typename T, precision P>
216 GLM_INLINE glm::tvec3<T, P> xxy(
const glm::tvec3<T, P> &v) {
217 return glm::tvec3<T, P>(v.x, v.x, v.y);
220 template<
typename T, precision P>
221 GLM_INLINE glm::tvec3<T, P> xxy(
const glm::tvec4<T, P> &v) {
222 return glm::tvec3<T, P>(v.x, v.x, v.y);
226 template<
typename T, precision P>
227 GLM_INLINE glm::tvec3<T, P> xxz(
const glm::tvec3<T, P> &v) {
228 return glm::tvec3<T, P>(v.x, v.x, v.z);
231 template<
typename T, precision P>
232 GLM_INLINE glm::tvec3<T, P> xxz(
const glm::tvec4<T, P> &v) {
233 return glm::tvec3<T, P>(v.x, v.x, v.z);
237 template<
typename T, precision P>
238 GLM_INLINE glm::tvec3<T, P> xxw(
const glm::tvec4<T, P> &v) {
239 return glm::tvec3<T, P>(v.x, v.x, v.w);
243 template<
typename T, precision P>
244 GLM_INLINE glm::tvec3<T, P> xyx(
const glm::tvec2<T, P> &v) {
245 return glm::tvec3<T, P>(v.x, v.y, v.x);
248 template<
typename T, precision P>
249 GLM_INLINE glm::tvec3<T, P> xyx(
const glm::tvec3<T, P> &v) {
250 return glm::tvec3<T, P>(v.x, v.y, v.x);
253 template<
typename T, precision P>
254 GLM_INLINE glm::tvec3<T, P> xyx(
const glm::tvec4<T, P> &v) {
255 return glm::tvec3<T, P>(v.x, v.y, v.x);
259 template<
typename T, precision P>
260 GLM_INLINE glm::tvec3<T, P> xyy(
const glm::tvec2<T, P> &v) {
261 return glm::tvec3<T, P>(v.x, v.y, v.y);
264 template<
typename T, precision P>
265 GLM_INLINE glm::tvec3<T, P> xyy(
const glm::tvec3<T, P> &v) {
266 return glm::tvec3<T, P>(v.x, v.y, v.y);
269 template<
typename T, precision P>
270 GLM_INLINE glm::tvec3<T, P> xyy(
const glm::tvec4<T, P> &v) {
271 return glm::tvec3<T, P>(v.x, v.y, v.y);
275 template<
typename T, precision P>
276 GLM_INLINE glm::tvec3<T, P> xyz(
const glm::tvec3<T, P> &v) {
277 return glm::tvec3<T, P>(v.x, v.y, v.z);
280 template<
typename T, precision P>
281 GLM_INLINE glm::tvec3<T, P> xyz(
const glm::tvec4<T, P> &v) {
282 return glm::tvec3<T, P>(v.x, v.y, v.z);
286 template<
typename T, precision P>
287 GLM_INLINE glm::tvec3<T, P> xyw(
const glm::tvec4<T, P> &v) {
288 return glm::tvec3<T, P>(v.x, v.y, v.w);
292 template<
typename T, precision P>
293 GLM_INLINE glm::tvec3<T, P> xzx(
const glm::tvec3<T, P> &v) {
294 return glm::tvec3<T, P>(v.x, v.z, v.x);
297 template<
typename T, precision P>
298 GLM_INLINE glm::tvec3<T, P> xzx(
const glm::tvec4<T, P> &v) {
299 return glm::tvec3<T, P>(v.x, v.z, v.x);
303 template<
typename T, precision P>
304 GLM_INLINE glm::tvec3<T, P> xzy(
const glm::tvec3<T, P> &v) {
305 return glm::tvec3<T, P>(v.x, v.z, v.y);
308 template<
typename T, precision P>
309 GLM_INLINE glm::tvec3<T, P> xzy(
const glm::tvec4<T, P> &v) {
310 return glm::tvec3<T, P>(v.x, v.z, v.y);
314 template<
typename T, precision P>
315 GLM_INLINE glm::tvec3<T, P> xzz(
const glm::tvec3<T, P> &v) {
316 return glm::tvec3<T, P>(v.x, v.z, v.z);
319 template<
typename T, precision P>
320 GLM_INLINE glm::tvec3<T, P> xzz(
const glm::tvec4<T, P> &v) {
321 return glm::tvec3<T, P>(v.x, v.z, v.z);
325 template<
typename T, precision P>
326 GLM_INLINE glm::tvec3<T, P> xzw(
const glm::tvec4<T, P> &v) {
327 return glm::tvec3<T, P>(v.x, v.z, v.w);
331 template<
typename T, precision P>
332 GLM_INLINE glm::tvec3<T, P> xwx(
const glm::tvec4<T, P> &v) {
333 return glm::tvec3<T, P>(v.x, v.w, v.x);
337 template<
typename T, precision P>
338 GLM_INLINE glm::tvec3<T, P> xwy(
const glm::tvec4<T, P> &v) {
339 return glm::tvec3<T, P>(v.x, v.w, v.y);
343 template<
typename T, precision P>
344 GLM_INLINE glm::tvec3<T, P> xwz(
const glm::tvec4<T, P> &v) {
345 return glm::tvec3<T, P>(v.x, v.w, v.z);
349 template<
typename T, precision P>
350 GLM_INLINE glm::tvec3<T, P> xww(
const glm::tvec4<T, P> &v) {
351 return glm::tvec3<T, P>(v.x, v.w, v.w);
355 template<
typename T, precision P>
356 GLM_INLINE glm::tvec3<T, P> yxx(
const glm::tvec2<T, P> &v) {
357 return glm::tvec3<T, P>(v.y, v.x, v.x);
360 template<
typename T, precision P>
361 GLM_INLINE glm::tvec3<T, P> yxx(
const glm::tvec3<T, P> &v) {
362 return glm::tvec3<T, P>(v.y, v.x, v.x);
365 template<
typename T, precision P>
366 GLM_INLINE glm::tvec3<T, P> yxx(
const glm::tvec4<T, P> &v) {
367 return glm::tvec3<T, P>(v.y, v.x, v.x);
371 template<
typename T, precision P>
372 GLM_INLINE glm::tvec3<T, P> yxy(
const glm::tvec2<T, P> &v) {
373 return glm::tvec3<T, P>(v.y, v.x, v.y);
376 template<
typename T, precision P>
377 GLM_INLINE glm::tvec3<T, P> yxy(
const glm::tvec3<T, P> &v) {
378 return glm::tvec3<T, P>(v.y, v.x, v.y);
381 template<
typename T, precision P>
382 GLM_INLINE glm::tvec3<T, P> yxy(
const glm::tvec4<T, P> &v) {
383 return glm::tvec3<T, P>(v.y, v.x, v.y);
387 template<
typename T, precision P>
388 GLM_INLINE glm::tvec3<T, P> yxz(
const glm::tvec3<T, P> &v) {
389 return glm::tvec3<T, P>(v.y, v.x, v.z);
392 template<
typename T, precision P>
393 GLM_INLINE glm::tvec3<T, P> yxz(
const glm::tvec4<T, P> &v) {
394 return glm::tvec3<T, P>(v.y, v.x, v.z);
398 template<
typename T, precision P>
399 GLM_INLINE glm::tvec3<T, P> yxw(
const glm::tvec4<T, P> &v) {
400 return glm::tvec3<T, P>(v.y, v.x, v.w);
404 template<
typename T, precision P>
405 GLM_INLINE glm::tvec3<T, P> yyx(
const glm::tvec2<T, P> &v) {
406 return glm::tvec3<T, P>(v.y, v.y, v.x);
409 template<
typename T, precision P>
410 GLM_INLINE glm::tvec3<T, P> yyx(
const glm::tvec3<T, P> &v) {
411 return glm::tvec3<T, P>(v.y, v.y, v.x);
414 template<
typename T, precision P>
415 GLM_INLINE glm::tvec3<T, P> yyx(
const glm::tvec4<T, P> &v) {
416 return glm::tvec3<T, P>(v.y, v.y, v.x);
420 template<
typename T, precision P>
421 GLM_INLINE glm::tvec3<T, P> yyy(
const glm::tvec2<T, P> &v) {
422 return glm::tvec3<T, P>(v.y, v.y, v.y);
425 template<
typename T, precision P>
426 GLM_INLINE glm::tvec3<T, P> yyy(
const glm::tvec3<T, P> &v) {
427 return glm::tvec3<T, P>(v.y, v.y, v.y);
430 template<
typename T, precision P>
431 GLM_INLINE glm::tvec3<T, P> yyy(
const glm::tvec4<T, P> &v) {
432 return glm::tvec3<T, P>(v.y, v.y, v.y);
436 template<
typename T, precision P>
437 GLM_INLINE glm::tvec3<T, P> yyz(
const glm::tvec3<T, P> &v) {
438 return glm::tvec3<T, P>(v.y, v.y, v.z);
441 template<
typename T, precision P>
442 GLM_INLINE glm::tvec3<T, P> yyz(
const glm::tvec4<T, P> &v) {
443 return glm::tvec3<T, P>(v.y, v.y, v.z);
447 template<
typename T, precision P>
448 GLM_INLINE glm::tvec3<T, P> yyw(
const glm::tvec4<T, P> &v) {
449 return glm::tvec3<T, P>(v.y, v.y, v.w);
453 template<
typename T, precision P>
454 GLM_INLINE glm::tvec3<T, P> yzx(
const glm::tvec3<T, P> &v) {
455 return glm::tvec3<T, P>(v.y, v.z, v.x);
458 template<
typename T, precision P>
459 GLM_INLINE glm::tvec3<T, P> yzx(
const glm::tvec4<T, P> &v) {
460 return glm::tvec3<T, P>(v.y, v.z, v.x);
464 template<
typename T, precision P>
465 GLM_INLINE glm::tvec3<T, P> yzy(
const glm::tvec3<T, P> &v) {
466 return glm::tvec3<T, P>(v.y, v.z, v.y);
469 template<
typename T, precision P>
470 GLM_INLINE glm::tvec3<T, P> yzy(
const glm::tvec4<T, P> &v) {
471 return glm::tvec3<T, P>(v.y, v.z, v.y);
475 template<
typename T, precision P>
476 GLM_INLINE glm::tvec3<T, P> yzz(
const glm::tvec3<T, P> &v) {
477 return glm::tvec3<T, P>(v.y, v.z, v.z);
480 template<
typename T, precision P>
481 GLM_INLINE glm::tvec3<T, P> yzz(
const glm::tvec4<T, P> &v) {
482 return glm::tvec3<T, P>(v.y, v.z, v.z);
486 template<
typename T, precision P>
487 GLM_INLINE glm::tvec3<T, P> yzw(
const glm::tvec4<T, P> &v) {
488 return glm::tvec3<T, P>(v.y, v.z, v.w);
492 template<
typename T, precision P>
493 GLM_INLINE glm::tvec3<T, P> ywx(
const glm::tvec4<T, P> &v) {
494 return glm::tvec3<T, P>(v.y, v.w, v.x);
498 template<
typename T, precision P>
499 GLM_INLINE glm::tvec3<T, P> ywy(
const glm::tvec4<T, P> &v) {
500 return glm::tvec3<T, P>(v.y, v.w, v.y);
504 template<
typename T, precision P>
505 GLM_INLINE glm::tvec3<T, P> ywz(
const glm::tvec4<T, P> &v) {
506 return glm::tvec3<T, P>(v.y, v.w, v.z);
510 template<
typename T, precision P>
511 GLM_INLINE glm::tvec3<T, P> yww(
const glm::tvec4<T, P> &v) {
512 return glm::tvec3<T, P>(v.y, v.w, v.w);
516 template<
typename T, precision P>
517 GLM_INLINE glm::tvec3<T, P> zxx(
const glm::tvec3<T, P> &v) {
518 return glm::tvec3<T, P>(v.z, v.x, v.x);
521 template<
typename T, precision P>
522 GLM_INLINE glm::tvec3<T, P> zxx(
const glm::tvec4<T, P> &v) {
523 return glm::tvec3<T, P>(v.z, v.x, v.x);
527 template<
typename T, precision P>
528 GLM_INLINE glm::tvec3<T, P> zxy(
const glm::tvec3<T, P> &v) {
529 return glm::tvec3<T, P>(v.z, v.x, v.y);
532 template<
typename T, precision P>
533 GLM_INLINE glm::tvec3<T, P> zxy(
const glm::tvec4<T, P> &v) {
534 return glm::tvec3<T, P>(v.z, v.x, v.y);
538 template<
typename T, precision P>
539 GLM_INLINE glm::tvec3<T, P> zxz(
const glm::tvec3<T, P> &v) {
540 return glm::tvec3<T, P>(v.z, v.x, v.z);
543 template<
typename T, precision P>
544 GLM_INLINE glm::tvec3<T, P> zxz(
const glm::tvec4<T, P> &v) {
545 return glm::tvec3<T, P>(v.z, v.x, v.z);
549 template<
typename T, precision P>
550 GLM_INLINE glm::tvec3<T, P> zxw(
const glm::tvec4<T, P> &v) {
551 return glm::tvec3<T, P>(v.z, v.x, v.w);
555 template<
typename T, precision P>
556 GLM_INLINE glm::tvec3<T, P> zyx(
const glm::tvec3<T, P> &v) {
557 return glm::tvec3<T, P>(v.z, v.y, v.x);
560 template<
typename T, precision P>
561 GLM_INLINE glm::tvec3<T, P> zyx(
const glm::tvec4<T, P> &v) {
562 return glm::tvec3<T, P>(v.z, v.y, v.x);
566 template<
typename T, precision P>
567 GLM_INLINE glm::tvec3<T, P> zyy(
const glm::tvec3<T, P> &v) {
568 return glm::tvec3<T, P>(v.z, v.y, v.y);
571 template<
typename T, precision P>
572 GLM_INLINE glm::tvec3<T, P> zyy(
const glm::tvec4<T, P> &v) {
573 return glm::tvec3<T, P>(v.z, v.y, v.y);
577 template<
typename T, precision P>
578 GLM_INLINE glm::tvec3<T, P> zyz(
const glm::tvec3<T, P> &v) {
579 return glm::tvec3<T, P>(v.z, v.y, v.z);
582 template<
typename T, precision P>
583 GLM_INLINE glm::tvec3<T, P> zyz(
const glm::tvec4<T, P> &v) {
584 return glm::tvec3<T, P>(v.z, v.y, v.z);
588 template<
typename T, precision P>
589 GLM_INLINE glm::tvec3<T, P> zyw(
const glm::tvec4<T, P> &v) {
590 return glm::tvec3<T, P>(v.z, v.y, v.w);
594 template<
typename T, precision P>
595 GLM_INLINE glm::tvec3<T, P> zzx(
const glm::tvec3<T, P> &v) {
596 return glm::tvec3<T, P>(v.z, v.z, v.x);
599 template<
typename T, precision P>
600 GLM_INLINE glm::tvec3<T, P> zzx(
const glm::tvec4<T, P> &v) {
601 return glm::tvec3<T, P>(v.z, v.z, v.x);
605 template<
typename T, precision P>
606 GLM_INLINE glm::tvec3<T, P> zzy(
const glm::tvec3<T, P> &v) {
607 return glm::tvec3<T, P>(v.z, v.z, v.y);
610 template<
typename T, precision P>
611 GLM_INLINE glm::tvec3<T, P> zzy(
const glm::tvec4<T, P> &v) {
612 return glm::tvec3<T, P>(v.z, v.z, v.y);
616 template<
typename T, precision P>
617 GLM_INLINE glm::tvec3<T, P> zzz(
const glm::tvec3<T, P> &v) {
618 return glm::tvec3<T, P>(v.z, v.z, v.z);
621 template<
typename T, precision P>
622 GLM_INLINE glm::tvec3<T, P> zzz(
const glm::tvec4<T, P> &v) {
623 return glm::tvec3<T, P>(v.z, v.z, v.z);
627 template<
typename T, precision P>
628 GLM_INLINE glm::tvec3<T, P> zzw(
const glm::tvec4<T, P> &v) {
629 return glm::tvec3<T, P>(v.z, v.z, v.w);
633 template<
typename T, precision P>
634 GLM_INLINE glm::tvec3<T, P> zwx(
const glm::tvec4<T, P> &v) {
635 return glm::tvec3<T, P>(v.z, v.w, v.x);
639 template<
typename T, precision P>
640 GLM_INLINE glm::tvec3<T, P> zwy(
const glm::tvec4<T, P> &v) {
641 return glm::tvec3<T, P>(v.z, v.w, v.y);
645 template<
typename T, precision P>
646 GLM_INLINE glm::tvec3<T, P> zwz(
const glm::tvec4<T, P> &v) {
647 return glm::tvec3<T, P>(v.z, v.w, v.z);
651 template<
typename T, precision P>
652 GLM_INLINE glm::tvec3<T, P> zww(
const glm::tvec4<T, P> &v) {
653 return glm::tvec3<T, P>(v.z, v.w, v.w);
657 template<
typename T, precision P>
658 GLM_INLINE glm::tvec3<T, P> wxx(
const glm::tvec4<T, P> &v) {
659 return glm::tvec3<T, P>(v.w, v.x, v.x);
663 template<
typename T, precision P>
664 GLM_INLINE glm::tvec3<T, P> wxy(
const glm::tvec4<T, P> &v) {
665 return glm::tvec3<T, P>(v.w, v.x, v.y);
669 template<
typename T, precision P>
670 GLM_INLINE glm::tvec3<T, P> wxz(
const glm::tvec4<T, P> &v) {
671 return glm::tvec3<T, P>(v.w, v.x, v.z);
675 template<
typename T, precision P>
676 GLM_INLINE glm::tvec3<T, P> wxw(
const glm::tvec4<T, P> &v) {
677 return glm::tvec3<T, P>(v.w, v.x, v.w);
681 template<
typename T, precision P>
682 GLM_INLINE glm::tvec3<T, P> wyx(
const glm::tvec4<T, P> &v) {
683 return glm::tvec3<T, P>(v.w, v.y, v.x);
687 template<
typename T, precision P>
688 GLM_INLINE glm::tvec3<T, P> wyy(
const glm::tvec4<T, P> &v) {
689 return glm::tvec3<T, P>(v.w, v.y, v.y);
693 template<
typename T, precision P>
694 GLM_INLINE glm::tvec3<T, P> wyz(
const glm::tvec4<T, P> &v) {
695 return glm::tvec3<T, P>(v.w, v.y, v.z);
699 template<
typename T, precision P>
700 GLM_INLINE glm::tvec3<T, P> wyw(
const glm::tvec4<T, P> &v) {
701 return glm::tvec3<T, P>(v.w, v.y, v.w);
705 template<
typename T, precision P>
706 GLM_INLINE glm::tvec3<T, P> wzx(
const glm::tvec4<T, P> &v) {
707 return glm::tvec3<T, P>(v.w, v.z, v.x);
711 template<
typename T, precision P>
712 GLM_INLINE glm::tvec3<T, P> wzy(
const glm::tvec4<T, P> &v) {
713 return glm::tvec3<T, P>(v.w, v.z, v.y);
717 template<
typename T, precision P>
718 GLM_INLINE glm::tvec3<T, P> wzz(
const glm::tvec4<T, P> &v) {
719 return glm::tvec3<T, P>(v.w, v.z, v.z);
723 template<
typename T, precision P>
724 GLM_INLINE glm::tvec3<T, P> wzw(
const glm::tvec4<T, P> &v) {
725 return glm::tvec3<T, P>(v.w, v.z, v.w);
729 template<
typename T, precision P>
730 GLM_INLINE glm::tvec3<T, P> wwx(
const glm::tvec4<T, P> &v) {
731 return glm::tvec3<T, P>(v.w, v.w, v.x);
735 template<
typename T, precision P>
736 GLM_INLINE glm::tvec3<T, P> wwy(
const glm::tvec4<T, P> &v) {
737 return glm::tvec3<T, P>(v.w, v.w, v.y);
741 template<
typename T, precision P>
742 GLM_INLINE glm::tvec3<T, P> wwz(
const glm::tvec4<T, P> &v) {
743 return glm::tvec3<T, P>(v.w, v.w, v.z);
747 template<
typename T, precision P>
748 GLM_INLINE glm::tvec3<T, P> www(
const glm::tvec4<T, P> &v) {
749 return glm::tvec3<T, P>(v.w, v.w, v.w);
753 template<
typename T, precision P>
754 GLM_INLINE glm::tvec4<T, P> xxxx(
const glm::tvec1<T, P> &v) {
755 return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
758 template<
typename T, precision P>
759 GLM_INLINE glm::tvec4<T, P> xxxx(
const glm::tvec2<T, P> &v) {
760 return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
763 template<
typename T, precision P>
764 GLM_INLINE glm::tvec4<T, P> xxxx(
const glm::tvec3<T, P> &v) {
765 return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
768 template<
typename T, precision P>
769 GLM_INLINE glm::tvec4<T, P> xxxx(
const glm::tvec4<T, P> &v) {
770 return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
774 template<
typename T, precision P>
775 GLM_INLINE glm::tvec4<T, P> xxxy(
const glm::tvec2<T, P> &v) {
776 return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
779 template<
typename T, precision P>
780 GLM_INLINE glm::tvec4<T, P> xxxy(
const glm::tvec3<T, P> &v) {
781 return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
784 template<
typename T, precision P>
785 GLM_INLINE glm::tvec4<T, P> xxxy(
const glm::tvec4<T, P> &v) {
786 return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
790 template<
typename T, precision P>
791 GLM_INLINE glm::tvec4<T, P> xxxz(
const glm::tvec3<T, P> &v) {
792 return glm::tvec4<T, P>(v.x, v.x, v.x, v.z);
795 template<
typename T, precision P>
796 GLM_INLINE glm::tvec4<T, P> xxxz(
const glm::tvec4<T, P> &v) {
797 return glm::tvec4<T, P>(v.x, v.x, v.x, v.z);
801 template<
typename T, precision P>
802 GLM_INLINE glm::tvec4<T, P> xxxw(
const glm::tvec4<T, P> &v) {
803 return glm::tvec4<T, P>(v.x, v.x, v.x, v.w);
807 template<
typename T, precision P>
808 GLM_INLINE glm::tvec4<T, P> xxyx(
const glm::tvec2<T, P> &v) {
809 return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
812 template<
typename T, precision P>
813 GLM_INLINE glm::tvec4<T, P> xxyx(
const glm::tvec3<T, P> &v) {
814 return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
817 template<
typename T, precision P>
818 GLM_INLINE glm::tvec4<T, P> xxyx(
const glm::tvec4<T, P> &v) {
819 return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
823 template<
typename T, precision P>
824 GLM_INLINE glm::tvec4<T, P> xxyy(
const glm::tvec2<T, P> &v) {
825 return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
828 template<
typename T, precision P>
829 GLM_INLINE glm::tvec4<T, P> xxyy(
const glm::tvec3<T, P> &v) {
830 return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
833 template<
typename T, precision P>
834 GLM_INLINE glm::tvec4<T, P> xxyy(
const glm::tvec4<T, P> &v) {
835 return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
839 template<
typename T, precision P>
840 GLM_INLINE glm::tvec4<T, P> xxyz(
const glm::tvec3<T, P> &v) {
841 return glm::tvec4<T, P>(v.x, v.x, v.y, v.z);
844 template<
typename T, precision P>
845 GLM_INLINE glm::tvec4<T, P> xxyz(
const glm::tvec4<T, P> &v) {
846 return glm::tvec4<T, P>(v.x, v.x, v.y, v.z);
850 template<
typename T, precision P>
851 GLM_INLINE glm::tvec4<T, P> xxyw(
const glm::tvec4<T, P> &v) {
852 return glm::tvec4<T, P>(v.x, v.x, v.y, v.w);
856 template<
typename T, precision P>
857 GLM_INLINE glm::tvec4<T, P> xxzx(
const glm::tvec3<T, P> &v) {
858 return glm::tvec4<T, P>(v.x, v.x, v.z, v.x);
861 template<
typename T, precision P>
862 GLM_INLINE glm::tvec4<T, P> xxzx(
const glm::tvec4<T, P> &v) {
863 return glm::tvec4<T, P>(v.x, v.x, v.z, v.x);
867 template<
typename T, precision P>
868 GLM_INLINE glm::tvec4<T, P> xxzy(
const glm::tvec3<T, P> &v) {
869 return glm::tvec4<T, P>(v.x, v.x, v.z, v.y);
872 template<
typename T, precision P>
873 GLM_INLINE glm::tvec4<T, P> xxzy(
const glm::tvec4<T, P> &v) {
874 return glm::tvec4<T, P>(v.x, v.x, v.z, v.y);
878 template<
typename T, precision P>
879 GLM_INLINE glm::tvec4<T, P> xxzz(
const glm::tvec3<T, P> &v) {
880 return glm::tvec4<T, P>(v.x, v.x, v.z, v.z);
883 template<
typename T, precision P>
884 GLM_INLINE glm::tvec4<T, P> xxzz(
const glm::tvec4<T, P> &v) {
885 return glm::tvec4<T, P>(v.x, v.x, v.z, v.z);
889 template<
typename T, precision P>
890 GLM_INLINE glm::tvec4<T, P> xxzw(
const glm::tvec4<T, P> &v) {
891 return glm::tvec4<T, P>(v.x, v.x, v.z, v.w);
895 template<
typename T, precision P>
896 GLM_INLINE glm::tvec4<T, P> xxwx(
const glm::tvec4<T, P> &v) {
897 return glm::tvec4<T, P>(v.x, v.x, v.w, v.x);
901 template<
typename T, precision P>
902 GLM_INLINE glm::tvec4<T, P> xxwy(
const glm::tvec4<T, P> &v) {
903 return glm::tvec4<T, P>(v.x, v.x, v.w, v.y);
907 template<
typename T, precision P>
908 GLM_INLINE glm::tvec4<T, P> xxwz(
const glm::tvec4<T, P> &v) {
909 return glm::tvec4<T, P>(v.x, v.x, v.w, v.z);
913 template<
typename T, precision P>
914 GLM_INLINE glm::tvec4<T, P> xxww(
const glm::tvec4<T, P> &v) {
915 return glm::tvec4<T, P>(v.x, v.x, v.w, v.w);
919 template<
typename T, precision P>
920 GLM_INLINE glm::tvec4<T, P> xyxx(
const glm::tvec2<T, P> &v) {
921 return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
924 template<
typename T, precision P>
925 GLM_INLINE glm::tvec4<T, P> xyxx(
const glm::tvec3<T, P> &v) {
926 return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
929 template<
typename T, precision P>
930 GLM_INLINE glm::tvec4<T, P> xyxx(
const glm::tvec4<T, P> &v) {
931 return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
935 template<
typename T, precision P>
936 GLM_INLINE glm::tvec4<T, P> xyxy(
const glm::tvec2<T, P> &v) {
937 return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
940 template<
typename T, precision P>
941 GLM_INLINE glm::tvec4<T, P> xyxy(
const glm::tvec3<T, P> &v) {
942 return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
945 template<
typename T, precision P>
946 GLM_INLINE glm::tvec4<T, P> xyxy(
const glm::tvec4<T, P> &v) {
947 return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
951 template<
typename T, precision P>
952 GLM_INLINE glm::tvec4<T, P> xyxz(
const glm::tvec3<T, P> &v) {
953 return glm::tvec4<T, P>(v.x, v.y, v.x, v.z);
956 template<
typename T, precision P>
957 GLM_INLINE glm::tvec4<T, P> xyxz(
const glm::tvec4<T, P> &v) {
958 return glm::tvec4<T, P>(v.x, v.y, v.x, v.z);
962 template<
typename T, precision P>
963 GLM_INLINE glm::tvec4<T, P> xyxw(
const glm::tvec4<T, P> &v) {
964 return glm::tvec4<T, P>(v.x, v.y, v.x, v.w);
968 template<
typename T, precision P>
969 GLM_INLINE glm::tvec4<T, P> xyyx(
const glm::tvec2<T, P> &v) {
970 return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
973 template<
typename T, precision P>
974 GLM_INLINE glm::tvec4<T, P> xyyx(
const glm::tvec3<T, P> &v) {
975 return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
978 template<
typename T, precision P>
979 GLM_INLINE glm::tvec4<T, P> xyyx(
const glm::tvec4<T, P> &v) {
980 return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
984 template<
typename T, precision P>
985 GLM_INLINE glm::tvec4<T, P> xyyy(
const glm::tvec2<T, P> &v) {
986 return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
989 template<
typename T, precision P>
990 GLM_INLINE glm::tvec4<T, P> xyyy(
const glm::tvec3<T, P> &v) {
991 return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
994 template<
typename T, precision P>
995 GLM_INLINE glm::tvec4<T, P> xyyy(
const glm::tvec4<T, P> &v) {
996 return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
1000 template<
typename T, precision P>
1001 GLM_INLINE glm::tvec4<T, P> xyyz(
const glm::tvec3<T, P> &v) {
1002 return glm::tvec4<T, P>(v.x, v.y, v.y, v.z);
1005 template<
typename T, precision P>
1006 GLM_INLINE glm::tvec4<T, P> xyyz(
const glm::tvec4<T, P> &v) {
1007 return glm::tvec4<T, P>(v.x, v.y, v.y, v.z);
1011 template<
typename T, precision P>
1012 GLM_INLINE glm::tvec4<T, P> xyyw(
const glm::tvec4<T, P> &v) {
1013 return glm::tvec4<T, P>(v.x, v.y, v.y, v.w);
1017 template<
typename T, precision P>
1018 GLM_INLINE glm::tvec4<T, P> xyzx(
const glm::tvec3<T, P> &v) {
1019 return glm::tvec4<T, P>(v.x, v.y, v.z, v.x);
1022 template<
typename T, precision P>
1023 GLM_INLINE glm::tvec4<T, P> xyzx(
const glm::tvec4<T, P> &v) {
1024 return glm::tvec4<T, P>(v.x, v.y, v.z, v.x);
1028 template<
typename T, precision P>
1029 GLM_INLINE glm::tvec4<T, P> xyzy(
const glm::tvec3<T, P> &v) {
1030 return glm::tvec4<T, P>(v.x, v.y, v.z, v.y);
1033 template<
typename T, precision P>
1034 GLM_INLINE glm::tvec4<T, P> xyzy(
const glm::tvec4<T, P> &v) {
1035 return glm::tvec4<T, P>(v.x, v.y, v.z, v.y);
1039 template<
typename T, precision P>
1040 GLM_INLINE glm::tvec4<T, P> xyzz(
const glm::tvec3<T, P> &v) {
1041 return glm::tvec4<T, P>(v.x, v.y, v.z, v.z);
1044 template<
typename T, precision P>
1045 GLM_INLINE glm::tvec4<T, P> xyzz(
const glm::tvec4<T, P> &v) {
1046 return glm::tvec4<T, P>(v.x, v.y, v.z, v.z);
1050 template<
typename T, precision P>
1051 GLM_INLINE glm::tvec4<T, P> xyzw(
const glm::tvec4<T, P> &v) {
1052 return glm::tvec4<T, P>(v.x, v.y, v.z, v.w);
1056 template<
typename T, precision P>
1057 GLM_INLINE glm::tvec4<T, P> xywx(
const glm::tvec4<T, P> &v) {
1058 return glm::tvec4<T, P>(v.x, v.y, v.w, v.x);
1062 template<
typename T, precision P>
1063 GLM_INLINE glm::tvec4<T, P> xywy(
const glm::tvec4<T, P> &v) {
1064 return glm::tvec4<T, P>(v.x, v.y, v.w, v.y);
1068 template<
typename T, precision P>
1069 GLM_INLINE glm::tvec4<T, P> xywz(
const glm::tvec4<T, P> &v) {
1070 return glm::tvec4<T, P>(v.x, v.y, v.w, v.z);
1074 template<
typename T, precision P>
1075 GLM_INLINE glm::tvec4<T, P> xyww(
const glm::tvec4<T, P> &v) {
1076 return glm::tvec4<T, P>(v.x, v.y, v.w, v.w);
1080 template<
typename T, precision P>
1081 GLM_INLINE glm::tvec4<T, P> xzxx(
const glm::tvec3<T, P> &v) {
1082 return glm::tvec4<T, P>(v.x, v.z, v.x, v.x);
1085 template<
typename T, precision P>
1086 GLM_INLINE glm::tvec4<T, P> xzxx(
const glm::tvec4<T, P> &v) {
1087 return glm::tvec4<T, P>(v.x, v.z, v.x, v.x);
1091 template<
typename T, precision P>
1092 GLM_INLINE glm::tvec4<T, P> xzxy(
const glm::tvec3<T, P> &v) {
1093 return glm::tvec4<T, P>(v.x, v.z, v.x, v.y);
1096 template<
typename T, precision P>
1097 GLM_INLINE glm::tvec4<T, P> xzxy(
const glm::tvec4<T, P> &v) {
1098 return glm::tvec4<T, P>(v.x, v.z, v.x, v.y);
1102 template<
typename T, precision P>
1103 GLM_INLINE glm::tvec4<T, P> xzxz(
const glm::tvec3<T, P> &v) {
1104 return glm::tvec4<T, P>(v.x, v.z, v.x, v.z);
1107 template<
typename T, precision P>
1108 GLM_INLINE glm::tvec4<T, P> xzxz(
const glm::tvec4<T, P> &v) {
1109 return glm::tvec4<T, P>(v.x, v.z, v.x, v.z);
1113 template<
typename T, precision P>
1114 GLM_INLINE glm::tvec4<T, P> xzxw(
const glm::tvec4<T, P> &v) {
1115 return glm::tvec4<T, P>(v.x, v.z, v.x, v.w);
1119 template<
typename T, precision P>
1120 GLM_INLINE glm::tvec4<T, P> xzyx(
const glm::tvec3<T, P> &v) {
1121 return glm::tvec4<T, P>(v.x, v.z, v.y, v.x);
1124 template<
typename T, precision P>
1125 GLM_INLINE glm::tvec4<T, P> xzyx(
const glm::tvec4<T, P> &v) {
1126 return glm::tvec4<T, P>(v.x, v.z, v.y, v.x);
1130 template<
typename T, precision P>
1131 GLM_INLINE glm::tvec4<T, P> xzyy(
const glm::tvec3<T, P> &v) {
1132 return glm::tvec4<T, P>(v.x, v.z, v.y, v.y);
1135 template<
typename T, precision P>
1136 GLM_INLINE glm::tvec4<T, P> xzyy(
const glm::tvec4<T, P> &v) {
1137 return glm::tvec4<T, P>(v.x, v.z, v.y, v.y);
1141 template<
typename T, precision P>
1142 GLM_INLINE glm::tvec4<T, P> xzyz(
const glm::tvec3<T, P> &v) {
1143 return glm::tvec4<T, P>(v.x, v.z, v.y, v.z);
1146 template<
typename T, precision P>
1147 GLM_INLINE glm::tvec4<T, P> xzyz(
const glm::tvec4<T, P> &v) {
1148 return glm::tvec4<T, P>(v.x, v.z, v.y, v.z);
1152 template<
typename T, precision P>
1153 GLM_INLINE glm::tvec4<T, P> xzyw(
const glm::tvec4<T, P> &v) {
1154 return glm::tvec4<T, P>(v.x, v.z, v.y, v.w);
1158 template<
typename T, precision P>
1159 GLM_INLINE glm::tvec4<T, P> xzzx(
const glm::tvec3<T, P> &v) {
1160 return glm::tvec4<T, P>(v.x, v.z, v.z, v.x);
1163 template<
typename T, precision P>
1164 GLM_INLINE glm::tvec4<T, P> xzzx(
const glm::tvec4<T, P> &v) {
1165 return glm::tvec4<T, P>(v.x, v.z, v.z, v.x);
1169 template<
typename T, precision P>
1170 GLM_INLINE glm::tvec4<T, P> xzzy(
const glm::tvec3<T, P> &v) {
1171 return glm::tvec4<T, P>(v.x, v.z, v.z, v.y);
1174 template<
typename T, precision P>
1175 GLM_INLINE glm::tvec4<T, P> xzzy(
const glm::tvec4<T, P> &v) {
1176 return glm::tvec4<T, P>(v.x, v.z, v.z, v.y);
1180 template<
typename T, precision P>
1181 GLM_INLINE glm::tvec4<T, P> xzzz(
const glm::tvec3<T, P> &v) {
1182 return glm::tvec4<T, P>(v.x, v.z, v.z, v.z);
1185 template<
typename T, precision P>
1186 GLM_INLINE glm::tvec4<T, P> xzzz(
const glm::tvec4<T, P> &v) {
1187 return glm::tvec4<T, P>(v.x, v.z, v.z, v.z);
1191 template<
typename T, precision P>
1192 GLM_INLINE glm::tvec4<T, P> xzzw(
const glm::tvec4<T, P> &v) {
1193 return glm::tvec4<T, P>(v.x, v.z, v.z, v.w);
1197 template<
typename T, precision P>
1198 GLM_INLINE glm::tvec4<T, P> xzwx(
const glm::tvec4<T, P> &v) {
1199 return glm::tvec4<T, P>(v.x, v.z, v.w, v.x);
1203 template<
typename T, precision P>
1204 GLM_INLINE glm::tvec4<T, P> xzwy(
const glm::tvec4<T, P> &v) {
1205 return glm::tvec4<T, P>(v.x, v.z, v.w, v.y);
1209 template<
typename T, precision P>
1210 GLM_INLINE glm::tvec4<T, P> xzwz(
const glm::tvec4<T, P> &v) {
1211 return glm::tvec4<T, P>(v.x, v.z, v.w, v.z);
1215 template<
typename T, precision P>
1216 GLM_INLINE glm::tvec4<T, P> xzww(
const glm::tvec4<T, P> &v) {
1217 return glm::tvec4<T, P>(v.x, v.z, v.w, v.w);
1221 template<
typename T, precision P>
1222 GLM_INLINE glm::tvec4<T, P> xwxx(
const glm::tvec4<T, P> &v) {
1223 return glm::tvec4<T, P>(v.x, v.w, v.x, v.x);
1227 template<
typename T, precision P>
1228 GLM_INLINE glm::tvec4<T, P> xwxy(
const glm::tvec4<T, P> &v) {
1229 return glm::tvec4<T, P>(v.x, v.w, v.x, v.y);
1233 template<
typename T, precision P>
1234 GLM_INLINE glm::tvec4<T, P> xwxz(
const glm::tvec4<T, P> &v) {
1235 return glm::tvec4<T, P>(v.x, v.w, v.x, v.z);
1239 template<
typename T, precision P>
1240 GLM_INLINE glm::tvec4<T, P> xwxw(
const glm::tvec4<T, P> &v) {
1241 return glm::tvec4<T, P>(v.x, v.w, v.x, v.w);
1245 template<
typename T, precision P>
1246 GLM_INLINE glm::tvec4<T, P> xwyx(
const glm::tvec4<T, P> &v) {
1247 return glm::tvec4<T, P>(v.x, v.w, v.y, v.x);
1251 template<
typename T, precision P>
1252 GLM_INLINE glm::tvec4<T, P> xwyy(
const glm::tvec4<T, P> &v) {
1253 return glm::tvec4<T, P>(v.x, v.w, v.y, v.y);
1257 template<
typename T, precision P>
1258 GLM_INLINE glm::tvec4<T, P> xwyz(
const glm::tvec4<T, P> &v) {
1259 return glm::tvec4<T, P>(v.x, v.w, v.y, v.z);
1263 template<
typename T, precision P>
1264 GLM_INLINE glm::tvec4<T, P> xwyw(
const glm::tvec4<T, P> &v) {
1265 return glm::tvec4<T, P>(v.x, v.w, v.y, v.w);
1269 template<
typename T, precision P>
1270 GLM_INLINE glm::tvec4<T, P> xwzx(
const glm::tvec4<T, P> &v) {
1271 return glm::tvec4<T, P>(v.x, v.w, v.z, v.x);
1275 template<
typename T, precision P>
1276 GLM_INLINE glm::tvec4<T, P> xwzy(
const glm::tvec4<T, P> &v) {
1277 return glm::tvec4<T, P>(v.x, v.w, v.z, v.y);
1281 template<
typename T, precision P>
1282 GLM_INLINE glm::tvec4<T, P> xwzz(
const glm::tvec4<T, P> &v) {
1283 return glm::tvec4<T, P>(v.x, v.w, v.z, v.z);
1287 template<
typename T, precision P>
1288 GLM_INLINE glm::tvec4<T, P> xwzw(
const glm::tvec4<T, P> &v) {
1289 return glm::tvec4<T, P>(v.x, v.w, v.z, v.w);
1293 template<
typename T, precision P>
1294 GLM_INLINE glm::tvec4<T, P> xwwx(
const glm::tvec4<T, P> &v) {
1295 return glm::tvec4<T, P>(v.x, v.w, v.w, v.x);
1299 template<
typename T, precision P>
1300 GLM_INLINE glm::tvec4<T, P> xwwy(
const glm::tvec4<T, P> &v) {
1301 return glm::tvec4<T, P>(v.x, v.w, v.w, v.y);
1305 template<
typename T, precision P>
1306 GLM_INLINE glm::tvec4<T, P> xwwz(
const glm::tvec4<T, P> &v) {
1307 return glm::tvec4<T, P>(v.x, v.w, v.w, v.z);
1311 template<
typename T, precision P>
1312 GLM_INLINE glm::tvec4<T, P> xwww(
const glm::tvec4<T, P> &v) {
1313 return glm::tvec4<T, P>(v.x, v.w, v.w, v.w);
1317 template<
typename T, precision P>
1318 GLM_INLINE glm::tvec4<T, P> yxxx(
const glm::tvec2<T, P> &v) {
1319 return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
1322 template<
typename T, precision P>
1323 GLM_INLINE glm::tvec4<T, P> yxxx(
const glm::tvec3<T, P> &v) {
1324 return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
1327 template<
typename T, precision P>
1328 GLM_INLINE glm::tvec4<T, P> yxxx(
const glm::tvec4<T, P> &v) {
1329 return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
1333 template<
typename T, precision P>
1334 GLM_INLINE glm::tvec4<T, P> yxxy(
const glm::tvec2<T, P> &v) {
1335 return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
1338 template<
typename T, precision P>
1339 GLM_INLINE glm::tvec4<T, P> yxxy(
const glm::tvec3<T, P> &v) {
1340 return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
1343 template<
typename T, precision P>
1344 GLM_INLINE glm::tvec4<T, P> yxxy(
const glm::tvec4<T, P> &v) {
1345 return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
1349 template<
typename T, precision P>
1350 GLM_INLINE glm::tvec4<T, P> yxxz(
const glm::tvec3<T, P> &v) {
1351 return glm::tvec4<T, P>(v.y, v.x, v.x, v.z);
1354 template<
typename T, precision P>
1355 GLM_INLINE glm::tvec4<T, P> yxxz(
const glm::tvec4<T, P> &v) {
1356 return glm::tvec4<T, P>(v.y, v.x, v.x, v.z);
1360 template<
typename T, precision P>
1361 GLM_INLINE glm::tvec4<T, P> yxxw(
const glm::tvec4<T, P> &v) {
1362 return glm::tvec4<T, P>(v.y, v.x, v.x, v.w);
1366 template<
typename T, precision P>
1367 GLM_INLINE glm::tvec4<T, P> yxyx(
const glm::tvec2<T, P> &v) {
1368 return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
1371 template<
typename T, precision P>
1372 GLM_INLINE glm::tvec4<T, P> yxyx(
const glm::tvec3<T, P> &v) {
1373 return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
1376 template<
typename T, precision P>
1377 GLM_INLINE glm::tvec4<T, P> yxyx(
const glm::tvec4<T, P> &v) {
1378 return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
1382 template<
typename T, precision P>
1383 GLM_INLINE glm::tvec4<T, P> yxyy(
const glm::tvec2<T, P> &v) {
1384 return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
1387 template<
typename T, precision P>
1388 GLM_INLINE glm::tvec4<T, P> yxyy(
const glm::tvec3<T, P> &v) {
1389 return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
1392 template<
typename T, precision P>
1393 GLM_INLINE glm::tvec4<T, P> yxyy(
const glm::tvec4<T, P> &v) {
1394 return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
1398 template<
typename T, precision P>
1399 GLM_INLINE glm::tvec4<T, P> yxyz(
const glm::tvec3<T, P> &v) {
1400 return glm::tvec4<T, P>(v.y, v.x, v.y, v.z);
1403 template<
typename T, precision P>
1404 GLM_INLINE glm::tvec4<T, P> yxyz(
const glm::tvec4<T, P> &v) {
1405 return glm::tvec4<T, P>(v.y, v.x, v.y, v.z);
1409 template<
typename T, precision P>
1410 GLM_INLINE glm::tvec4<T, P> yxyw(
const glm::tvec4<T, P> &v) {
1411 return glm::tvec4<T, P>(v.y, v.x, v.y, v.w);
1415 template<
typename T, precision P>
1416 GLM_INLINE glm::tvec4<T, P> yxzx(
const glm::tvec3<T, P> &v) {
1417 return glm::tvec4<T, P>(v.y, v.x, v.z, v.x);
1420 template<
typename T, precision P>
1421 GLM_INLINE glm::tvec4<T, P> yxzx(
const glm::tvec4<T, P> &v) {
1422 return glm::tvec4<T, P>(v.y, v.x, v.z, v.x);
1426 template<
typename T, precision P>
1427 GLM_INLINE glm::tvec4<T, P> yxzy(
const glm::tvec3<T, P> &v) {
1428 return glm::tvec4<T, P>(v.y, v.x, v.z, v.y);
1431 template<
typename T, precision P>
1432 GLM_INLINE glm::tvec4<T, P> yxzy(
const glm::tvec4<T, P> &v) {
1433 return glm::tvec4<T, P>(v.y, v.x, v.z, v.y);
1437 template<
typename T, precision P>
1438 GLM_INLINE glm::tvec4<T, P> yxzz(
const glm::tvec3<T, P> &v) {
1439 return glm::tvec4<T, P>(v.y, v.x, v.z, v.z);
1442 template<
typename T, precision P>
1443 GLM_INLINE glm::tvec4<T, P> yxzz(
const glm::tvec4<T, P> &v) {
1444 return glm::tvec4<T, P>(v.y, v.x, v.z, v.z);
1448 template<
typename T, precision P>
1449 GLM_INLINE glm::tvec4<T, P> yxzw(
const glm::tvec4<T, P> &v) {
1450 return glm::tvec4<T, P>(v.y, v.x, v.z, v.w);
1454 template<
typename T, precision P>
1455 GLM_INLINE glm::tvec4<T, P> yxwx(
const glm::tvec4<T, P> &v) {
1456 return glm::tvec4<T, P>(v.y, v.x, v.w, v.x);
1460 template<
typename T, precision P>
1461 GLM_INLINE glm::tvec4<T, P> yxwy(
const glm::tvec4<T, P> &v) {
1462 return glm::tvec4<T, P>(v.y, v.x, v.w, v.y);
1466 template<
typename T, precision P>
1467 GLM_INLINE glm::tvec4<T, P> yxwz(
const glm::tvec4<T, P> &v) {
1468 return glm::tvec4<T, P>(v.y, v.x, v.w, v.z);
1472 template<
typename T, precision P>
1473 GLM_INLINE glm::tvec4<T, P> yxww(
const glm::tvec4<T, P> &v) {
1474 return glm::tvec4<T, P>(v.y, v.x, v.w, v.w);
1478 template<
typename T, precision P>
1479 GLM_INLINE glm::tvec4<T, P> yyxx(
const glm::tvec2<T, P> &v) {
1480 return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
1483 template<
typename T, precision P>
1484 GLM_INLINE glm::tvec4<T, P> yyxx(
const glm::tvec3<T, P> &v) {
1485 return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
1488 template<
typename T, precision P>
1489 GLM_INLINE glm::tvec4<T, P> yyxx(
const glm::tvec4<T, P> &v) {
1490 return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
1494 template<
typename T, precision P>
1495 GLM_INLINE glm::tvec4<T, P> yyxy(
const glm::tvec2<T, P> &v) {
1496 return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
1499 template<
typename T, precision P>
1500 GLM_INLINE glm::tvec4<T, P> yyxy(
const glm::tvec3<T, P> &v) {
1501 return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
1504 template<
typename T, precision P>
1505 GLM_INLINE glm::tvec4<T, P> yyxy(
const glm::tvec4<T, P> &v) {
1506 return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
1510 template<
typename T, precision P>
1511 GLM_INLINE glm::tvec4<T, P> yyxz(
const glm::tvec3<T, P> &v) {
1512 return glm::tvec4<T, P>(v.y, v.y, v.x, v.z);
1515 template<
typename T, precision P>
1516 GLM_INLINE glm::tvec4<T, P> yyxz(
const glm::tvec4<T, P> &v) {
1517 return glm::tvec4<T, P>(v.y, v.y, v.x, v.z);
1521 template<
typename T, precision P>
1522 GLM_INLINE glm::tvec4<T, P> yyxw(
const glm::tvec4<T, P> &v) {
1523 return glm::tvec4<T, P>(v.y, v.y, v.x, v.w);
1527 template<
typename T, precision P>
1528 GLM_INLINE glm::tvec4<T, P> yyyx(
const glm::tvec2<T, P> &v) {
1529 return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
1532 template<
typename T, precision P>
1533 GLM_INLINE glm::tvec4<T, P> yyyx(
const glm::tvec3<T, P> &v) {
1534 return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
1537 template<
typename T, precision P>
1538 GLM_INLINE glm::tvec4<T, P> yyyx(
const glm::tvec4<T, P> &v) {
1539 return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
1543 template<
typename T, precision P>
1544 GLM_INLINE glm::tvec4<T, P> yyyy(
const glm::tvec2<T, P> &v) {
1545 return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
1548 template<
typename T, precision P>
1549 GLM_INLINE glm::tvec4<T, P> yyyy(
const glm::tvec3<T, P> &v) {
1550 return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
1553 template<
typename T, precision P>
1554 GLM_INLINE glm::tvec4<T, P> yyyy(
const glm::tvec4<T, P> &v) {
1555 return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
1559 template<
typename T, precision P>
1560 GLM_INLINE glm::tvec4<T, P> yyyz(
const glm::tvec3<T, P> &v) {
1561 return glm::tvec4<T, P>(v.y, v.y, v.y, v.z);
1564 template<
typename T, precision P>
1565 GLM_INLINE glm::tvec4<T, P> yyyz(
const glm::tvec4<T, P> &v) {
1566 return glm::tvec4<T, P>(v.y, v.y, v.y, v.z);
1570 template<
typename T, precision P>
1571 GLM_INLINE glm::tvec4<T, P> yyyw(
const glm::tvec4<T, P> &v) {
1572 return glm::tvec4<T, P>(v.y, v.y, v.y, v.w);
1576 template<
typename T, precision P>
1577 GLM_INLINE glm::tvec4<T, P> yyzx(
const glm::tvec3<T, P> &v) {
1578 return glm::tvec4<T, P>(v.y, v.y, v.z, v.x);
1581 template<
typename T, precision P>
1582 GLM_INLINE glm::tvec4<T, P> yyzx(
const glm::tvec4<T, P> &v) {
1583 return glm::tvec4<T, P>(v.y, v.y, v.z, v.x);
1587 template<
typename T, precision P>
1588 GLM_INLINE glm::tvec4<T, P> yyzy(
const glm::tvec3<T, P> &v) {
1589 return glm::tvec4<T, P>(v.y, v.y, v.z, v.y);
1592 template<
typename T, precision P>
1593 GLM_INLINE glm::tvec4<T, P> yyzy(
const glm::tvec4<T, P> &v) {
1594 return glm::tvec4<T, P>(v.y, v.y, v.z, v.y);
1598 template<
typename T, precision P>
1599 GLM_INLINE glm::tvec4<T, P> yyzz(
const glm::tvec3<T, P> &v) {
1600 return glm::tvec4<T, P>(v.y, v.y, v.z, v.z);
1603 template<
typename T, precision P>
1604 GLM_INLINE glm::tvec4<T, P> yyzz(
const glm::tvec4<T, P> &v) {
1605 return glm::tvec4<T, P>(v.y, v.y, v.z, v.z);
1609 template<
typename T, precision P>
1610 GLM_INLINE glm::tvec4<T, P> yyzw(
const glm::tvec4<T, P> &v) {
1611 return glm::tvec4<T, P>(v.y, v.y, v.z, v.w);
1615 template<
typename T, precision P>
1616 GLM_INLINE glm::tvec4<T, P> yywx(
const glm::tvec4<T, P> &v) {
1617 return glm::tvec4<T, P>(v.y, v.y, v.w, v.x);
1621 template<
typename T, precision P>
1622 GLM_INLINE glm::tvec4<T, P> yywy(
const glm::tvec4<T, P> &v) {
1623 return glm::tvec4<T, P>(v.y, v.y, v.w, v.y);
1627 template<
typename T, precision P>
1628 GLM_INLINE glm::tvec4<T, P> yywz(
const glm::tvec4<T, P> &v) {
1629 return glm::tvec4<T, P>(v.y, v.y, v.w, v.z);
1633 template<
typename T, precision P>
1634 GLM_INLINE glm::tvec4<T, P> yyww(
const glm::tvec4<T, P> &v) {
1635 return glm::tvec4<T, P>(v.y, v.y, v.w, v.w);
1639 template<
typename T, precision P>
1640 GLM_INLINE glm::tvec4<T, P> yzxx(
const glm::tvec3<T, P> &v) {
1641 return glm::tvec4<T, P>(v.y, v.z, v.x, v.x);
1644 template<
typename T, precision P>
1645 GLM_INLINE glm::tvec4<T, P> yzxx(
const glm::tvec4<T, P> &v) {
1646 return glm::tvec4<T, P>(v.y, v.z, v.x, v.x);
1650 template<
typename T, precision P>
1651 GLM_INLINE glm::tvec4<T, P> yzxy(
const glm::tvec3<T, P> &v) {
1652 return glm::tvec4<T, P>(v.y, v.z, v.x, v.y);
1655 template<
typename T, precision P>
1656 GLM_INLINE glm::tvec4<T, P> yzxy(
const glm::tvec4<T, P> &v) {
1657 return glm::tvec4<T, P>(v.y, v.z, v.x, v.y);
1661 template<
typename T, precision P>
1662 GLM_INLINE glm::tvec4<T, P> yzxz(
const glm::tvec3<T, P> &v) {
1663 return glm::tvec4<T, P>(v.y, v.z, v.x, v.z);
1666 template<
typename T, precision P>
1667 GLM_INLINE glm::tvec4<T, P> yzxz(
const glm::tvec4<T, P> &v) {
1668 return glm::tvec4<T, P>(v.y, v.z, v.x, v.z);
1672 template<
typename T, precision P>
1673 GLM_INLINE glm::tvec4<T, P> yzxw(
const glm::tvec4<T, P> &v) {
1674 return glm::tvec4<T, P>(v.y, v.z, v.x, v.w);
1678 template<
typename T, precision P>
1679 GLM_INLINE glm::tvec4<T, P> yzyx(
const glm::tvec3<T, P> &v) {
1680 return glm::tvec4<T, P>(v.y, v.z, v.y, v.x);
1683 template<
typename T, precision P>
1684 GLM_INLINE glm::tvec4<T, P> yzyx(
const glm::tvec4<T, P> &v) {
1685 return glm::tvec4<T, P>(v.y, v.z, v.y, v.x);
1689 template<
typename T, precision P>
1690 GLM_INLINE glm::tvec4<T, P> yzyy(
const glm::tvec3<T, P> &v) {
1691 return glm::tvec4<T, P>(v.y, v.z, v.y, v.y);
1694 template<
typename T, precision P>
1695 GLM_INLINE glm::tvec4<T, P> yzyy(
const glm::tvec4<T, P> &v) {
1696 return glm::tvec4<T, P>(v.y, v.z, v.y, v.y);
1700 template<
typename T, precision P>
1701 GLM_INLINE glm::tvec4<T, P> yzyz(
const glm::tvec3<T, P> &v) {
1702 return glm::tvec4<T, P>(v.y, v.z, v.y, v.z);
1705 template<
typename T, precision P>
1706 GLM_INLINE glm::tvec4<T, P> yzyz(
const glm::tvec4<T, P> &v) {
1707 return glm::tvec4<T, P>(v.y, v.z, v.y, v.z);
1711 template<
typename T, precision P>
1712 GLM_INLINE glm::tvec4<T, P> yzyw(
const glm::tvec4<T, P> &v) {
1713 return glm::tvec4<T, P>(v.y, v.z, v.y, v.w);
1717 template<
typename T, precision P>
1718 GLM_INLINE glm::tvec4<T, P> yzzx(
const glm::tvec3<T, P> &v) {
1719 return glm::tvec4<T, P>(v.y, v.z, v.z, v.x);
1722 template<
typename T, precision P>
1723 GLM_INLINE glm::tvec4<T, P> yzzx(
const glm::tvec4<T, P> &v) {
1724 return glm::tvec4<T, P>(v.y, v.z, v.z, v.x);
1728 template<
typename T, precision P>
1729 GLM_INLINE glm::tvec4<T, P> yzzy(
const glm::tvec3<T, P> &v) {
1730 return glm::tvec4<T, P>(v.y, v.z, v.z, v.y);
1733 template<
typename T, precision P>
1734 GLM_INLINE glm::tvec4<T, P> yzzy(
const glm::tvec4<T, P> &v) {
1735 return glm::tvec4<T, P>(v.y, v.z, v.z, v.y);
1739 template<
typename T, precision P>
1740 GLM_INLINE glm::tvec4<T, P> yzzz(
const glm::tvec3<T, P> &v) {
1741 return glm::tvec4<T, P>(v.y, v.z, v.z, v.z);
1744 template<
typename T, precision P>
1745 GLM_INLINE glm::tvec4<T, P> yzzz(
const glm::tvec4<T, P> &v) {
1746 return glm::tvec4<T, P>(v.y, v.z, v.z, v.z);
1750 template<
typename T, precision P>
1751 GLM_INLINE glm::tvec4<T, P> yzzw(
const glm::tvec4<T, P> &v) {
1752 return glm::tvec4<T, P>(v.y, v.z, v.z, v.w);
1756 template<
typename T, precision P>
1757 GLM_INLINE glm::tvec4<T, P> yzwx(
const glm::tvec4<T, P> &v) {
1758 return glm::tvec4<T, P>(v.y, v.z, v.w, v.x);
1762 template<
typename T, precision P>
1763 GLM_INLINE glm::tvec4<T, P> yzwy(
const glm::tvec4<T, P> &v) {
1764 return glm::tvec4<T, P>(v.y, v.z, v.w, v.y);
1768 template<
typename T, precision P>
1769 GLM_INLINE glm::tvec4<T, P> yzwz(
const glm::tvec4<T, P> &v) {
1770 return glm::tvec4<T, P>(v.y, v.z, v.w, v.z);
1774 template<
typename T, precision P>
1775 GLM_INLINE glm::tvec4<T, P> yzww(
const glm::tvec4<T, P> &v) {
1776 return glm::tvec4<T, P>(v.y, v.z, v.w, v.w);
1780 template<
typename T, precision P>
1781 GLM_INLINE glm::tvec4<T, P> ywxx(
const glm::tvec4<T, P> &v) {
1782 return glm::tvec4<T, P>(v.y, v.w, v.x, v.x);
1786 template<
typename T, precision P>
1787 GLM_INLINE glm::tvec4<T, P> ywxy(
const glm::tvec4<T, P> &v) {
1788 return glm::tvec4<T, P>(v.y, v.w, v.x, v.y);
1792 template<
typename T, precision P>
1793 GLM_INLINE glm::tvec4<T, P> ywxz(
const glm::tvec4<T, P> &v) {
1794 return glm::tvec4<T, P>(v.y, v.w, v.x, v.z);
1798 template<
typename T, precision P>
1799 GLM_INLINE glm::tvec4<T, P> ywxw(
const glm::tvec4<T, P> &v) {
1800 return glm::tvec4<T, P>(v.y, v.w, v.x, v.w);
1804 template<
typename T, precision P>
1805 GLM_INLINE glm::tvec4<T, P> ywyx(
const glm::tvec4<T, P> &v) {
1806 return glm::tvec4<T, P>(v.y, v.w, v.y, v.x);
1810 template<
typename T, precision P>
1811 GLM_INLINE glm::tvec4<T, P> ywyy(
const glm::tvec4<T, P> &v) {
1812 return glm::tvec4<T, P>(v.y, v.w, v.y, v.y);
1816 template<
typename T, precision P>
1817 GLM_INLINE glm::tvec4<T, P> ywyz(
const glm::tvec4<T, P> &v) {
1818 return glm::tvec4<T, P>(v.y, v.w, v.y, v.z);
1822 template<
typename T, precision P>
1823 GLM_INLINE glm::tvec4<T, P> ywyw(
const glm::tvec4<T, P> &v) {
1824 return glm::tvec4<T, P>(v.y, v.w, v.y, v.w);
1828 template<
typename T, precision P>
1829 GLM_INLINE glm::tvec4<T, P> ywzx(
const glm::tvec4<T, P> &v) {
1830 return glm::tvec4<T, P>(v.y, v.w, v.z, v.x);
1834 template<
typename T, precision P>
1835 GLM_INLINE glm::tvec4<T, P> ywzy(
const glm::tvec4<T, P> &v) {
1836 return glm::tvec4<T, P>(v.y, v.w, v.z, v.y);
1840 template<
typename T, precision P>
1841 GLM_INLINE glm::tvec4<T, P> ywzz(
const glm::tvec4<T, P> &v) {
1842 return glm::tvec4<T, P>(v.y, v.w, v.z, v.z);
1846 template<
typename T, precision P>
1847 GLM_INLINE glm::tvec4<T, P> ywzw(
const glm::tvec4<T, P> &v) {
1848 return glm::tvec4<T, P>(v.y, v.w, v.z, v.w);
1852 template<
typename T, precision P>
1853 GLM_INLINE glm::tvec4<T, P> ywwx(
const glm::tvec4<T, P> &v) {
1854 return glm::tvec4<T, P>(v.y, v.w, v.w, v.x);
1858 template<
typename T, precision P>
1859 GLM_INLINE glm::tvec4<T, P> ywwy(
const glm::tvec4<T, P> &v) {
1860 return glm::tvec4<T, P>(v.y, v.w, v.w, v.y);
1864 template<
typename T, precision P>
1865 GLM_INLINE glm::tvec4<T, P> ywwz(
const glm::tvec4<T, P> &v) {
1866 return glm::tvec4<T, P>(v.y, v.w, v.w, v.z);
1870 template<
typename T, precision P>
1871 GLM_INLINE glm::tvec4<T, P> ywww(
const glm::tvec4<T, P> &v) {
1872 return glm::tvec4<T, P>(v.y, v.w, v.w, v.w);
1876 template<
typename T, precision P>
1877 GLM_INLINE glm::tvec4<T, P> zxxx(
const glm::tvec3<T, P> &v) {
1878 return glm::tvec4<T, P>(v.z, v.x, v.x, v.x);
1881 template<
typename T, precision P>
1882 GLM_INLINE glm::tvec4<T, P> zxxx(
const glm::tvec4<T, P> &v) {
1883 return glm::tvec4<T, P>(v.z, v.x, v.x, v.x);
1887 template<
typename T, precision P>
1888 GLM_INLINE glm::tvec4<T, P> zxxy(
const glm::tvec3<T, P> &v) {
1889 return glm::tvec4<T, P>(v.z, v.x, v.x, v.y);
1892 template<
typename T, precision P>
1893 GLM_INLINE glm::tvec4<T, P> zxxy(
const glm::tvec4<T, P> &v) {
1894 return glm::tvec4<T, P>(v.z, v.x, v.x, v.y);
1898 template<
typename T, precision P>
1899 GLM_INLINE glm::tvec4<T, P> zxxz(
const glm::tvec3<T, P> &v) {
1900 return glm::tvec4<T, P>(v.z, v.x, v.x, v.z);
1903 template<
typename T, precision P>
1904 GLM_INLINE glm::tvec4<T, P> zxxz(
const glm::tvec4<T, P> &v) {
1905 return glm::tvec4<T, P>(v.z, v.x, v.x, v.z);
1909 template<
typename T, precision P>
1910 GLM_INLINE glm::tvec4<T, P> zxxw(
const glm::tvec4<T, P> &v) {
1911 return glm::tvec4<T, P>(v.z, v.x, v.x, v.w);
1915 template<
typename T, precision P>
1916 GLM_INLINE glm::tvec4<T, P> zxyx(
const glm::tvec3<T, P> &v) {
1917 return glm::tvec4<T, P>(v.z, v.x, v.y, v.x);
1920 template<
typename T, precision P>
1921 GLM_INLINE glm::tvec4<T, P> zxyx(
const glm::tvec4<T, P> &v) {
1922 return glm::tvec4<T, P>(v.z, v.x, v.y, v.x);
1926 template<
typename T, precision P>
1927 GLM_INLINE glm::tvec4<T, P> zxyy(
const glm::tvec3<T, P> &v) {
1928 return glm::tvec4<T, P>(v.z, v.x, v.y, v.y);
1931 template<
typename T, precision P>
1932 GLM_INLINE glm::tvec4<T, P> zxyy(
const glm::tvec4<T, P> &v) {
1933 return glm::tvec4<T, P>(v.z, v.x, v.y, v.y);
1937 template<
typename T, precision P>
1938 GLM_INLINE glm::tvec4<T, P> zxyz(
const glm::tvec3<T, P> &v) {
1939 return glm::tvec4<T, P>(v.z, v.x, v.y, v.z);
1942 template<
typename T, precision P>
1943 GLM_INLINE glm::tvec4<T, P> zxyz(
const glm::tvec4<T, P> &v) {
1944 return glm::tvec4<T, P>(v.z, v.x, v.y, v.z);
1948 template<
typename T, precision P>
1949 GLM_INLINE glm::tvec4<T, P> zxyw(
const glm::tvec4<T, P> &v) {
1950 return glm::tvec4<T, P>(v.z, v.x, v.y, v.w);
1954 template<
typename T, precision P>
1955 GLM_INLINE glm::tvec4<T, P> zxzx(
const glm::tvec3<T, P> &v) {
1956 return glm::tvec4<T, P>(v.z, v.x, v.z, v.x);
1959 template<
typename T, precision P>
1960 GLM_INLINE glm::tvec4<T, P> zxzx(
const glm::tvec4<T, P> &v) {
1961 return glm::tvec4<T, P>(v.z, v.x, v.z, v.x);
1965 template<
typename T, precision P>
1966 GLM_INLINE glm::tvec4<T, P> zxzy(
const glm::tvec3<T, P> &v) {
1967 return glm::tvec4<T, P>(v.z, v.x, v.z, v.y);
1970 template<
typename T, precision P>
1971 GLM_INLINE glm::tvec4<T, P> zxzy(
const glm::tvec4<T, P> &v) {
1972 return glm::tvec4<T, P>(v.z, v.x, v.z, v.y);
1976 template<
typename T, precision P>
1977 GLM_INLINE glm::tvec4<T, P> zxzz(
const glm::tvec3<T, P> &v) {
1978 return glm::tvec4<T, P>(v.z, v.x, v.z, v.z);
1981 template<
typename T, precision P>
1982 GLM_INLINE glm::tvec4<T, P> zxzz(
const glm::tvec4<T, P> &v) {
1983 return glm::tvec4<T, P>(v.z, v.x, v.z, v.z);
1987 template<
typename T, precision P>
1988 GLM_INLINE glm::tvec4<T, P> zxzw(
const glm::tvec4<T, P> &v) {
1989 return glm::tvec4<T, P>(v.z, v.x, v.z, v.w);
1993 template<
typename T, precision P>
1994 GLM_INLINE glm::tvec4<T, P> zxwx(
const glm::tvec4<T, P> &v) {
1995 return glm::tvec4<T, P>(v.z, v.x, v.w, v.x);
1999 template<
typename T, precision P>
2000 GLM_INLINE glm::tvec4<T, P> zxwy(
const glm::tvec4<T, P> &v) {
2001 return glm::tvec4<T, P>(v.z, v.x, v.w, v.y);
2005 template<
typename T, precision P>
2006 GLM_INLINE glm::tvec4<T, P> zxwz(
const glm::tvec4<T, P> &v) {
2007 return glm::tvec4<T, P>(v.z, v.x, v.w, v.z);
2011 template<
typename T, precision P>
2012 GLM_INLINE glm::tvec4<T, P> zxww(
const glm::tvec4<T, P> &v) {
2013 return glm::tvec4<T, P>(v.z, v.x, v.w, v.w);
2017 template<
typename T, precision P>
2018 GLM_INLINE glm::tvec4<T, P> zyxx(
const glm::tvec3<T, P> &v) {
2019 return glm::tvec4<T, P>(v.z, v.y, v.x, v.x);
2022 template<
typename T, precision P>
2023 GLM_INLINE glm::tvec4<T, P> zyxx(
const glm::tvec4<T, P> &v) {
2024 return glm::tvec4<T, P>(v.z, v.y, v.x, v.x);
2028 template<
typename T, precision P>
2029 GLM_INLINE glm::tvec4<T, P> zyxy(
const glm::tvec3<T, P> &v) {
2030 return glm::tvec4<T, P>(v.z, v.y, v.x, v.y);
2033 template<
typename T, precision P>
2034 GLM_INLINE glm::tvec4<T, P> zyxy(
const glm::tvec4<T, P> &v) {
2035 return glm::tvec4<T, P>(v.z, v.y, v.x, v.y);
2039 template<
typename T, precision P>
2040 GLM_INLINE glm::tvec4<T, P> zyxz(
const glm::tvec3<T, P> &v) {
2041 return glm::tvec4<T, P>(v.z, v.y, v.x, v.z);
2044 template<
typename T, precision P>
2045 GLM_INLINE glm::tvec4<T, P> zyxz(
const glm::tvec4<T, P> &v) {
2046 return glm::tvec4<T, P>(v.z, v.y, v.x, v.z);
2050 template<
typename T, precision P>
2051 GLM_INLINE glm::tvec4<T, P> zyxw(
const glm::tvec4<T, P> &v) {
2052 return glm::tvec4<T, P>(v.z, v.y, v.x, v.w);
2056 template<
typename T, precision P>
2057 GLM_INLINE glm::tvec4<T, P> zyyx(
const glm::tvec3<T, P> &v) {
2058 return glm::tvec4<T, P>(v.z, v.y, v.y, v.x);
2061 template<
typename T, precision P>
2062 GLM_INLINE glm::tvec4<T, P> zyyx(
const glm::tvec4<T, P> &v) {
2063 return glm::tvec4<T, P>(v.z, v.y, v.y, v.x);
2067 template<
typename T, precision P>
2068 GLM_INLINE glm::tvec4<T, P> zyyy(
const glm::tvec3<T, P> &v) {
2069 return glm::tvec4<T, P>(v.z, v.y, v.y, v.y);
2072 template<
typename T, precision P>
2073 GLM_INLINE glm::tvec4<T, P> zyyy(
const glm::tvec4<T, P> &v) {
2074 return glm::tvec4<T, P>(v.z, v.y, v.y, v.y);
2078 template<
typename T, precision P>
2079 GLM_INLINE glm::tvec4<T, P> zyyz(
const glm::tvec3<T, P> &v) {
2080 return glm::tvec4<T, P>(v.z, v.y, v.y, v.z);
2083 template<
typename T, precision P>
2084 GLM_INLINE glm::tvec4<T, P> zyyz(
const glm::tvec4<T, P> &v) {
2085 return glm::tvec4<T, P>(v.z, v.y, v.y, v.z);
2089 template<
typename T, precision P>
2090 GLM_INLINE glm::tvec4<T, P> zyyw(
const glm::tvec4<T, P> &v) {
2091 return glm::tvec4<T, P>(v.z, v.y, v.y, v.w);
2095 template<
typename T, precision P>
2096 GLM_INLINE glm::tvec4<T, P> zyzx(
const glm::tvec3<T, P> &v) {
2097 return glm::tvec4<T, P>(v.z, v.y, v.z, v.x);
2100 template<
typename T, precision P>
2101 GLM_INLINE glm::tvec4<T, P> zyzx(
const glm::tvec4<T, P> &v) {
2102 return glm::tvec4<T, P>(v.z, v.y, v.z, v.x);
2106 template<
typename T, precision P>
2107 GLM_INLINE glm::tvec4<T, P> zyzy(
const glm::tvec3<T, P> &v) {
2108 return glm::tvec4<T, P>(v.z, v.y, v.z, v.y);
2111 template<
typename T, precision P>
2112 GLM_INLINE glm::tvec4<T, P> zyzy(
const glm::tvec4<T, P> &v) {
2113 return glm::tvec4<T, P>(v.z, v.y, v.z, v.y);
2117 template<
typename T, precision P>
2118 GLM_INLINE glm::tvec4<T, P> zyzz(
const glm::tvec3<T, P> &v) {
2119 return glm::tvec4<T, P>(v.z, v.y, v.z, v.z);
2122 template<
typename T, precision P>
2123 GLM_INLINE glm::tvec4<T, P> zyzz(
const glm::tvec4<T, P> &v) {
2124 return glm::tvec4<T, P>(v.z, v.y, v.z, v.z);
2128 template<
typename T, precision P>
2129 GLM_INLINE glm::tvec4<T, P> zyzw(
const glm::tvec4<T, P> &v) {
2130 return glm::tvec4<T, P>(v.z, v.y, v.z, v.w);
2134 template<
typename T, precision P>
2135 GLM_INLINE glm::tvec4<T, P> zywx(
const glm::tvec4<T, P> &v) {
2136 return glm::tvec4<T, P>(v.z, v.y, v.w, v.x);
2140 template<
typename T, precision P>
2141 GLM_INLINE glm::tvec4<T, P> zywy(
const glm::tvec4<T, P> &v) {
2142 return glm::tvec4<T, P>(v.z, v.y, v.w, v.y);
2146 template<
typename T, precision P>
2147 GLM_INLINE glm::tvec4<T, P> zywz(
const glm::tvec4<T, P> &v) {
2148 return glm::tvec4<T, P>(v.z, v.y, v.w, v.z);
2152 template<
typename T, precision P>
2153 GLM_INLINE glm::tvec4<T, P> zyww(
const glm::tvec4<T, P> &v) {
2154 return glm::tvec4<T, P>(v.z, v.y, v.w, v.w);
2158 template<
typename T, precision P>
2159 GLM_INLINE glm::tvec4<T, P> zzxx(
const glm::tvec3<T, P> &v) {
2160 return glm::tvec4<T, P>(v.z, v.z, v.x, v.x);
2163 template<
typename T, precision P>
2164 GLM_INLINE glm::tvec4<T, P> zzxx(
const glm::tvec4<T, P> &v) {
2165 return glm::tvec4<T, P>(v.z, v.z, v.x, v.x);
2169 template<
typename T, precision P>
2170 GLM_INLINE glm::tvec4<T, P> zzxy(
const glm::tvec3<T, P> &v) {
2171 return glm::tvec4<T, P>(v.z, v.z, v.x, v.y);
2174 template<
typename T, precision P>
2175 GLM_INLINE glm::tvec4<T, P> zzxy(
const glm::tvec4<T, P> &v) {
2176 return glm::tvec4<T, P>(v.z, v.z, v.x, v.y);
2180 template<
typename T, precision P>
2181 GLM_INLINE glm::tvec4<T, P> zzxz(
const glm::tvec3<T, P> &v) {
2182 return glm::tvec4<T, P>(v.z, v.z, v.x, v.z);
2185 template<
typename T, precision P>
2186 GLM_INLINE glm::tvec4<T, P> zzxz(
const glm::tvec4<T, P> &v) {
2187 return glm::tvec4<T, P>(v.z, v.z, v.x, v.z);
2191 template<
typename T, precision P>
2192 GLM_INLINE glm::tvec4<T, P> zzxw(
const glm::tvec4<T, P> &v) {
2193 return glm::tvec4<T, P>(v.z, v.z, v.x, v.w);
2197 template<
typename T, precision P>
2198 GLM_INLINE glm::tvec4<T, P> zzyx(
const glm::tvec3<T, P> &v) {
2199 return glm::tvec4<T, P>(v.z, v.z, v.y, v.x);
2202 template<
typename T, precision P>
2203 GLM_INLINE glm::tvec4<T, P> zzyx(
const glm::tvec4<T, P> &v) {
2204 return glm::tvec4<T, P>(v.z, v.z, v.y, v.x);
2208 template<
typename T, precision P>
2209 GLM_INLINE glm::tvec4<T, P> zzyy(
const glm::tvec3<T, P> &v) {
2210 return glm::tvec4<T, P>(v.z, v.z, v.y, v.y);
2213 template<
typename T, precision P>
2214 GLM_INLINE glm::tvec4<T, P> zzyy(
const glm::tvec4<T, P> &v) {
2215 return glm::tvec4<T, P>(v.z, v.z, v.y, v.y);
2219 template<
typename T, precision P>
2220 GLM_INLINE glm::tvec4<T, P> zzyz(
const glm::tvec3<T, P> &v) {
2221 return glm::tvec4<T, P>(v.z, v.z, v.y, v.z);
2224 template<
typename T, precision P>
2225 GLM_INLINE glm::tvec4<T, P> zzyz(
const glm::tvec4<T, P> &v) {
2226 return glm::tvec4<T, P>(v.z, v.z, v.y, v.z);
2230 template<
typename T, precision P>
2231 GLM_INLINE glm::tvec4<T, P> zzyw(
const glm::tvec4<T, P> &v) {
2232 return glm::tvec4<T, P>(v.z, v.z, v.y, v.w);
2236 template<
typename T, precision P>
2237 GLM_INLINE glm::tvec4<T, P> zzzx(
const glm::tvec3<T, P> &v) {
2238 return glm::tvec4<T, P>(v.z, v.z, v.z, v.x);
2241 template<
typename T, precision P>
2242 GLM_INLINE glm::tvec4<T, P> zzzx(
const glm::tvec4<T, P> &v) {
2243 return glm::tvec4<T, P>(v.z, v.z, v.z, v.x);
2247 template<
typename T, precision P>
2248 GLM_INLINE glm::tvec4<T, P> zzzy(
const glm::tvec3<T, P> &v) {
2249 return glm::tvec4<T, P>(v.z, v.z, v.z, v.y);
2252 template<
typename T, precision P>
2253 GLM_INLINE glm::tvec4<T, P> zzzy(
const glm::tvec4<T, P> &v) {
2254 return glm::tvec4<T, P>(v.z, v.z, v.z, v.y);
2258 template<
typename T, precision P>
2259 GLM_INLINE glm::tvec4<T, P> zzzz(
const glm::tvec3<T, P> &v) {
2260 return glm::tvec4<T, P>(v.z, v.z, v.z, v.z);
2263 template<
typename T, precision P>
2264 GLM_INLINE glm::tvec4<T, P> zzzz(
const glm::tvec4<T, P> &v) {
2265 return glm::tvec4<T, P>(v.z, v.z, v.z, v.z);
2269 template<
typename T, precision P>
2270 GLM_INLINE glm::tvec4<T, P> zzzw(
const glm::tvec4<T, P> &v) {
2271 return glm::tvec4<T, P>(v.z, v.z, v.z, v.w);
2275 template<
typename T, precision P>
2276 GLM_INLINE glm::tvec4<T, P> zzwx(
const glm::tvec4<T, P> &v) {
2277 return glm::tvec4<T, P>(v.z, v.z, v.w, v.x);
2281 template<
typename T, precision P>
2282 GLM_INLINE glm::tvec4<T, P> zzwy(
const glm::tvec4<T, P> &v) {
2283 return glm::tvec4<T, P>(v.z, v.z, v.w, v.y);
2287 template<
typename T, precision P>
2288 GLM_INLINE glm::tvec4<T, P> zzwz(
const glm::tvec4<T, P> &v) {
2289 return glm::tvec4<T, P>(v.z, v.z, v.w, v.z);
2293 template<
typename T, precision P>
2294 GLM_INLINE glm::tvec4<T, P> zzww(
const glm::tvec4<T, P> &v) {
2295 return glm::tvec4<T, P>(v.z, v.z, v.w, v.w);
2299 template<
typename T, precision P>
2300 GLM_INLINE glm::tvec4<T, P> zwxx(
const glm::tvec4<T, P> &v) {
2301 return glm::tvec4<T, P>(v.z, v.w, v.x, v.x);
2305 template<
typename T, precision P>
2306 GLM_INLINE glm::tvec4<T, P> zwxy(
const glm::tvec4<T, P> &v) {
2307 return glm::tvec4<T, P>(v.z, v.w, v.x, v.y);
2311 template<
typename T, precision P>
2312 GLM_INLINE glm::tvec4<T, P> zwxz(
const glm::tvec4<T, P> &v) {
2313 return glm::tvec4<T, P>(v.z, v.w, v.x, v.z);
2317 template<
typename T, precision P>
2318 GLM_INLINE glm::tvec4<T, P> zwxw(
const glm::tvec4<T, P> &v) {
2319 return glm::tvec4<T, P>(v.z, v.w, v.x, v.w);
2323 template<
typename T, precision P>
2324 GLM_INLINE glm::tvec4<T, P> zwyx(
const glm::tvec4<T, P> &v) {
2325 return glm::tvec4<T, P>(v.z, v.w, v.y, v.x);
2329 template<
typename T, precision P>
2330 GLM_INLINE glm::tvec4<T, P> zwyy(
const glm::tvec4<T, P> &v) {
2331 return glm::tvec4<T, P>(v.z, v.w, v.y, v.y);
2335 template<
typename T, precision P>
2336 GLM_INLINE glm::tvec4<T, P> zwyz(
const glm::tvec4<T, P> &v) {
2337 return glm::tvec4<T, P>(v.z, v.w, v.y, v.z);
2341 template<
typename T, precision P>
2342 GLM_INLINE glm::tvec4<T, P> zwyw(
const glm::tvec4<T, P> &v) {
2343 return glm::tvec4<T, P>(v.z, v.w, v.y, v.w);
2347 template<
typename T, precision P>
2348 GLM_INLINE glm::tvec4<T, P> zwzx(
const glm::tvec4<T, P> &v) {
2349 return glm::tvec4<T, P>(v.z, v.w, v.z, v.x);
2353 template<
typename T, precision P>
2354 GLM_INLINE glm::tvec4<T, P> zwzy(
const glm::tvec4<T, P> &v) {
2355 return glm::tvec4<T, P>(v.z, v.w, v.z, v.y);
2359 template<
typename T, precision P>
2360 GLM_INLINE glm::tvec4<T, P> zwzz(
const glm::tvec4<T, P> &v) {
2361 return glm::tvec4<T, P>(v.z, v.w, v.z, v.z);
2365 template<
typename T, precision P>
2366 GLM_INLINE glm::tvec4<T, P> zwzw(
const glm::tvec4<T, P> &v) {
2367 return glm::tvec4<T, P>(v.z, v.w, v.z, v.w);
2371 template<
typename T, precision P>
2372 GLM_INLINE glm::tvec4<T, P> zwwx(
const glm::tvec4<T, P> &v) {
2373 return glm::tvec4<T, P>(v.z, v.w, v.w, v.x);
2377 template<
typename T, precision P>
2378 GLM_INLINE glm::tvec4<T, P> zwwy(
const glm::tvec4<T, P> &v) {
2379 return glm::tvec4<T, P>(v.z, v.w, v.w, v.y);
2383 template<
typename T, precision P>
2384 GLM_INLINE glm::tvec4<T, P> zwwz(
const glm::tvec4<T, P> &v) {
2385 return glm::tvec4<T, P>(v.z, v.w, v.w, v.z);
2389 template<
typename T, precision P>
2390 GLM_INLINE glm::tvec4<T, P> zwww(
const glm::tvec4<T, P> &v) {
2391 return glm::tvec4<T, P>(v.z, v.w, v.w, v.w);
2395 template<
typename T, precision P>
2396 GLM_INLINE glm::tvec4<T, P> wxxx(
const glm::tvec4<T, P> &v) {
2397 return glm::tvec4<T, P>(v.w, v.x, v.x, v.x);
2401 template<
typename T, precision P>
2402 GLM_INLINE glm::tvec4<T, P> wxxy(
const glm::tvec4<T, P> &v) {
2403 return glm::tvec4<T, P>(v.w, v.x, v.x, v.y);
2407 template<
typename T, precision P>
2408 GLM_INLINE glm::tvec4<T, P> wxxz(
const glm::tvec4<T, P> &v) {
2409 return glm::tvec4<T, P>(v.w, v.x, v.x, v.z);
2413 template<
typename T, precision P>
2414 GLM_INLINE glm::tvec4<T, P> wxxw(
const glm::tvec4<T, P> &v) {
2415 return glm::tvec4<T, P>(v.w, v.x, v.x, v.w);
2419 template<
typename T, precision P>
2420 GLM_INLINE glm::tvec4<T, P> wxyx(
const glm::tvec4<T, P> &v) {
2421 return glm::tvec4<T, P>(v.w, v.x, v.y, v.x);
2425 template<
typename T, precision P>
2426 GLM_INLINE glm::tvec4<T, P> wxyy(
const glm::tvec4<T, P> &v) {
2427 return glm::tvec4<T, P>(v.w, v.x, v.y, v.y);
2431 template<
typename T, precision P>
2432 GLM_INLINE glm::tvec4<T, P> wxyz(
const glm::tvec4<T, P> &v) {
2433 return glm::tvec4<T, P>(v.w, v.x, v.y, v.z);
2437 template<
typename T, precision P>
2438 GLM_INLINE glm::tvec4<T, P> wxyw(
const glm::tvec4<T, P> &v) {
2439 return glm::tvec4<T, P>(v.w, v.x, v.y, v.w);
2443 template<
typename T, precision P>
2444 GLM_INLINE glm::tvec4<T, P> wxzx(
const glm::tvec4<T, P> &v) {
2445 return glm::tvec4<T, P>(v.w, v.x, v.z, v.x);
2449 template<
typename T, precision P>
2450 GLM_INLINE glm::tvec4<T, P> wxzy(
const glm::tvec4<T, P> &v) {
2451 return glm::tvec4<T, P>(v.w, v.x, v.z, v.y);
2455 template<
typename T, precision P>
2456 GLM_INLINE glm::tvec4<T, P> wxzz(
const glm::tvec4<T, P> &v) {
2457 return glm::tvec4<T, P>(v.w, v.x, v.z, v.z);
2461 template<
typename T, precision P>
2462 GLM_INLINE glm::tvec4<T, P> wxzw(
const glm::tvec4<T, P> &v) {
2463 return glm::tvec4<T, P>(v.w, v.x, v.z, v.w);
2467 template<
typename T, precision P>
2468 GLM_INLINE glm::tvec4<T, P> wxwx(
const glm::tvec4<T, P> &v) {
2469 return glm::tvec4<T, P>(v.w, v.x, v.w, v.x);
2473 template<
typename T, precision P>
2474 GLM_INLINE glm::tvec4<T, P> wxwy(
const glm::tvec4<T, P> &v) {
2475 return glm::tvec4<T, P>(v.w, v.x, v.w, v.y);
2479 template<
typename T, precision P>
2480 GLM_INLINE glm::tvec4<T, P> wxwz(
const glm::tvec4<T, P> &v) {
2481 return glm::tvec4<T, P>(v.w, v.x, v.w, v.z);
2485 template<
typename T, precision P>
2486 GLM_INLINE glm::tvec4<T, P> wxww(
const glm::tvec4<T, P> &v) {
2487 return glm::tvec4<T, P>(v.w, v.x, v.w, v.w);
2491 template<
typename T, precision P>
2492 GLM_INLINE glm::tvec4<T, P> wyxx(
const glm::tvec4<T, P> &v) {
2493 return glm::tvec4<T, P>(v.w, v.y, v.x, v.x);
2497 template<
typename T, precision P>
2498 GLM_INLINE glm::tvec4<T, P> wyxy(
const glm::tvec4<T, P> &v) {
2499 return glm::tvec4<T, P>(v.w, v.y, v.x, v.y);
2503 template<
typename T, precision P>
2504 GLM_INLINE glm::tvec4<T, P> wyxz(
const glm::tvec4<T, P> &v) {
2505 return glm::tvec4<T, P>(v.w, v.y, v.x, v.z);
2509 template<
typename T, precision P>
2510 GLM_INLINE glm::tvec4<T, P> wyxw(
const glm::tvec4<T, P> &v) {
2511 return glm::tvec4<T, P>(v.w, v.y, v.x, v.w);
2515 template<
typename T, precision P>
2516 GLM_INLINE glm::tvec4<T, P> wyyx(
const glm::tvec4<T, P> &v) {
2517 return glm::tvec4<T, P>(v.w, v.y, v.y, v.x);
2521 template<
typename T, precision P>
2522 GLM_INLINE glm::tvec4<T, P> wyyy(
const glm::tvec4<T, P> &v) {
2523 return glm::tvec4<T, P>(v.w, v.y, v.y, v.y);
2527 template<
typename T, precision P>
2528 GLM_INLINE glm::tvec4<T, P> wyyz(
const glm::tvec4<T, P> &v) {
2529 return glm::tvec4<T, P>(v.w, v.y, v.y, v.z);
2533 template<
typename T, precision P>
2534 GLM_INLINE glm::tvec4<T, P> wyyw(
const glm::tvec4<T, P> &v) {
2535 return glm::tvec4<T, P>(v.w, v.y, v.y, v.w);
2539 template<
typename T, precision P>
2540 GLM_INLINE glm::tvec4<T, P> wyzx(
const glm::tvec4<T, P> &v) {
2541 return glm::tvec4<T, P>(v.w, v.y, v.z, v.x);
2545 template<
typename T, precision P>
2546 GLM_INLINE glm::tvec4<T, P> wyzy(
const glm::tvec4<T, P> &v) {
2547 return glm::tvec4<T, P>(v.w, v.y, v.z, v.y);
2551 template<
typename T, precision P>
2552 GLM_INLINE glm::tvec4<T, P> wyzz(
const glm::tvec4<T, P> &v) {
2553 return glm::tvec4<T, P>(v.w, v.y, v.z, v.z);
2557 template<
typename T, precision P>
2558 GLM_INLINE glm::tvec4<T, P> wyzw(
const glm::tvec4<T, P> &v) {
2559 return glm::tvec4<T, P>(v.w, v.y, v.z, v.w);
2563 template<
typename T, precision P>
2564 GLM_INLINE glm::tvec4<T, P> wywx(
const glm::tvec4<T, P> &v) {
2565 return glm::tvec4<T, P>(v.w, v.y, v.w, v.x);
2569 template<
typename T, precision P>
2570 GLM_INLINE glm::tvec4<T, P> wywy(
const glm::tvec4<T, P> &v) {
2571 return glm::tvec4<T, P>(v.w, v.y, v.w, v.y);
2575 template<
typename T, precision P>
2576 GLM_INLINE glm::tvec4<T, P> wywz(
const glm::tvec4<T, P> &v) {
2577 return glm::tvec4<T, P>(v.w, v.y, v.w, v.z);
2581 template<
typename T, precision P>
2582 GLM_INLINE glm::tvec4<T, P> wyww(
const glm::tvec4<T, P> &v) {
2583 return glm::tvec4<T, P>(v.w, v.y, v.w, v.w);
2587 template<
typename T, precision P>
2588 GLM_INLINE glm::tvec4<T, P> wzxx(
const glm::tvec4<T, P> &v) {
2589 return glm::tvec4<T, P>(v.w, v.z, v.x, v.x);
2593 template<
typename T, precision P>
2594 GLM_INLINE glm::tvec4<T, P> wzxy(
const glm::tvec4<T, P> &v) {
2595 return glm::tvec4<T, P>(v.w, v.z, v.x, v.y);
2599 template<
typename T, precision P>
2600 GLM_INLINE glm::tvec4<T, P> wzxz(
const glm::tvec4<T, P> &v) {
2601 return glm::tvec4<T, P>(v.w, v.z, v.x, v.z);
2605 template<
typename T, precision P>
2606 GLM_INLINE glm::tvec4<T, P> wzxw(
const glm::tvec4<T, P> &v) {
2607 return glm::tvec4<T, P>(v.w, v.z, v.x, v.w);
2611 template<
typename T, precision P>
2612 GLM_INLINE glm::tvec4<T, P> wzyx(
const glm::tvec4<T, P> &v) {
2613 return glm::tvec4<T, P>(v.w, v.z, v.y, v.x);
2617 template<
typename T, precision P>
2618 GLM_INLINE glm::tvec4<T, P> wzyy(
const glm::tvec4<T, P> &v) {
2619 return glm::tvec4<T, P>(v.w, v.z, v.y, v.y);
2623 template<
typename T, precision P>
2624 GLM_INLINE glm::tvec4<T, P> wzyz(
const glm::tvec4<T, P> &v) {
2625 return glm::tvec4<T, P>(v.w, v.z, v.y, v.z);
2629 template<
typename T, precision P>
2630 GLM_INLINE glm::tvec4<T, P> wzyw(
const glm::tvec4<T, P> &v) {
2631 return glm::tvec4<T, P>(v.w, v.z, v.y, v.w);
2635 template<
typename T, precision P>
2636 GLM_INLINE glm::tvec4<T, P> wzzx(
const glm::tvec4<T, P> &v) {
2637 return glm::tvec4<T, P>(v.w, v.z, v.z, v.x);
2641 template<
typename T, precision P>
2642 GLM_INLINE glm::tvec4<T, P> wzzy(
const glm::tvec4<T, P> &v) {
2643 return glm::tvec4<T, P>(v.w, v.z, v.z, v.y);
2647 template<
typename T, precision P>
2648 GLM_INLINE glm::tvec4<T, P> wzzz(
const glm::tvec4<T, P> &v) {
2649 return glm::tvec4<T, P>(v.w, v.z, v.z, v.z);
2653 template<
typename T, precision P>
2654 GLM_INLINE glm::tvec4<T, P> wzzw(
const glm::tvec4<T, P> &v) {
2655 return glm::tvec4<T, P>(v.w, v.z, v.z, v.w);
2659 template<
typename T, precision P>
2660 GLM_INLINE glm::tvec4<T, P> wzwx(
const glm::tvec4<T, P> &v) {
2661 return glm::tvec4<T, P>(v.w, v.z, v.w, v.x);
2665 template<
typename T, precision P>
2666 GLM_INLINE glm::tvec4<T, P> wzwy(
const glm::tvec4<T, P> &v) {
2667 return glm::tvec4<T, P>(v.w, v.z, v.w, v.y);
2671 template<
typename T, precision P>
2672 GLM_INLINE glm::tvec4<T, P> wzwz(
const glm::tvec4<T, P> &v) {
2673 return glm::tvec4<T, P>(v.w, v.z, v.w, v.z);
2677 template<
typename T, precision P>
2678 GLM_INLINE glm::tvec4<T, P> wzww(
const glm::tvec4<T, P> &v) {
2679 return glm::tvec4<T, P>(v.w, v.z, v.w, v.w);
2683 template<
typename T, precision P>
2684 GLM_INLINE glm::tvec4<T, P> wwxx(
const glm::tvec4<T, P> &v) {
2685 return glm::tvec4<T, P>(v.w, v.w, v.x, v.x);
2689 template<
typename T, precision P>
2690 GLM_INLINE glm::tvec4<T, P> wwxy(
const glm::tvec4<T, P> &v) {
2691 return glm::tvec4<T, P>(v.w, v.w, v.x, v.y);
2695 template<
typename T, precision P>
2696 GLM_INLINE glm::tvec4<T, P> wwxz(
const glm::tvec4<T, P> &v) {
2697 return glm::tvec4<T, P>(v.w, v.w, v.x, v.z);
2701 template<
typename T, precision P>
2702 GLM_INLINE glm::tvec4<T, P> wwxw(
const glm::tvec4<T, P> &v) {
2703 return glm::tvec4<T, P>(v.w, v.w, v.x, v.w);
2707 template<
typename T, precision P>
2708 GLM_INLINE glm::tvec4<T, P> wwyx(
const glm::tvec4<T, P> &v) {
2709 return glm::tvec4<T, P>(v.w, v.w, v.y, v.x);
2713 template<
typename T, precision P>
2714 GLM_INLINE glm::tvec4<T, P> wwyy(
const glm::tvec4<T, P> &v) {
2715 return glm::tvec4<T, P>(v.w, v.w, v.y, v.y);
2719 template<
typename T, precision P>
2720 GLM_INLINE glm::tvec4<T, P> wwyz(
const glm::tvec4<T, P> &v) {
2721 return glm::tvec4<T, P>(v.w, v.w, v.y, v.z);
2725 template<
typename T, precision P>
2726 GLM_INLINE glm::tvec4<T, P> wwyw(
const glm::tvec4<T, P> &v) {
2727 return glm::tvec4<T, P>(v.w, v.w, v.y, v.w);
2731 template<
typename T, precision P>
2732 GLM_INLINE glm::tvec4<T, P> wwzx(
const glm::tvec4<T, P> &v) {
2733 return glm::tvec4<T, P>(v.w, v.w, v.z, v.x);
2737 template<
typename T, precision P>
2738 GLM_INLINE glm::tvec4<T, P> wwzy(
const glm::tvec4<T, P> &v) {
2739 return glm::tvec4<T, P>(v.w, v.w, v.z, v.y);
2743 template<
typename T, precision P>
2744 GLM_INLINE glm::tvec4<T, P> wwzz(
const glm::tvec4<T, P> &v) {
2745 return glm::tvec4<T, P>(v.w, v.w, v.z, v.z);
2749 template<
typename T, precision P>
2750 GLM_INLINE glm::tvec4<T, P> wwzw(
const glm::tvec4<T, P> &v) {
2751 return glm::tvec4<T, P>(v.w, v.w, v.z, v.w);
2755 template<
typename T, precision P>
2756 GLM_INLINE glm::tvec4<T, P> wwwx(
const glm::tvec4<T, P> &v) {
2757 return glm::tvec4<T, P>(v.w, v.w, v.w, v.x);
2761 template<
typename T, precision P>
2762 GLM_INLINE glm::tvec4<T, P> wwwy(
const glm::tvec4<T, P> &v) {
2763 return glm::tvec4<T, P>(v.w, v.w, v.w, v.y);
2767 template<
typename T, precision P>
2768 GLM_INLINE glm::tvec4<T, P> wwwz(
const glm::tvec4<T, P> &v) {
2769 return glm::tvec4<T, P>(v.w, v.w, v.w, v.z);
2773 template<
typename T, precision P>
2774 GLM_INLINE glm::tvec4<T, P> wwww(
const glm::tvec4<T, P> &v) {
2775 return glm::tvec4<T, P>(v.w, v.w, v.w, v.w);