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