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