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