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