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