17 #ifndef GLM_ENABLE_EXPERIMENTAL 
   18 #       error "GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it." 
   23         template<
typename T, qualifier P>
 
   24         GLM_INLINE glm::vec<2, T, P> xx(
const glm::vec<1, T, P> &v) {
 
   25                 return glm::vec<2, T, P>(v.x, v.x);
 
   28         template<
typename T, qualifier P>
 
   29         GLM_INLINE glm::vec<2, T, P> xx(
const glm::vec<2, T, P> &v) {
 
   30                 return glm::vec<2, T, P>(v.x, v.x);
 
   33         template<
typename T, qualifier P>
 
   34         GLM_INLINE glm::vec<2, T, P> xx(
const glm::vec<3, T, P> &v) {
 
   35                 return glm::vec<2, T, P>(v.x, v.x);
 
   38         template<
typename T, qualifier P>
 
   39         GLM_INLINE glm::vec<2, T, P> xx(
const glm::vec<4, T, P> &v) {
 
   40                 return glm::vec<2, T, P>(v.x, v.x);
 
   44         template<
typename T, qualifier P>
 
   45         GLM_INLINE glm::vec<2, T, P> xy(
const glm::vec<2, T, P> &v) {
 
   46                 return glm::vec<2, T, P>(v.x, v.y);
 
   49         template<
typename T, qualifier P>
 
   50         GLM_INLINE glm::vec<2, T, P> xy(
const glm::vec<3, T, P> &v) {
 
   51                 return glm::vec<2, T, P>(v.x, v.y);
 
   54         template<
typename T, qualifier P>
 
   55         GLM_INLINE glm::vec<2, T, P> xy(
const glm::vec<4, T, P> &v) {
 
   56                 return glm::vec<2, T, P>(v.x, v.y);
 
   60         template<
typename T, qualifier P>
 
   61         GLM_INLINE glm::vec<2, T, P> xz(
const glm::vec<3, T, P> &v) {
 
   62                 return glm::vec<2, T, P>(v.x, v.z);
 
   65         template<
typename T, qualifier P>
 
   66         GLM_INLINE glm::vec<2, T, P> xz(
const glm::vec<4, T, P> &v) {
 
   67                 return glm::vec<2, T, P>(v.x, v.z);
 
   71         template<
typename T, qualifier P>
 
   72         GLM_INLINE glm::vec<2, T, P> xw(
const glm::vec<4, T, P> &v) {
 
   73                 return glm::vec<2, T, P>(v.x, v.w);
 
   77         template<
typename T, qualifier P>
 
   78         GLM_INLINE glm::vec<2, T, P> yx(
const glm::vec<2, T, P> &v) {
 
   79                 return glm::vec<2, T, P>(v.y, v.x);
 
   82         template<
typename T, qualifier P>
 
   83         GLM_INLINE glm::vec<2, T, P> yx(
const glm::vec<3, T, P> &v) {
 
   84                 return glm::vec<2, T, P>(v.y, v.x);
 
   87         template<
typename T, qualifier P>
 
   88         GLM_INLINE glm::vec<2, T, P> yx(
const glm::vec<4, T, P> &v) {
 
   89                 return glm::vec<2, T, P>(v.y, v.x);
 
   93         template<
typename T, qualifier P>
 
   94         GLM_INLINE glm::vec<2, T, P> yy(
const glm::vec<2, T, P> &v) {
 
   95                 return glm::vec<2, T, P>(v.y, v.y);
 
   98         template<
typename T, qualifier P>
 
   99         GLM_INLINE glm::vec<2, T, P> yy(
const glm::vec<3, T, P> &v) {
 
  100                 return glm::vec<2, T, P>(v.y, v.y);
 
  103         template<
typename T, qualifier P>
 
  104         GLM_INLINE glm::vec<2, T, P> yy(
const glm::vec<4, T, P> &v) {
 
  105                 return glm::vec<2, T, P>(v.y, v.y);
 
  109         template<
typename T, qualifier P>
 
  110         GLM_INLINE glm::vec<2, T, P> yz(
const glm::vec<3, T, P> &v) {
 
  111                 return glm::vec<2, T, P>(v.y, v.z);
 
  114         template<
typename T, qualifier P>
 
  115         GLM_INLINE glm::vec<2, T, P> yz(
const glm::vec<4, T, P> &v) {
 
  116                 return glm::vec<2, T, P>(v.y, v.z);
 
  120         template<
typename T, qualifier P>
 
  121         GLM_INLINE glm::vec<2, T, P> yw(
const glm::vec<4, T, P> &v) {
 
  122                 return glm::vec<2, T, P>(v.y, v.w);
 
  126         template<
typename T, qualifier P>
 
  127         GLM_INLINE glm::vec<2, T, P> zx(
const glm::vec<3, T, P> &v) {
 
  128                 return glm::vec<2, T, P>(v.z, v.x);
 
  131         template<
typename T, qualifier P>
 
  132         GLM_INLINE glm::vec<2, T, P> zx(
const glm::vec<4, T, P> &v) {
 
  133                 return glm::vec<2, T, P>(v.z, v.x);
 
  137         template<
typename T, qualifier P>
 
  138         GLM_INLINE glm::vec<2, T, P> zy(
const glm::vec<3, T, P> &v) {
 
  139                 return glm::vec<2, T, P>(v.z, v.y);
 
  142         template<
typename T, qualifier P>
 
  143         GLM_INLINE glm::vec<2, T, P> zy(
const glm::vec<4, T, P> &v) {
 
  144                 return glm::vec<2, T, P>(v.z, v.y);
 
  148         template<
typename T, qualifier P>
 
  149         GLM_INLINE glm::vec<2, T, P> zz(
const glm::vec<3, T, P> &v) {
 
  150                 return glm::vec<2, T, P>(v.z, v.z);
 
  153         template<
typename T, qualifier P>
 
  154         GLM_INLINE glm::vec<2, T, P> zz(
const glm::vec<4, T, P> &v) {
 
  155                 return glm::vec<2, T, P>(v.z, v.z);
 
  159         template<
typename T, qualifier P>
 
  160         GLM_INLINE glm::vec<2, T, P> zw(
const glm::vec<4, T, P> &v) {
 
  161                 return glm::vec<2, T, P>(v.z, v.w);
 
  165         template<
typename T, qualifier P>
 
  166         GLM_INLINE glm::vec<2, T, P> wx(
const glm::vec<4, T, P> &v) {
 
  167                 return glm::vec<2, T, P>(v.w, v.x);
 
  171         template<
typename T, qualifier P>
 
  172         GLM_INLINE glm::vec<2, T, P> wy(
const glm::vec<4, T, P> &v) {
 
  173                 return glm::vec<2, T, P>(v.w, v.y);
 
  177         template<
typename T, qualifier P>
 
  178         GLM_INLINE glm::vec<2, T, P> wz(
const glm::vec<4, T, P> &v) {
 
  179                 return glm::vec<2, T, P>(v.w, v.z);
 
  183         template<
typename T, qualifier P>
 
  184         GLM_INLINE glm::vec<2, T, P> ww(
const glm::vec<4, T, P> &v) {
 
  185                 return glm::vec<2, T, P>(v.w, v.w);
 
  189         template<
typename T, qualifier P>
 
  190         GLM_INLINE glm::vec<3, T, P> xxx(
const glm::vec<1, T, P> &v) {
 
  191                 return glm::vec<3, T, P>(v.x, v.x, v.x);
 
  194         template<
typename T, qualifier P>
 
  195         GLM_INLINE glm::vec<3, T, P> xxx(
const glm::vec<2, T, P> &v) {
 
  196                 return glm::vec<3, T, P>(v.x, v.x, v.x);
 
  199         template<
typename T, qualifier P>
 
  200         GLM_INLINE glm::vec<3, T, P> xxx(
const glm::vec<3, T, P> &v) {
 
  201                 return glm::vec<3, T, P>(v.x, v.x, v.x);
 
  204         template<
typename T, qualifier P>
 
  205         GLM_INLINE glm::vec<3, T, P> xxx(
const glm::vec<4, T, P> &v) {
 
  206                 return glm::vec<3, T, P>(v.x, v.x, v.x);
 
  210         template<
typename T, qualifier P>
 
  211         GLM_INLINE glm::vec<3, T, P> xxy(
const glm::vec<2, T, P> &v) {
 
  212                 return glm::vec<3, T, P>(v.x, v.x, v.y);
 
  215         template<
typename T, qualifier P>
 
  216         GLM_INLINE glm::vec<3, T, P> xxy(
const glm::vec<3, T, P> &v) {
 
  217                 return glm::vec<3, T, P>(v.x, v.x, v.y);
 
  220         template<
typename T, qualifier P>
 
  221         GLM_INLINE glm::vec<3, T, P> xxy(
const glm::vec<4, T, P> &v) {
 
  222                 return glm::vec<3, T, P>(v.x, v.x, v.y);
 
  226         template<
typename T, qualifier P>
 
  227         GLM_INLINE glm::vec<3, T, P> xxz(
const glm::vec<3, T, P> &v) {
 
  228                 return glm::vec<3, T, P>(v.x, v.x, v.z);
 
  231         template<
typename T, qualifier P>
 
  232         GLM_INLINE glm::vec<3, T, P> xxz(
const glm::vec<4, T, P> &v) {
 
  233                 return glm::vec<3, T, P>(v.x, v.x, v.z);
 
  237         template<
typename T, qualifier P>
 
  238         GLM_INLINE glm::vec<3, T, P> xxw(
const glm::vec<4, T, P> &v) {
 
  239                 return glm::vec<3, T, P>(v.x, v.x, v.w);
 
  243         template<
typename T, qualifier P>
 
  244         GLM_INLINE glm::vec<3, T, P> xyx(
const glm::vec<2, T, P> &v) {
 
  245                 return glm::vec<3, T, P>(v.x, v.y, v.x);
 
  248         template<
typename T, qualifier P>
 
  249         GLM_INLINE glm::vec<3, T, P> xyx(
const glm::vec<3, T, P> &v) {
 
  250                 return glm::vec<3, T, P>(v.x, v.y, v.x);
 
  253         template<
typename T, qualifier P>
 
  254         GLM_INLINE glm::vec<3, T, P> xyx(
const glm::vec<4, T, P> &v) {
 
  255                 return glm::vec<3, T, P>(v.x, v.y, v.x);
 
  259         template<
typename T, qualifier P>
 
  260         GLM_INLINE glm::vec<3, T, P> xyy(
const glm::vec<2, T, P> &v) {
 
  261                 return glm::vec<3, T, P>(v.x, v.y, v.y);
 
  264         template<
typename T, qualifier P>
 
  265         GLM_INLINE glm::vec<3, T, P> xyy(
const glm::vec<3, T, P> &v) {
 
  266                 return glm::vec<3, T, P>(v.x, v.y, v.y);
 
  269         template<
typename T, qualifier P>
 
  270         GLM_INLINE glm::vec<3, T, P> xyy(
const glm::vec<4, T, P> &v) {
 
  271                 return glm::vec<3, T, P>(v.x, v.y, v.y);
 
  275         template<
typename T, qualifier P>
 
  276         GLM_INLINE glm::vec<3, T, P> xyz(
const glm::vec<3, T, P> &v) {
 
  277                 return glm::vec<3, T, P>(v.x, v.y, v.z);
 
  280         template<
typename T, qualifier P>
 
  281         GLM_INLINE glm::vec<3, T, P> xyz(
const glm::vec<4, T, P> &v) {
 
  282                 return glm::vec<3, T, P>(v.x, v.y, v.z);
 
  286         template<
typename T, qualifier P>
 
  287         GLM_INLINE glm::vec<3, T, P> xyw(
const glm::vec<4, T, P> &v) {
 
  288                 return glm::vec<3, T, P>(v.x, v.y, v.w);
 
  292         template<
typename T, qualifier P>
 
  293         GLM_INLINE glm::vec<3, T, P> xzx(
const glm::vec<3, T, P> &v) {
 
  294                 return glm::vec<3, T, P>(v.x, v.z, v.x);
 
  297         template<
typename T, qualifier P>
 
  298         GLM_INLINE glm::vec<3, T, P> xzx(
const glm::vec<4, T, P> &v) {
 
  299                 return glm::vec<3, T, P>(v.x, v.z, v.x);
 
  303         template<
typename T, qualifier P>
 
  304         GLM_INLINE glm::vec<3, T, P> xzy(
const glm::vec<3, T, P> &v) {
 
  305                 return glm::vec<3, T, P>(v.x, v.z, v.y);
 
  308         template<
typename T, qualifier P>
 
  309         GLM_INLINE glm::vec<3, T, P> xzy(
const glm::vec<4, T, P> &v) {
 
  310                 return glm::vec<3, T, P>(v.x, v.z, v.y);
 
  314         template<
typename T, qualifier P>
 
  315         GLM_INLINE glm::vec<3, T, P> xzz(
const glm::vec<3, T, P> &v) {
 
  316                 return glm::vec<3, T, P>(v.x, v.z, v.z);
 
  319         template<
typename T, qualifier P>
 
  320         GLM_INLINE glm::vec<3, T, P> xzz(
const glm::vec<4, T, P> &v) {
 
  321                 return glm::vec<3, T, P>(v.x, v.z, v.z);
 
  325         template<
typename T, qualifier P>
 
  326         GLM_INLINE glm::vec<3, T, P> xzw(
const glm::vec<4, T, P> &v) {
 
  327                 return glm::vec<3, T, P>(v.x, v.z, v.w);
 
  331         template<
typename T, qualifier P>
 
  332         GLM_INLINE glm::vec<3, T, P> xwx(
const glm::vec<4, T, P> &v) {
 
  333                 return glm::vec<3, T, P>(v.x, v.w, v.x);
 
  337         template<
typename T, qualifier P>
 
  338         GLM_INLINE glm::vec<3, T, P> xwy(
const glm::vec<4, T, P> &v) {
 
  339                 return glm::vec<3, T, P>(v.x, v.w, v.y);
 
  343         template<
typename T, qualifier P>
 
  344         GLM_INLINE glm::vec<3, T, P> xwz(
const glm::vec<4, T, P> &v) {
 
  345                 return glm::vec<3, T, P>(v.x, v.w, v.z);
 
  349         template<
typename T, qualifier P>
 
  350         GLM_INLINE glm::vec<3, T, P> xww(
const glm::vec<4, T, P> &v) {
 
  351                 return glm::vec<3, T, P>(v.x, v.w, v.w);
 
  355         template<
typename T, qualifier P>
 
  356         GLM_INLINE glm::vec<3, T, P> yxx(
const glm::vec<2, T, P> &v) {
 
  357                 return glm::vec<3, T, P>(v.y, v.x, v.x);
 
  360         template<
typename T, qualifier P>
 
  361         GLM_INLINE glm::vec<3, T, P> yxx(
const glm::vec<3, T, P> &v) {
 
  362                 return glm::vec<3, T, P>(v.y, v.x, v.x);
 
  365         template<
typename T, qualifier P>
 
  366         GLM_INLINE glm::vec<3, T, P> yxx(
const glm::vec<4, T, P> &v) {
 
  367                 return glm::vec<3, T, P>(v.y, v.x, v.x);
 
  371         template<
typename T, qualifier P>
 
  372         GLM_INLINE glm::vec<3, T, P> yxy(
const glm::vec<2, T, P> &v) {
 
  373                 return glm::vec<3, T, P>(v.y, v.x, v.y);
 
  376         template<
typename T, qualifier P>
 
  377         GLM_INLINE glm::vec<3, T, P> yxy(
const glm::vec<3, T, P> &v) {
 
  378                 return glm::vec<3, T, P>(v.y, v.x, v.y);
 
  381         template<
typename T, qualifier P>
 
  382         GLM_INLINE glm::vec<3, T, P> yxy(
const glm::vec<4, T, P> &v) {
 
  383                 return glm::vec<3, T, P>(v.y, v.x, v.y);
 
  387         template<
typename T, qualifier P>
 
  388         GLM_INLINE glm::vec<3, T, P> yxz(
const glm::vec<3, T, P> &v) {
 
  389                 return glm::vec<3, T, P>(v.y, v.x, v.z);
 
  392         template<
typename T, qualifier P>
 
  393         GLM_INLINE glm::vec<3, T, P> yxz(
const glm::vec<4, T, P> &v) {
 
  394                 return glm::vec<3, T, P>(v.y, v.x, v.z);
 
  398         template<
typename T, qualifier P>
 
  399         GLM_INLINE glm::vec<3, T, P> yxw(
const glm::vec<4, T, P> &v) {
 
  400                 return glm::vec<3, T, P>(v.y, v.x, v.w);
 
  404         template<
typename T, qualifier P>
 
  405         GLM_INLINE glm::vec<3, T, P> yyx(
const glm::vec<2, T, P> &v) {
 
  406                 return glm::vec<3, T, P>(v.y, v.y, v.x);
 
  409         template<
typename T, qualifier P>
 
  410         GLM_INLINE glm::vec<3, T, P> yyx(
const glm::vec<3, T, P> &v) {
 
  411                 return glm::vec<3, T, P>(v.y, v.y, v.x);
 
  414         template<
typename T, qualifier P>
 
  415         GLM_INLINE glm::vec<3, T, P> yyx(
const glm::vec<4, T, P> &v) {
 
  416                 return glm::vec<3, T, P>(v.y, v.y, v.x);
 
  420         template<
typename T, qualifier P>
 
  421         GLM_INLINE glm::vec<3, T, P> yyy(
const glm::vec<2, T, P> &v) {
 
  422                 return glm::vec<3, T, P>(v.y, v.y, v.y);
 
  425         template<
typename T, qualifier P>
 
  426         GLM_INLINE glm::vec<3, T, P> yyy(
const glm::vec<3, T, P> &v) {
 
  427                 return glm::vec<3, T, P>(v.y, v.y, v.y);
 
  430         template<
typename T, qualifier P>
 
  431         GLM_INLINE glm::vec<3, T, P> yyy(
const glm::vec<4, T, P> &v) {
 
  432                 return glm::vec<3, T, P>(v.y, v.y, v.y);
 
  436         template<
typename T, qualifier P>
 
  437         GLM_INLINE glm::vec<3, T, P> yyz(
const glm::vec<3, T, P> &v) {
 
  438                 return glm::vec<3, T, P>(v.y, v.y, v.z);
 
  441         template<
typename T, qualifier P>
 
  442         GLM_INLINE glm::vec<3, T, P> yyz(
const glm::vec<4, T, P> &v) {
 
  443                 return glm::vec<3, T, P>(v.y, v.y, v.z);
 
  447         template<
typename T, qualifier P>
 
  448         GLM_INLINE glm::vec<3, T, P> yyw(
const glm::vec<4, T, P> &v) {
 
  449                 return glm::vec<3, T, P>(v.y, v.y, v.w);
 
  453         template<
typename T, qualifier P>
 
  454         GLM_INLINE glm::vec<3, T, P> yzx(
const glm::vec<3, T, P> &v) {
 
  455                 return glm::vec<3, T, P>(v.y, v.z, v.x);
 
  458         template<
typename T, qualifier P>
 
  459         GLM_INLINE glm::vec<3, T, P> yzx(
const glm::vec<4, T, P> &v) {
 
  460                 return glm::vec<3, T, P>(v.y, v.z, v.x);
 
  464         template<
typename T, qualifier P>
 
  465         GLM_INLINE glm::vec<3, T, P> yzy(
const glm::vec<3, T, P> &v) {
 
  466                 return glm::vec<3, T, P>(v.y, v.z, v.y);
 
  469         template<
typename T, qualifier P>
 
  470         GLM_INLINE glm::vec<3, T, P> yzy(
const glm::vec<4, T, P> &v) {
 
  471                 return glm::vec<3, T, P>(v.y, v.z, v.y);
 
  475         template<
typename T, qualifier P>
 
  476         GLM_INLINE glm::vec<3, T, P> yzz(
const glm::vec<3, T, P> &v) {
 
  477                 return glm::vec<3, T, P>(v.y, v.z, v.z);
 
  480         template<
typename T, qualifier P>
 
  481         GLM_INLINE glm::vec<3, T, P> yzz(
const glm::vec<4, T, P> &v) {
 
  482                 return glm::vec<3, T, P>(v.y, v.z, v.z);
 
  486         template<
typename T, qualifier P>
 
  487         GLM_INLINE glm::vec<3, T, P> yzw(
const glm::vec<4, T, P> &v) {
 
  488                 return glm::vec<3, T, P>(v.y, v.z, v.w);
 
  492         template<
typename T, qualifier P>
 
  493         GLM_INLINE glm::vec<3, T, P> ywx(
const glm::vec<4, T, P> &v) {
 
  494                 return glm::vec<3, T, P>(v.y, v.w, v.x);
 
  498         template<
typename T, qualifier P>
 
  499         GLM_INLINE glm::vec<3, T, P> ywy(
const glm::vec<4, T, P> &v) {
 
  500                 return glm::vec<3, T, P>(v.y, v.w, v.y);
 
  504         template<
typename T, qualifier P>
 
  505         GLM_INLINE glm::vec<3, T, P> ywz(
const glm::vec<4, T, P> &v) {
 
  506                 return glm::vec<3, T, P>(v.y, v.w, v.z);
 
  510         template<
typename T, qualifier P>
 
  511         GLM_INLINE glm::vec<3, T, P> yww(
const glm::vec<4, T, P> &v) {
 
  512                 return glm::vec<3, T, P>(v.y, v.w, v.w);
 
  516         template<
typename T, qualifier P>
 
  517         GLM_INLINE glm::vec<3, T, P> zxx(
const glm::vec<3, T, P> &v) {
 
  518                 return glm::vec<3, T, P>(v.z, v.x, v.x);
 
  521         template<
typename T, qualifier P>
 
  522         GLM_INLINE glm::vec<3, T, P> zxx(
const glm::vec<4, T, P> &v) {
 
  523                 return glm::vec<3, T, P>(v.z, v.x, v.x);
 
  527         template<
typename T, qualifier P>
 
  528         GLM_INLINE glm::vec<3, T, P> zxy(
const glm::vec<3, T, P> &v) {
 
  529                 return glm::vec<3, T, P>(v.z, v.x, v.y);
 
  532         template<
typename T, qualifier P>
 
  533         GLM_INLINE glm::vec<3, T, P> zxy(
const glm::vec<4, T, P> &v) {
 
  534                 return glm::vec<3, T, P>(v.z, v.x, v.y);
 
  538         template<
typename T, qualifier P>
 
  539         GLM_INLINE glm::vec<3, T, P> zxz(
const glm::vec<3, T, P> &v) {
 
  540                 return glm::vec<3, T, P>(v.z, v.x, v.z);
 
  543         template<
typename T, qualifier P>
 
  544         GLM_INLINE glm::vec<3, T, P> zxz(
const glm::vec<4, T, P> &v) {
 
  545                 return glm::vec<3, T, P>(v.z, v.x, v.z);
 
  549         template<
typename T, qualifier P>
 
  550         GLM_INLINE glm::vec<3, T, P> zxw(
const glm::vec<4, T, P> &v) {
 
  551                 return glm::vec<3, T, P>(v.z, v.x, v.w);
 
  555         template<
typename T, qualifier P>
 
  556         GLM_INLINE glm::vec<3, T, P> zyx(
const glm::vec<3, T, P> &v) {
 
  557                 return glm::vec<3, T, P>(v.z, v.y, v.x);
 
  560         template<
typename T, qualifier P>
 
  561         GLM_INLINE glm::vec<3, T, P> zyx(
const glm::vec<4, T, P> &v) {
 
  562                 return glm::vec<3, T, P>(v.z, v.y, v.x);
 
  566         template<
typename T, qualifier P>
 
  567         GLM_INLINE glm::vec<3, T, P> zyy(
const glm::vec<3, T, P> &v) {
 
  568                 return glm::vec<3, T, P>(v.z, v.y, v.y);
 
  571         template<
typename T, qualifier P>
 
  572         GLM_INLINE glm::vec<3, T, P> zyy(
const glm::vec<4, T, P> &v) {
 
  573                 return glm::vec<3, T, P>(v.z, v.y, v.y);
 
  577         template<
typename T, qualifier P>
 
  578         GLM_INLINE glm::vec<3, T, P> zyz(
const glm::vec<3, T, P> &v) {
 
  579                 return glm::vec<3, T, P>(v.z, v.y, v.z);
 
  582         template<
typename T, qualifier P>
 
  583         GLM_INLINE glm::vec<3, T, P> zyz(
const glm::vec<4, T, P> &v) {
 
  584                 return glm::vec<3, T, P>(v.z, v.y, v.z);
 
  588         template<
typename T, qualifier P>
 
  589         GLM_INLINE glm::vec<3, T, P> zyw(
const glm::vec<4, T, P> &v) {
 
  590                 return glm::vec<3, T, P>(v.z, v.y, v.w);
 
  594         template<
typename T, qualifier P>
 
  595         GLM_INLINE glm::vec<3, T, P> zzx(
const glm::vec<3, T, P> &v) {
 
  596                 return glm::vec<3, T, P>(v.z, v.z, v.x);
 
  599         template<
typename T, qualifier P>
 
  600         GLM_INLINE glm::vec<3, T, P> zzx(
const glm::vec<4, T, P> &v) {
 
  601                 return glm::vec<3, T, P>(v.z, v.z, v.x);
 
  605         template<
typename T, qualifier P>
 
  606         GLM_INLINE glm::vec<3, T, P> zzy(
const glm::vec<3, T, P> &v) {
 
  607                 return glm::vec<3, T, P>(v.z, v.z, v.y);
 
  610         template<
typename T, qualifier P>
 
  611         GLM_INLINE glm::vec<3, T, P> zzy(
const glm::vec<4, T, P> &v) {
 
  612                 return glm::vec<3, T, P>(v.z, v.z, v.y);
 
  616         template<
typename T, qualifier P>
 
  617         GLM_INLINE glm::vec<3, T, P> zzz(
const glm::vec<3, T, P> &v) {
 
  618                 return glm::vec<3, T, P>(v.z, v.z, v.z);
 
  621         template<
typename T, qualifier P>
 
  622         GLM_INLINE glm::vec<3, T, P> zzz(
const glm::vec<4, T, P> &v) {
 
  623                 return glm::vec<3, T, P>(v.z, v.z, v.z);
 
  627         template<
typename T, qualifier P>
 
  628         GLM_INLINE glm::vec<3, T, P> zzw(
const glm::vec<4, T, P> &v) {
 
  629                 return glm::vec<3, T, P>(v.z, v.z, v.w);
 
  633         template<
typename T, qualifier P>
 
  634         GLM_INLINE glm::vec<3, T, P> zwx(
const glm::vec<4, T, P> &v) {
 
  635                 return glm::vec<3, T, P>(v.z, v.w, v.x);
 
  639         template<
typename T, qualifier P>
 
  640         GLM_INLINE glm::vec<3, T, P> zwy(
const glm::vec<4, T, P> &v) {
 
  641                 return glm::vec<3, T, P>(v.z, v.w, v.y);
 
  645         template<
typename T, qualifier P>
 
  646         GLM_INLINE glm::vec<3, T, P> zwz(
const glm::vec<4, T, P> &v) {
 
  647                 return glm::vec<3, T, P>(v.z, v.w, v.z);
 
  651         template<
typename T, qualifier P>
 
  652         GLM_INLINE glm::vec<3, T, P> zww(
const glm::vec<4, T, P> &v) {
 
  653                 return glm::vec<3, T, P>(v.z, v.w, v.w);
 
  657         template<
typename T, qualifier P>
 
  658         GLM_INLINE glm::vec<3, T, P> wxx(
const glm::vec<4, T, P> &v) {
 
  659                 return glm::vec<3, T, P>(v.w, v.x, v.x);
 
  663         template<
typename T, qualifier P>
 
  664         GLM_INLINE glm::vec<3, T, P> wxy(
const glm::vec<4, T, P> &v) {
 
  665                 return glm::vec<3, T, P>(v.w, v.x, v.y);
 
  669         template<
typename T, qualifier P>
 
  670         GLM_INLINE glm::vec<3, T, P> wxz(
const glm::vec<4, T, P> &v) {
 
  671                 return glm::vec<3, T, P>(v.w, v.x, v.z);
 
  675         template<
typename T, qualifier P>
 
  676         GLM_INLINE glm::vec<3, T, P> wxw(
const glm::vec<4, T, P> &v) {
 
  677                 return glm::vec<3, T, P>(v.w, v.x, v.w);
 
  681         template<
typename T, qualifier P>
 
  682         GLM_INLINE glm::vec<3, T, P> wyx(
const glm::vec<4, T, P> &v) {
 
  683                 return glm::vec<3, T, P>(v.w, v.y, v.x);
 
  687         template<
typename T, qualifier P>
 
  688         GLM_INLINE glm::vec<3, T, P> wyy(
const glm::vec<4, T, P> &v) {
 
  689                 return glm::vec<3, T, P>(v.w, v.y, v.y);
 
  693         template<
typename T, qualifier P>
 
  694         GLM_INLINE glm::vec<3, T, P> wyz(
const glm::vec<4, T, P> &v) {
 
  695                 return glm::vec<3, T, P>(v.w, v.y, v.z);
 
  699         template<
typename T, qualifier P>
 
  700         GLM_INLINE glm::vec<3, T, P> wyw(
const glm::vec<4, T, P> &v) {
 
  701                 return glm::vec<3, T, P>(v.w, v.y, v.w);
 
  705         template<
typename T, qualifier P>
 
  706         GLM_INLINE glm::vec<3, T, P> wzx(
const glm::vec<4, T, P> &v) {
 
  707                 return glm::vec<3, T, P>(v.w, v.z, v.x);
 
  711         template<
typename T, qualifier P>
 
  712         GLM_INLINE glm::vec<3, T, P> wzy(
const glm::vec<4, T, P> &v) {
 
  713                 return glm::vec<3, T, P>(v.w, v.z, v.y);
 
  717         template<
typename T, qualifier P>
 
  718         GLM_INLINE glm::vec<3, T, P> wzz(
const glm::vec<4, T, P> &v) {
 
  719                 return glm::vec<3, T, P>(v.w, v.z, v.z);
 
  723         template<
typename T, qualifier P>
 
  724         GLM_INLINE glm::vec<3, T, P> wzw(
const glm::vec<4, T, P> &v) {
 
  725                 return glm::vec<3, T, P>(v.w, v.z, v.w);
 
  729         template<
typename T, qualifier P>
 
  730         GLM_INLINE glm::vec<3, T, P> wwx(
const glm::vec<4, T, P> &v) {
 
  731                 return glm::vec<3, T, P>(v.w, v.w, v.x);
 
  735         template<
typename T, qualifier P>
 
  736         GLM_INLINE glm::vec<3, T, P> wwy(
const glm::vec<4, T, P> &v) {
 
  737                 return glm::vec<3, T, P>(v.w, v.w, v.y);
 
  741         template<
typename T, qualifier P>
 
  742         GLM_INLINE glm::vec<3, T, P> wwz(
const glm::vec<4, T, P> &v) {
 
  743                 return glm::vec<3, T, P>(v.w, v.w, v.z);
 
  747         template<
typename T, qualifier P>
 
  748         GLM_INLINE glm::vec<3, T, P> www(
const glm::vec<4, T, P> &v) {
 
  749                 return glm::vec<3, T, P>(v.w, v.w, v.w);
 
  753         template<
typename T, qualifier P>
 
  754         GLM_INLINE glm::vec<4, T, P> xxxx(
const glm::vec<1, T, P> &v) {
 
  755                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.x);
 
  758         template<
typename T, qualifier P>
 
  759         GLM_INLINE glm::vec<4, T, P> xxxx(
const glm::vec<2, T, P> &v) {
 
  760                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.x);
 
  763         template<
typename T, qualifier P>
 
  764         GLM_INLINE glm::vec<4, T, P> xxxx(
const glm::vec<3, T, P> &v) {
 
  765                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.x);
 
  768         template<
typename T, qualifier P>
 
  769         GLM_INLINE glm::vec<4, T, P> xxxx(
const glm::vec<4, T, P> &v) {
 
  770                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.x);
 
  774         template<
typename T, qualifier P>
 
  775         GLM_INLINE glm::vec<4, T, P> xxxy(
const glm::vec<2, T, P> &v) {
 
  776                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.y);
 
  779         template<
typename T, qualifier P>
 
  780         GLM_INLINE glm::vec<4, T, P> xxxy(
const glm::vec<3, T, P> &v) {
 
  781                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.y);
 
  784         template<
typename T, qualifier P>
 
  785         GLM_INLINE glm::vec<4, T, P> xxxy(
const glm::vec<4, T, P> &v) {
 
  786                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.y);
 
  790         template<
typename T, qualifier P>
 
  791         GLM_INLINE glm::vec<4, T, P> xxxz(
const glm::vec<3, T, P> &v) {
 
  792                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.z);
 
  795         template<
typename T, qualifier P>
 
  796         GLM_INLINE glm::vec<4, T, P> xxxz(
const glm::vec<4, T, P> &v) {
 
  797                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.z);
 
  801         template<
typename T, qualifier P>
 
  802         GLM_INLINE glm::vec<4, T, P> xxxw(
const glm::vec<4, T, P> &v) {
 
  803                 return glm::vec<4, T, P>(v.x, v.x, v.x, v.w);
 
  807         template<
typename T, qualifier P>
 
  808         GLM_INLINE glm::vec<4, T, P> xxyx(
const glm::vec<2, T, P> &v) {
 
  809                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.x);
 
  812         template<
typename T, qualifier P>
 
  813         GLM_INLINE glm::vec<4, T, P> xxyx(
const glm::vec<3, T, P> &v) {
 
  814                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.x);
 
  817         template<
typename T, qualifier P>
 
  818         GLM_INLINE glm::vec<4, T, P> xxyx(
const glm::vec<4, T, P> &v) {
 
  819                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.x);
 
  823         template<
typename T, qualifier P>
 
  824         GLM_INLINE glm::vec<4, T, P> xxyy(
const glm::vec<2, T, P> &v) {
 
  825                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.y);
 
  828         template<
typename T, qualifier P>
 
  829         GLM_INLINE glm::vec<4, T, P> xxyy(
const glm::vec<3, T, P> &v) {
 
  830                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.y);
 
  833         template<
typename T, qualifier P>
 
  834         GLM_INLINE glm::vec<4, T, P> xxyy(
const glm::vec<4, T, P> &v) {
 
  835                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.y);
 
  839         template<
typename T, qualifier P>
 
  840         GLM_INLINE glm::vec<4, T, P> xxyz(
const glm::vec<3, T, P> &v) {
 
  841                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.z);
 
  844         template<
typename T, qualifier P>
 
  845         GLM_INLINE glm::vec<4, T, P> xxyz(
const glm::vec<4, T, P> &v) {
 
  846                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.z);
 
  850         template<
typename T, qualifier P>
 
  851         GLM_INLINE glm::vec<4, T, P> xxyw(
const glm::vec<4, T, P> &v) {
 
  852                 return glm::vec<4, T, P>(v.x, v.x, v.y, v.w);
 
  856         template<
typename T, qualifier P>
 
  857         GLM_INLINE glm::vec<4, T, P> xxzx(
const glm::vec<3, T, P> &v) {
 
  858                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.x);
 
  861         template<
typename T, qualifier P>
 
  862         GLM_INLINE glm::vec<4, T, P> xxzx(
const glm::vec<4, T, P> &v) {
 
  863                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.x);
 
  867         template<
typename T, qualifier P>
 
  868         GLM_INLINE glm::vec<4, T, P> xxzy(
const glm::vec<3, T, P> &v) {
 
  869                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.y);
 
  872         template<
typename T, qualifier P>
 
  873         GLM_INLINE glm::vec<4, T, P> xxzy(
const glm::vec<4, T, P> &v) {
 
  874                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.y);
 
  878         template<
typename T, qualifier P>
 
  879         GLM_INLINE glm::vec<4, T, P> xxzz(
const glm::vec<3, T, P> &v) {
 
  880                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.z);
 
  883         template<
typename T, qualifier P>
 
  884         GLM_INLINE glm::vec<4, T, P> xxzz(
const glm::vec<4, T, P> &v) {
 
  885                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.z);
 
  889         template<
typename T, qualifier P>
 
  890         GLM_INLINE glm::vec<4, T, P> xxzw(
const glm::vec<4, T, P> &v) {
 
  891                 return glm::vec<4, T, P>(v.x, v.x, v.z, v.w);
 
  895         template<
typename T, qualifier P>
 
  896         GLM_INLINE glm::vec<4, T, P> xxwx(
const glm::vec<4, T, P> &v) {
 
  897                 return glm::vec<4, T, P>(v.x, v.x, v.w, v.x);
 
  901         template<
typename T, qualifier P>
 
  902         GLM_INLINE glm::vec<4, T, P> xxwy(
const glm::vec<4, T, P> &v) {
 
  903                 return glm::vec<4, T, P>(v.x, v.x, v.w, v.y);
 
  907         template<
typename T, qualifier P>
 
  908         GLM_INLINE glm::vec<4, T, P> xxwz(
const glm::vec<4, T, P> &v) {
 
  909                 return glm::vec<4, T, P>(v.x, v.x, v.w, v.z);
 
  913         template<
typename T, qualifier P>
 
  914         GLM_INLINE glm::vec<4, T, P> xxww(
const glm::vec<4, T, P> &v) {
 
  915                 return glm::vec<4, T, P>(v.x, v.x, v.w, v.w);
 
  919         template<
typename T, qualifier P>
 
  920         GLM_INLINE glm::vec<4, T, P> xyxx(
const glm::vec<2, T, P> &v) {
 
  921                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.x);
 
  924         template<
typename T, qualifier P>
 
  925         GLM_INLINE glm::vec<4, T, P> xyxx(
const glm::vec<3, T, P> &v) {
 
  926                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.x);
 
  929         template<
typename T, qualifier P>
 
  930         GLM_INLINE glm::vec<4, T, P> xyxx(
const glm::vec<4, T, P> &v) {
 
  931                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.x);
 
  935         template<
typename T, qualifier P>
 
  936         GLM_INLINE glm::vec<4, T, P> xyxy(
const glm::vec<2, T, P> &v) {
 
  937                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.y);
 
  940         template<
typename T, qualifier P>
 
  941         GLM_INLINE glm::vec<4, T, P> xyxy(
const glm::vec<3, T, P> &v) {
 
  942                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.y);
 
  945         template<
typename T, qualifier P>
 
  946         GLM_INLINE glm::vec<4, T, P> xyxy(
const glm::vec<4, T, P> &v) {
 
  947                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.y);
 
  951         template<
typename T, qualifier P>
 
  952         GLM_INLINE glm::vec<4, T, P> xyxz(
const glm::vec<3, T, P> &v) {
 
  953                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.z);
 
  956         template<
typename T, qualifier P>
 
  957         GLM_INLINE glm::vec<4, T, P> xyxz(
const glm::vec<4, T, P> &v) {
 
  958                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.z);
 
  962         template<
typename T, qualifier P>
 
  963         GLM_INLINE glm::vec<4, T, P> xyxw(
const glm::vec<4, T, P> &v) {
 
  964                 return glm::vec<4, T, P>(v.x, v.y, v.x, v.w);
 
  968         template<
typename T, qualifier P>
 
  969         GLM_INLINE glm::vec<4, T, P> xyyx(
const glm::vec<2, T, P> &v) {
 
  970                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.x);
 
  973         template<
typename T, qualifier P>
 
  974         GLM_INLINE glm::vec<4, T, P> xyyx(
const glm::vec<3, T, P> &v) {
 
  975                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.x);
 
  978         template<
typename T, qualifier P>
 
  979         GLM_INLINE glm::vec<4, T, P> xyyx(
const glm::vec<4, T, P> &v) {
 
  980                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.x);
 
  984         template<
typename T, qualifier P>
 
  985         GLM_INLINE glm::vec<4, T, P> xyyy(
const glm::vec<2, T, P> &v) {
 
  986                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.y);
 
  989         template<
typename T, qualifier P>
 
  990         GLM_INLINE glm::vec<4, T, P> xyyy(
const glm::vec<3, T, P> &v) {
 
  991                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.y);
 
  994         template<
typename T, qualifier P>
 
  995         GLM_INLINE glm::vec<4, T, P> xyyy(
const glm::vec<4, T, P> &v) {
 
  996                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.y);
 
 1000         template<
typename T, qualifier P>
 
 1001         GLM_INLINE glm::vec<4, T, P> xyyz(
const glm::vec<3, T, P> &v) {
 
 1002                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.z);
 
 1005         template<
typename T, qualifier P>
 
 1006         GLM_INLINE glm::vec<4, T, P> xyyz(
const glm::vec<4, T, P> &v) {
 
 1007                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.z);
 
 1011         template<
typename T, qualifier P>
 
 1012         GLM_INLINE glm::vec<4, T, P> xyyw(
const glm::vec<4, T, P> &v) {
 
 1013                 return glm::vec<4, T, P>(v.x, v.y, v.y, v.w);
 
 1017         template<
typename T, qualifier P>
 
 1018         GLM_INLINE glm::vec<4, T, P> xyzx(
const glm::vec<3, T, P> &v) {
 
 1019                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.x);
 
 1022         template<
typename T, qualifier P>
 
 1023         GLM_INLINE glm::vec<4, T, P> xyzx(
const glm::vec<4, T, P> &v) {
 
 1024                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.x);
 
 1028         template<
typename T, qualifier P>
 
 1029         GLM_INLINE glm::vec<4, T, P> xyzy(
const glm::vec<3, T, P> &v) {
 
 1030                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.y);
 
 1033         template<
typename T, qualifier P>
 
 1034         GLM_INLINE glm::vec<4, T, P> xyzy(
const glm::vec<4, T, P> &v) {
 
 1035                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.y);
 
 1039         template<
typename T, qualifier P>
 
 1040         GLM_INLINE glm::vec<4, T, P> xyzz(
const glm::vec<3, T, P> &v) {
 
 1041                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.z);
 
 1044         template<
typename T, qualifier P>
 
 1045         GLM_INLINE glm::vec<4, T, P> xyzz(
const glm::vec<4, T, P> &v) {
 
 1046                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.z);
 
 1050         template<
typename T, qualifier P>
 
 1051         GLM_INLINE glm::vec<4, T, P> xyzw(
const glm::vec<4, T, P> &v) {
 
 1052                 return glm::vec<4, T, P>(v.x, v.y, v.z, v.w);
 
 1056         template<
typename T, qualifier P>
 
 1057         GLM_INLINE glm::vec<4, T, P> xywx(
const glm::vec<4, T, P> &v) {
 
 1058                 return glm::vec<4, T, P>(v.x, v.y, v.w, v.x);
 
 1062         template<
typename T, qualifier P>
 
 1063         GLM_INLINE glm::vec<4, T, P> xywy(
const glm::vec<4, T, P> &v) {
 
 1064                 return glm::vec<4, T, P>(v.x, v.y, v.w, v.y);
 
 1068         template<
typename T, qualifier P>
 
 1069         GLM_INLINE glm::vec<4, T, P> xywz(
const glm::vec<4, T, P> &v) {
 
 1070                 return glm::vec<4, T, P>(v.x, v.y, v.w, v.z);
 
 1074         template<
typename T, qualifier P>
 
 1075         GLM_INLINE glm::vec<4, T, P> xyww(
const glm::vec<4, T, P> &v) {
 
 1076                 return glm::vec<4, T, P>(v.x, v.y, v.w, v.w);
 
 1080         template<
typename T, qualifier P>
 
 1081         GLM_INLINE glm::vec<4, T, P> xzxx(
const glm::vec<3, T, P> &v) {
 
 1082                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.x);
 
 1085         template<
typename T, qualifier P>
 
 1086         GLM_INLINE glm::vec<4, T, P> xzxx(
const glm::vec<4, T, P> &v) {
 
 1087                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.x);
 
 1091         template<
typename T, qualifier P>
 
 1092         GLM_INLINE glm::vec<4, T, P> xzxy(
const glm::vec<3, T, P> &v) {
 
 1093                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.y);
 
 1096         template<
typename T, qualifier P>
 
 1097         GLM_INLINE glm::vec<4, T, P> xzxy(
const glm::vec<4, T, P> &v) {
 
 1098                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.y);
 
 1102         template<
typename T, qualifier P>
 
 1103         GLM_INLINE glm::vec<4, T, P> xzxz(
const glm::vec<3, T, P> &v) {
 
 1104                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.z);
 
 1107         template<
typename T, qualifier P>
 
 1108         GLM_INLINE glm::vec<4, T, P> xzxz(
const glm::vec<4, T, P> &v) {
 
 1109                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.z);
 
 1113         template<
typename T, qualifier P>
 
 1114         GLM_INLINE glm::vec<4, T, P> xzxw(
const glm::vec<4, T, P> &v) {
 
 1115                 return glm::vec<4, T, P>(v.x, v.z, v.x, v.w);
 
 1119         template<
typename T, qualifier P>
 
 1120         GLM_INLINE glm::vec<4, T, P> xzyx(
const glm::vec<3, T, P> &v) {
 
 1121                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.x);
 
 1124         template<
typename T, qualifier P>
 
 1125         GLM_INLINE glm::vec<4, T, P> xzyx(
const glm::vec<4, T, P> &v) {
 
 1126                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.x);
 
 1130         template<
typename T, qualifier P>
 
 1131         GLM_INLINE glm::vec<4, T, P> xzyy(
const glm::vec<3, T, P> &v) {
 
 1132                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.y);
 
 1135         template<
typename T, qualifier P>
 
 1136         GLM_INLINE glm::vec<4, T, P> xzyy(
const glm::vec<4, T, P> &v) {
 
 1137                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.y);
 
 1141         template<
typename T, qualifier P>
 
 1142         GLM_INLINE glm::vec<4, T, P> xzyz(
const glm::vec<3, T, P> &v) {
 
 1143                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.z);
 
 1146         template<
typename T, qualifier P>
 
 1147         GLM_INLINE glm::vec<4, T, P> xzyz(
const glm::vec<4, T, P> &v) {
 
 1148                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.z);
 
 1152         template<
typename T, qualifier P>
 
 1153         GLM_INLINE glm::vec<4, T, P> xzyw(
const glm::vec<4, T, P> &v) {
 
 1154                 return glm::vec<4, T, P>(v.x, v.z, v.y, v.w);
 
 1158         template<
typename T, qualifier P>
 
 1159         GLM_INLINE glm::vec<4, T, P> xzzx(
const glm::vec<3, T, P> &v) {
 
 1160                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.x);
 
 1163         template<
typename T, qualifier P>
 
 1164         GLM_INLINE glm::vec<4, T, P> xzzx(
const glm::vec<4, T, P> &v) {
 
 1165                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.x);
 
 1169         template<
typename T, qualifier P>
 
 1170         GLM_INLINE glm::vec<4, T, P> xzzy(
const glm::vec<3, T, P> &v) {
 
 1171                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.y);
 
 1174         template<
typename T, qualifier P>
 
 1175         GLM_INLINE glm::vec<4, T, P> xzzy(
const glm::vec<4, T, P> &v) {
 
 1176                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.y);
 
 1180         template<
typename T, qualifier P>
 
 1181         GLM_INLINE glm::vec<4, T, P> xzzz(
const glm::vec<3, T, P> &v) {
 
 1182                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.z);
 
 1185         template<
typename T, qualifier P>
 
 1186         GLM_INLINE glm::vec<4, T, P> xzzz(
const glm::vec<4, T, P> &v) {
 
 1187                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.z);
 
 1191         template<
typename T, qualifier P>
 
 1192         GLM_INLINE glm::vec<4, T, P> xzzw(
const glm::vec<4, T, P> &v) {
 
 1193                 return glm::vec<4, T, P>(v.x, v.z, v.z, v.w);
 
 1197         template<
typename T, qualifier P>
 
 1198         GLM_INLINE glm::vec<4, T, P> xzwx(
const glm::vec<4, T, P> &v) {
 
 1199                 return glm::vec<4, T, P>(v.x, v.z, v.w, v.x);
 
 1203         template<
typename T, qualifier P>
 
 1204         GLM_INLINE glm::vec<4, T, P> xzwy(
const glm::vec<4, T, P> &v) {
 
 1205                 return glm::vec<4, T, P>(v.x, v.z, v.w, v.y);
 
 1209         template<
typename T, qualifier P>
 
 1210         GLM_INLINE glm::vec<4, T, P> xzwz(
const glm::vec<4, T, P> &v) {
 
 1211                 return glm::vec<4, T, P>(v.x, v.z, v.w, v.z);
 
 1215         template<
typename T, qualifier P>
 
 1216         GLM_INLINE glm::vec<4, T, P> xzww(
const glm::vec<4, T, P> &v) {
 
 1217                 return glm::vec<4, T, P>(v.x, v.z, v.w, v.w);
 
 1221         template<
typename T, qualifier P>
 
 1222         GLM_INLINE glm::vec<4, T, P> xwxx(
const glm::vec<4, T, P> &v) {
 
 1223                 return glm::vec<4, T, P>(v.x, v.w, v.x, v.x);
 
 1227         template<
typename T, qualifier P>
 
 1228         GLM_INLINE glm::vec<4, T, P> xwxy(
const glm::vec<4, T, P> &v) {
 
 1229                 return glm::vec<4, T, P>(v.x, v.w, v.x, v.y);
 
 1233         template<
typename T, qualifier P>
 
 1234         GLM_INLINE glm::vec<4, T, P> xwxz(
const glm::vec<4, T, P> &v) {
 
 1235                 return glm::vec<4, T, P>(v.x, v.w, v.x, v.z);
 
 1239         template<
typename T, qualifier P>
 
 1240         GLM_INLINE glm::vec<4, T, P> xwxw(
const glm::vec<4, T, P> &v) {
 
 1241                 return glm::vec<4, T, P>(v.x, v.w, v.x, v.w);
 
 1245         template<
typename T, qualifier P>
 
 1246         GLM_INLINE glm::vec<4, T, P> xwyx(
const glm::vec<4, T, P> &v) {
 
 1247                 return glm::vec<4, T, P>(v.x, v.w, v.y, v.x);
 
 1251         template<
typename T, qualifier P>
 
 1252         GLM_INLINE glm::vec<4, T, P> xwyy(
const glm::vec<4, T, P> &v) {
 
 1253                 return glm::vec<4, T, P>(v.x, v.w, v.y, v.y);
 
 1257         template<
typename T, qualifier P>
 
 1258         GLM_INLINE glm::vec<4, T, P> xwyz(
const glm::vec<4, T, P> &v) {
 
 1259                 return glm::vec<4, T, P>(v.x, v.w, v.y, v.z);
 
 1263         template<
typename T, qualifier P>
 
 1264         GLM_INLINE glm::vec<4, T, P> xwyw(
const glm::vec<4, T, P> &v) {
 
 1265                 return glm::vec<4, T, P>(v.x, v.w, v.y, v.w);
 
 1269         template<
typename T, qualifier P>
 
 1270         GLM_INLINE glm::vec<4, T, P> xwzx(
const glm::vec<4, T, P> &v) {
 
 1271                 return glm::vec<4, T, P>(v.x, v.w, v.z, v.x);
 
 1275         template<
typename T, qualifier P>
 
 1276         GLM_INLINE glm::vec<4, T, P> xwzy(
const glm::vec<4, T, P> &v) {
 
 1277                 return glm::vec<4, T, P>(v.x, v.w, v.z, v.y);
 
 1281         template<
typename T, qualifier P>
 
 1282         GLM_INLINE glm::vec<4, T, P> xwzz(
const glm::vec<4, T, P> &v) {
 
 1283                 return glm::vec<4, T, P>(v.x, v.w, v.z, v.z);
 
 1287         template<
typename T, qualifier P>
 
 1288         GLM_INLINE glm::vec<4, T, P> xwzw(
const glm::vec<4, T, P> &v) {
 
 1289                 return glm::vec<4, T, P>(v.x, v.w, v.z, v.w);
 
 1293         template<
typename T, qualifier P>
 
 1294         GLM_INLINE glm::vec<4, T, P> xwwx(
const glm::vec<4, T, P> &v) {
 
 1295                 return glm::vec<4, T, P>(v.x, v.w, v.w, v.x);
 
 1299         template<
typename T, qualifier P>
 
 1300         GLM_INLINE glm::vec<4, T, P> xwwy(
const glm::vec<4, T, P> &v) {
 
 1301                 return glm::vec<4, T, P>(v.x, v.w, v.w, v.y);
 
 1305         template<
typename T, qualifier P>
 
 1306         GLM_INLINE glm::vec<4, T, P> xwwz(
const glm::vec<4, T, P> &v) {
 
 1307                 return glm::vec<4, T, P>(v.x, v.w, v.w, v.z);
 
 1311         template<
typename T, qualifier P>
 
 1312         GLM_INLINE glm::vec<4, T, P> xwww(
const glm::vec<4, T, P> &v) {
 
 1313                 return glm::vec<4, T, P>(v.x, v.w, v.w, v.w);
 
 1317         template<
typename T, qualifier P>
 
 1318         GLM_INLINE glm::vec<4, T, P> yxxx(
const glm::vec<2, T, P> &v) {
 
 1319                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.x);
 
 1322         template<
typename T, qualifier P>
 
 1323         GLM_INLINE glm::vec<4, T, P> yxxx(
const glm::vec<3, T, P> &v) {
 
 1324                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.x);
 
 1327         template<
typename T, qualifier P>
 
 1328         GLM_INLINE glm::vec<4, T, P> yxxx(
const glm::vec<4, T, P> &v) {
 
 1329                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.x);
 
 1333         template<
typename T, qualifier P>
 
 1334         GLM_INLINE glm::vec<4, T, P> yxxy(
const glm::vec<2, T, P> &v) {
 
 1335                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.y);
 
 1338         template<
typename T, qualifier P>
 
 1339         GLM_INLINE glm::vec<4, T, P> yxxy(
const glm::vec<3, T, P> &v) {
 
 1340                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.y);
 
 1343         template<
typename T, qualifier P>
 
 1344         GLM_INLINE glm::vec<4, T, P> yxxy(
const glm::vec<4, T, P> &v) {
 
 1345                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.y);
 
 1349         template<
typename T, qualifier P>
 
 1350         GLM_INLINE glm::vec<4, T, P> yxxz(
const glm::vec<3, T, P> &v) {
 
 1351                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.z);
 
 1354         template<
typename T, qualifier P>
 
 1355         GLM_INLINE glm::vec<4, T, P> yxxz(
const glm::vec<4, T, P> &v) {
 
 1356                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.z);
 
 1360         template<
typename T, qualifier P>
 
 1361         GLM_INLINE glm::vec<4, T, P> yxxw(
const glm::vec<4, T, P> &v) {
 
 1362                 return glm::vec<4, T, P>(v.y, v.x, v.x, v.w);
 
 1366         template<
typename T, qualifier P>
 
 1367         GLM_INLINE glm::vec<4, T, P> yxyx(
const glm::vec<2, T, P> &v) {
 
 1368                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.x);
 
 1371         template<
typename T, qualifier P>
 
 1372         GLM_INLINE glm::vec<4, T, P> yxyx(
const glm::vec<3, T, P> &v) {
 
 1373                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.x);
 
 1376         template<
typename T, qualifier P>
 
 1377         GLM_INLINE glm::vec<4, T, P> yxyx(
const glm::vec<4, T, P> &v) {
 
 1378                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.x);
 
 1382         template<
typename T, qualifier P>
 
 1383         GLM_INLINE glm::vec<4, T, P> yxyy(
const glm::vec<2, T, P> &v) {
 
 1384                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.y);
 
 1387         template<
typename T, qualifier P>
 
 1388         GLM_INLINE glm::vec<4, T, P> yxyy(
const glm::vec<3, T, P> &v) {
 
 1389                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.y);
 
 1392         template<
typename T, qualifier P>
 
 1393         GLM_INLINE glm::vec<4, T, P> yxyy(
const glm::vec<4, T, P> &v) {
 
 1394                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.y);
 
 1398         template<
typename T, qualifier P>
 
 1399         GLM_INLINE glm::vec<4, T, P> yxyz(
const glm::vec<3, T, P> &v) {
 
 1400                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.z);
 
 1403         template<
typename T, qualifier P>
 
 1404         GLM_INLINE glm::vec<4, T, P> yxyz(
const glm::vec<4, T, P> &v) {
 
 1405                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.z);
 
 1409         template<
typename T, qualifier P>
 
 1410         GLM_INLINE glm::vec<4, T, P> yxyw(
const glm::vec<4, T, P> &v) {
 
 1411                 return glm::vec<4, T, P>(v.y, v.x, v.y, v.w);
 
 1415         template<
typename T, qualifier P>
 
 1416         GLM_INLINE glm::vec<4, T, P> yxzx(
const glm::vec<3, T, P> &v) {
 
 1417                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.x);
 
 1420         template<
typename T, qualifier P>
 
 1421         GLM_INLINE glm::vec<4, T, P> yxzx(
const glm::vec<4, T, P> &v) {
 
 1422                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.x);
 
 1426         template<
typename T, qualifier P>
 
 1427         GLM_INLINE glm::vec<4, T, P> yxzy(
const glm::vec<3, T, P> &v) {
 
 1428                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.y);
 
 1431         template<
typename T, qualifier P>
 
 1432         GLM_INLINE glm::vec<4, T, P> yxzy(
const glm::vec<4, T, P> &v) {
 
 1433                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.y);
 
 1437         template<
typename T, qualifier P>
 
 1438         GLM_INLINE glm::vec<4, T, P> yxzz(
const glm::vec<3, T, P> &v) {
 
 1439                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.z);
 
 1442         template<
typename T, qualifier P>
 
 1443         GLM_INLINE glm::vec<4, T, P> yxzz(
const glm::vec<4, T, P> &v) {
 
 1444                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.z);
 
 1448         template<
typename T, qualifier P>
 
 1449         GLM_INLINE glm::vec<4, T, P> yxzw(
const glm::vec<4, T, P> &v) {
 
 1450                 return glm::vec<4, T, P>(v.y, v.x, v.z, v.w);
 
 1454         template<
typename T, qualifier P>
 
 1455         GLM_INLINE glm::vec<4, T, P> yxwx(
const glm::vec<4, T, P> &v) {
 
 1456                 return glm::vec<4, T, P>(v.y, v.x, v.w, v.x);
 
 1460         template<
typename T, qualifier P>
 
 1461         GLM_INLINE glm::vec<4, T, P> yxwy(
const glm::vec<4, T, P> &v) {
 
 1462                 return glm::vec<4, T, P>(v.y, v.x, v.w, v.y);
 
 1466         template<
typename T, qualifier P>
 
 1467         GLM_INLINE glm::vec<4, T, P> yxwz(
const glm::vec<4, T, P> &v) {
 
 1468                 return glm::vec<4, T, P>(v.y, v.x, v.w, v.z);
 
 1472         template<
typename T, qualifier P>
 
 1473         GLM_INLINE glm::vec<4, T, P> yxww(
const glm::vec<4, T, P> &v) {
 
 1474                 return glm::vec<4, T, P>(v.y, v.x, v.w, v.w);
 
 1478         template<
typename T, qualifier P>
 
 1479         GLM_INLINE glm::vec<4, T, P> yyxx(
const glm::vec<2, T, P> &v) {
 
 1480                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.x);
 
 1483         template<
typename T, qualifier P>
 
 1484         GLM_INLINE glm::vec<4, T, P> yyxx(
const glm::vec<3, T, P> &v) {
 
 1485                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.x);
 
 1488         template<
typename T, qualifier P>
 
 1489         GLM_INLINE glm::vec<4, T, P> yyxx(
const glm::vec<4, T, P> &v) {
 
 1490                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.x);
 
 1494         template<
typename T, qualifier P>
 
 1495         GLM_INLINE glm::vec<4, T, P> yyxy(
const glm::vec<2, T, P> &v) {
 
 1496                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.y);
 
 1499         template<
typename T, qualifier P>
 
 1500         GLM_INLINE glm::vec<4, T, P> yyxy(
const glm::vec<3, T, P> &v) {
 
 1501                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.y);
 
 1504         template<
typename T, qualifier P>
 
 1505         GLM_INLINE glm::vec<4, T, P> yyxy(
const glm::vec<4, T, P> &v) {
 
 1506                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.y);
 
 1510         template<
typename T, qualifier P>
 
 1511         GLM_INLINE glm::vec<4, T, P> yyxz(
const glm::vec<3, T, P> &v) {
 
 1512                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.z);
 
 1515         template<
typename T, qualifier P>
 
 1516         GLM_INLINE glm::vec<4, T, P> yyxz(
const glm::vec<4, T, P> &v) {
 
 1517                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.z);
 
 1521         template<
typename T, qualifier P>
 
 1522         GLM_INLINE glm::vec<4, T, P> yyxw(
const glm::vec<4, T, P> &v) {
 
 1523                 return glm::vec<4, T, P>(v.y, v.y, v.x, v.w);
 
 1527         template<
typename T, qualifier P>
 
 1528         GLM_INLINE glm::vec<4, T, P> yyyx(
const glm::vec<2, T, P> &v) {
 
 1529                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.x);
 
 1532         template<
typename T, qualifier P>
 
 1533         GLM_INLINE glm::vec<4, T, P> yyyx(
const glm::vec<3, T, P> &v) {
 
 1534                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.x);
 
 1537         template<
typename T, qualifier P>
 
 1538         GLM_INLINE glm::vec<4, T, P> yyyx(
const glm::vec<4, T, P> &v) {
 
 1539                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.x);
 
 1543         template<
typename T, qualifier P>
 
 1544         GLM_INLINE glm::vec<4, T, P> yyyy(
const glm::vec<2, T, P> &v) {
 
 1545                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.y);
 
 1548         template<
typename T, qualifier P>
 
 1549         GLM_INLINE glm::vec<4, T, P> yyyy(
const glm::vec<3, T, P> &v) {
 
 1550                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.y);
 
 1553         template<
typename T, qualifier P>
 
 1554         GLM_INLINE glm::vec<4, T, P> yyyy(
const glm::vec<4, T, P> &v) {
 
 1555                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.y);
 
 1559         template<
typename T, qualifier P>
 
 1560         GLM_INLINE glm::vec<4, T, P> yyyz(
const glm::vec<3, T, P> &v) {
 
 1561                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.z);
 
 1564         template<
typename T, qualifier P>
 
 1565         GLM_INLINE glm::vec<4, T, P> yyyz(
const glm::vec<4, T, P> &v) {
 
 1566                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.z);
 
 1570         template<
typename T, qualifier P>
 
 1571         GLM_INLINE glm::vec<4, T, P> yyyw(
const glm::vec<4, T, P> &v) {
 
 1572                 return glm::vec<4, T, P>(v.y, v.y, v.y, v.w);
 
 1576         template<
typename T, qualifier P>
 
 1577         GLM_INLINE glm::vec<4, T, P> yyzx(
const glm::vec<3, T, P> &v) {
 
 1578                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.x);
 
 1581         template<
typename T, qualifier P>
 
 1582         GLM_INLINE glm::vec<4, T, P> yyzx(
const glm::vec<4, T, P> &v) {
 
 1583                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.x);
 
 1587         template<
typename T, qualifier P>
 
 1588         GLM_INLINE glm::vec<4, T, P> yyzy(
const glm::vec<3, T, P> &v) {
 
 1589                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.y);
 
 1592         template<
typename T, qualifier P>
 
 1593         GLM_INLINE glm::vec<4, T, P> yyzy(
const glm::vec<4, T, P> &v) {
 
 1594                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.y);
 
 1598         template<
typename T, qualifier P>
 
 1599         GLM_INLINE glm::vec<4, T, P> yyzz(
const glm::vec<3, T, P> &v) {
 
 1600                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.z);
 
 1603         template<
typename T, qualifier P>
 
 1604         GLM_INLINE glm::vec<4, T, P> yyzz(
const glm::vec<4, T, P> &v) {
 
 1605                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.z);
 
 1609         template<
typename T, qualifier P>
 
 1610         GLM_INLINE glm::vec<4, T, P> yyzw(
const glm::vec<4, T, P> &v) {
 
 1611                 return glm::vec<4, T, P>(v.y, v.y, v.z, v.w);
 
 1615         template<
typename T, qualifier P>
 
 1616         GLM_INLINE glm::vec<4, T, P> yywx(
const glm::vec<4, T, P> &v) {
 
 1617                 return glm::vec<4, T, P>(v.y, v.y, v.w, v.x);
 
 1621         template<
typename T, qualifier P>
 
 1622         GLM_INLINE glm::vec<4, T, P> yywy(
const glm::vec<4, T, P> &v) {
 
 1623                 return glm::vec<4, T, P>(v.y, v.y, v.w, v.y);
 
 1627         template<
typename T, qualifier P>
 
 1628         GLM_INLINE glm::vec<4, T, P> yywz(
const glm::vec<4, T, P> &v) {
 
 1629                 return glm::vec<4, T, P>(v.y, v.y, v.w, v.z);
 
 1633         template<
typename T, qualifier P>
 
 1634         GLM_INLINE glm::vec<4, T, P> yyww(
const glm::vec<4, T, P> &v) {
 
 1635                 return glm::vec<4, T, P>(v.y, v.y, v.w, v.w);
 
 1639         template<
typename T, qualifier P>
 
 1640         GLM_INLINE glm::vec<4, T, P> yzxx(
const glm::vec<3, T, P> &v) {
 
 1641                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.x);
 
 1644         template<
typename T, qualifier P>
 
 1645         GLM_INLINE glm::vec<4, T, P> yzxx(
const glm::vec<4, T, P> &v) {
 
 1646                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.x);
 
 1650         template<
typename T, qualifier P>
 
 1651         GLM_INLINE glm::vec<4, T, P> yzxy(
const glm::vec<3, T, P> &v) {
 
 1652                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.y);
 
 1655         template<
typename T, qualifier P>
 
 1656         GLM_INLINE glm::vec<4, T, P> yzxy(
const glm::vec<4, T, P> &v) {
 
 1657                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.y);
 
 1661         template<
typename T, qualifier P>
 
 1662         GLM_INLINE glm::vec<4, T, P> yzxz(
const glm::vec<3, T, P> &v) {
 
 1663                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.z);
 
 1666         template<
typename T, qualifier P>
 
 1667         GLM_INLINE glm::vec<4, T, P> yzxz(
const glm::vec<4, T, P> &v) {
 
 1668                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.z);
 
 1672         template<
typename T, qualifier P>
 
 1673         GLM_INLINE glm::vec<4, T, P> yzxw(
const glm::vec<4, T, P> &v) {
 
 1674                 return glm::vec<4, T, P>(v.y, v.z, v.x, v.w);
 
 1678         template<
typename T, qualifier P>
 
 1679         GLM_INLINE glm::vec<4, T, P> yzyx(
const glm::vec<3, T, P> &v) {
 
 1680                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.x);
 
 1683         template<
typename T, qualifier P>
 
 1684         GLM_INLINE glm::vec<4, T, P> yzyx(
const glm::vec<4, T, P> &v) {
 
 1685                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.x);
 
 1689         template<
typename T, qualifier P>
 
 1690         GLM_INLINE glm::vec<4, T, P> yzyy(
const glm::vec<3, T, P> &v) {
 
 1691                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.y);
 
 1694         template<
typename T, qualifier P>
 
 1695         GLM_INLINE glm::vec<4, T, P> yzyy(
const glm::vec<4, T, P> &v) {
 
 1696                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.y);
 
 1700         template<
typename T, qualifier P>
 
 1701         GLM_INLINE glm::vec<4, T, P> yzyz(
const glm::vec<3, T, P> &v) {
 
 1702                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.z);
 
 1705         template<
typename T, qualifier P>
 
 1706         GLM_INLINE glm::vec<4, T, P> yzyz(
const glm::vec<4, T, P> &v) {
 
 1707                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.z);
 
 1711         template<
typename T, qualifier P>
 
 1712         GLM_INLINE glm::vec<4, T, P> yzyw(
const glm::vec<4, T, P> &v) {
 
 1713                 return glm::vec<4, T, P>(v.y, v.z, v.y, v.w);
 
 1717         template<
typename T, qualifier P>
 
 1718         GLM_INLINE glm::vec<4, T, P> yzzx(
const glm::vec<3, T, P> &v) {
 
 1719                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.x);
 
 1722         template<
typename T, qualifier P>
 
 1723         GLM_INLINE glm::vec<4, T, P> yzzx(
const glm::vec<4, T, P> &v) {
 
 1724                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.x);
 
 1728         template<
typename T, qualifier P>
 
 1729         GLM_INLINE glm::vec<4, T, P> yzzy(
const glm::vec<3, T, P> &v) {
 
 1730                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.y);
 
 1733         template<
typename T, qualifier P>
 
 1734         GLM_INLINE glm::vec<4, T, P> yzzy(
const glm::vec<4, T, P> &v) {
 
 1735                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.y);
 
 1739         template<
typename T, qualifier P>
 
 1740         GLM_INLINE glm::vec<4, T, P> yzzz(
const glm::vec<3, T, P> &v) {
 
 1741                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.z);
 
 1744         template<
typename T, qualifier P>
 
 1745         GLM_INLINE glm::vec<4, T, P> yzzz(
const glm::vec<4, T, P> &v) {
 
 1746                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.z);
 
 1750         template<
typename T, qualifier P>
 
 1751         GLM_INLINE glm::vec<4, T, P> yzzw(
const glm::vec<4, T, P> &v) {
 
 1752                 return glm::vec<4, T, P>(v.y, v.z, v.z, v.w);
 
 1756         template<
typename T, qualifier P>
 
 1757         GLM_INLINE glm::vec<4, T, P> yzwx(
const glm::vec<4, T, P> &v) {
 
 1758                 return glm::vec<4, T, P>(v.y, v.z, v.w, v.x);
 
 1762         template<
typename T, qualifier P>
 
 1763         GLM_INLINE glm::vec<4, T, P> yzwy(
const glm::vec<4, T, P> &v) {
 
 1764                 return glm::vec<4, T, P>(v.y, v.z, v.w, v.y);
 
 1768         template<
typename T, qualifier P>
 
 1769         GLM_INLINE glm::vec<4, T, P> yzwz(
const glm::vec<4, T, P> &v) {
 
 1770                 return glm::vec<4, T, P>(v.y, v.z, v.w, v.z);
 
 1774         template<
typename T, qualifier P>
 
 1775         GLM_INLINE glm::vec<4, T, P> yzww(
const glm::vec<4, T, P> &v) {
 
 1776                 return glm::vec<4, T, P>(v.y, v.z, v.w, v.w);
 
 1780         template<
typename T, qualifier P>
 
 1781         GLM_INLINE glm::vec<4, T, P> ywxx(
const glm::vec<4, T, P> &v) {
 
 1782                 return glm::vec<4, T, P>(v.y, v.w, v.x, v.x);
 
 1786         template<
typename T, qualifier P>
 
 1787         GLM_INLINE glm::vec<4, T, P> ywxy(
const glm::vec<4, T, P> &v) {
 
 1788                 return glm::vec<4, T, P>(v.y, v.w, v.x, v.y);
 
 1792         template<
typename T, qualifier P>
 
 1793         GLM_INLINE glm::vec<4, T, P> ywxz(
const glm::vec<4, T, P> &v) {
 
 1794                 return glm::vec<4, T, P>(v.y, v.w, v.x, v.z);
 
 1798         template<
typename T, qualifier P>
 
 1799         GLM_INLINE glm::vec<4, T, P> ywxw(
const glm::vec<4, T, P> &v) {
 
 1800                 return glm::vec<4, T, P>(v.y, v.w, v.x, v.w);
 
 1804         template<
typename T, qualifier P>
 
 1805         GLM_INLINE glm::vec<4, T, P> ywyx(
const glm::vec<4, T, P> &v) {
 
 1806                 return glm::vec<4, T, P>(v.y, v.w, v.y, v.x);
 
 1810         template<
typename T, qualifier P>
 
 1811         GLM_INLINE glm::vec<4, T, P> ywyy(
const glm::vec<4, T, P> &v) {
 
 1812                 return glm::vec<4, T, P>(v.y, v.w, v.y, v.y);
 
 1816         template<
typename T, qualifier P>
 
 1817         GLM_INLINE glm::vec<4, T, P> ywyz(
const glm::vec<4, T, P> &v) {
 
 1818                 return glm::vec<4, T, P>(v.y, v.w, v.y, v.z);
 
 1822         template<
typename T, qualifier P>
 
 1823         GLM_INLINE glm::vec<4, T, P> ywyw(
const glm::vec<4, T, P> &v) {
 
 1824                 return glm::vec<4, T, P>(v.y, v.w, v.y, v.w);
 
 1828         template<
typename T, qualifier P>
 
 1829         GLM_INLINE glm::vec<4, T, P> ywzx(
const glm::vec<4, T, P> &v) {
 
 1830                 return glm::vec<4, T, P>(v.y, v.w, v.z, v.x);
 
 1834         template<
typename T, qualifier P>
 
 1835         GLM_INLINE glm::vec<4, T, P> ywzy(
const glm::vec<4, T, P> &v) {
 
 1836                 return glm::vec<4, T, P>(v.y, v.w, v.z, v.y);
 
 1840         template<
typename T, qualifier P>
 
 1841         GLM_INLINE glm::vec<4, T, P> ywzz(
const glm::vec<4, T, P> &v) {
 
 1842                 return glm::vec<4, T, P>(v.y, v.w, v.z, v.z);
 
 1846         template<
typename T, qualifier P>
 
 1847         GLM_INLINE glm::vec<4, T, P> ywzw(
const glm::vec<4, T, P> &v) {
 
 1848                 return glm::vec<4, T, P>(v.y, v.w, v.z, v.w);
 
 1852         template<
typename T, qualifier P>
 
 1853         GLM_INLINE glm::vec<4, T, P> ywwx(
const glm::vec<4, T, P> &v) {
 
 1854                 return glm::vec<4, T, P>(v.y, v.w, v.w, v.x);
 
 1858         template<
typename T, qualifier P>
 
 1859         GLM_INLINE glm::vec<4, T, P> ywwy(
const glm::vec<4, T, P> &v) {
 
 1860                 return glm::vec<4, T, P>(v.y, v.w, v.w, v.y);
 
 1864         template<
typename T, qualifier P>
 
 1865         GLM_INLINE glm::vec<4, T, P> ywwz(
const glm::vec<4, T, P> &v) {
 
 1866                 return glm::vec<4, T, P>(v.y, v.w, v.w, v.z);
 
 1870         template<
typename T, qualifier P>
 
 1871         GLM_INLINE glm::vec<4, T, P> ywww(
const glm::vec<4, T, P> &v) {
 
 1872                 return glm::vec<4, T, P>(v.y, v.w, v.w, v.w);
 
 1876         template<
typename T, qualifier P>
 
 1877         GLM_INLINE glm::vec<4, T, P> zxxx(
const glm::vec<3, T, P> &v) {
 
 1878                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.x);
 
 1881         template<
typename T, qualifier P>
 
 1882         GLM_INLINE glm::vec<4, T, P> zxxx(
const glm::vec<4, T, P> &v) {
 
 1883                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.x);
 
 1887         template<
typename T, qualifier P>
 
 1888         GLM_INLINE glm::vec<4, T, P> zxxy(
const glm::vec<3, T, P> &v) {
 
 1889                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.y);
 
 1892         template<
typename T, qualifier P>
 
 1893         GLM_INLINE glm::vec<4, T, P> zxxy(
const glm::vec<4, T, P> &v) {
 
 1894                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.y);
 
 1898         template<
typename T, qualifier P>
 
 1899         GLM_INLINE glm::vec<4, T, P> zxxz(
const glm::vec<3, T, P> &v) {
 
 1900                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.z);
 
 1903         template<
typename T, qualifier P>
 
 1904         GLM_INLINE glm::vec<4, T, P> zxxz(
const glm::vec<4, T, P> &v) {
 
 1905                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.z);
 
 1909         template<
typename T, qualifier P>
 
 1910         GLM_INLINE glm::vec<4, T, P> zxxw(
const glm::vec<4, T, P> &v) {
 
 1911                 return glm::vec<4, T, P>(v.z, v.x, v.x, v.w);
 
 1915         template<
typename T, qualifier P>
 
 1916         GLM_INLINE glm::vec<4, T, P> zxyx(
const glm::vec<3, T, P> &v) {
 
 1917                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.x);
 
 1920         template<
typename T, qualifier P>
 
 1921         GLM_INLINE glm::vec<4, T, P> zxyx(
const glm::vec<4, T, P> &v) {
 
 1922                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.x);
 
 1926         template<
typename T, qualifier P>
 
 1927         GLM_INLINE glm::vec<4, T, P> zxyy(
const glm::vec<3, T, P> &v) {
 
 1928                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.y);
 
 1931         template<
typename T, qualifier P>
 
 1932         GLM_INLINE glm::vec<4, T, P> zxyy(
const glm::vec<4, T, P> &v) {
 
 1933                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.y);
 
 1937         template<
typename T, qualifier P>
 
 1938         GLM_INLINE glm::vec<4, T, P> zxyz(
const glm::vec<3, T, P> &v) {
 
 1939                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.z);
 
 1942         template<
typename T, qualifier P>
 
 1943         GLM_INLINE glm::vec<4, T, P> zxyz(
const glm::vec<4, T, P> &v) {
 
 1944                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.z);
 
 1948         template<
typename T, qualifier P>
 
 1949         GLM_INLINE glm::vec<4, T, P> zxyw(
const glm::vec<4, T, P> &v) {
 
 1950                 return glm::vec<4, T, P>(v.z, v.x, v.y, v.w);
 
 1954         template<
typename T, qualifier P>
 
 1955         GLM_INLINE glm::vec<4, T, P> zxzx(
const glm::vec<3, T, P> &v) {
 
 1956                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.x);
 
 1959         template<
typename T, qualifier P>
 
 1960         GLM_INLINE glm::vec<4, T, P> zxzx(
const glm::vec<4, T, P> &v) {
 
 1961                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.x);
 
 1965         template<
typename T, qualifier P>
 
 1966         GLM_INLINE glm::vec<4, T, P> zxzy(
const glm::vec<3, T, P> &v) {
 
 1967                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.y);
 
 1970         template<
typename T, qualifier P>
 
 1971         GLM_INLINE glm::vec<4, T, P> zxzy(
const glm::vec<4, T, P> &v) {
 
 1972                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.y);
 
 1976         template<
typename T, qualifier P>
 
 1977         GLM_INLINE glm::vec<4, T, P> zxzz(
const glm::vec<3, T, P> &v) {
 
 1978                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.z);
 
 1981         template<
typename T, qualifier P>
 
 1982         GLM_INLINE glm::vec<4, T, P> zxzz(
const glm::vec<4, T, P> &v) {
 
 1983                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.z);
 
 1987         template<
typename T, qualifier P>
 
 1988         GLM_INLINE glm::vec<4, T, P> zxzw(
const glm::vec<4, T, P> &v) {
 
 1989                 return glm::vec<4, T, P>(v.z, v.x, v.z, v.w);
 
 1993         template<
typename T, qualifier P>
 
 1994         GLM_INLINE glm::vec<4, T, P> zxwx(
const glm::vec<4, T, P> &v) {
 
 1995                 return glm::vec<4, T, P>(v.z, v.x, v.w, v.x);
 
 1999         template<
typename T, qualifier P>
 
 2000         GLM_INLINE glm::vec<4, T, P> zxwy(
const glm::vec<4, T, P> &v) {
 
 2001                 return glm::vec<4, T, P>(v.z, v.x, v.w, v.y);
 
 2005         template<
typename T, qualifier P>
 
 2006         GLM_INLINE glm::vec<4, T, P> zxwz(
const glm::vec<4, T, P> &v) {
 
 2007                 return glm::vec<4, T, P>(v.z, v.x, v.w, v.z);
 
 2011         template<
typename T, qualifier P>
 
 2012         GLM_INLINE glm::vec<4, T, P> zxww(
const glm::vec<4, T, P> &v) {
 
 2013                 return glm::vec<4, T, P>(v.z, v.x, v.w, v.w);
 
 2017         template<
typename T, qualifier P>
 
 2018         GLM_INLINE glm::vec<4, T, P> zyxx(
const glm::vec<3, T, P> &v) {
 
 2019                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.x);
 
 2022         template<
typename T, qualifier P>
 
 2023         GLM_INLINE glm::vec<4, T, P> zyxx(
const glm::vec<4, T, P> &v) {
 
 2024                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.x);
 
 2028         template<
typename T, qualifier P>
 
 2029         GLM_INLINE glm::vec<4, T, P> zyxy(
const glm::vec<3, T, P> &v) {
 
 2030                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.y);
 
 2033         template<
typename T, qualifier P>
 
 2034         GLM_INLINE glm::vec<4, T, P> zyxy(
const glm::vec<4, T, P> &v) {
 
 2035                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.y);
 
 2039         template<
typename T, qualifier P>
 
 2040         GLM_INLINE glm::vec<4, T, P> zyxz(
const glm::vec<3, T, P> &v) {
 
 2041                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.z);
 
 2044         template<
typename T, qualifier P>
 
 2045         GLM_INLINE glm::vec<4, T, P> zyxz(
const glm::vec<4, T, P> &v) {
 
 2046                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.z);
 
 2050         template<
typename T, qualifier P>
 
 2051         GLM_INLINE glm::vec<4, T, P> zyxw(
const glm::vec<4, T, P> &v) {
 
 2052                 return glm::vec<4, T, P>(v.z, v.y, v.x, v.w);
 
 2056         template<
typename T, qualifier P>
 
 2057         GLM_INLINE glm::vec<4, T, P> zyyx(
const glm::vec<3, T, P> &v) {
 
 2058                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.x);
 
 2061         template<
typename T, qualifier P>
 
 2062         GLM_INLINE glm::vec<4, T, P> zyyx(
const glm::vec<4, T, P> &v) {
 
 2063                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.x);
 
 2067         template<
typename T, qualifier P>
 
 2068         GLM_INLINE glm::vec<4, T, P> zyyy(
const glm::vec<3, T, P> &v) {
 
 2069                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.y);
 
 2072         template<
typename T, qualifier P>
 
 2073         GLM_INLINE glm::vec<4, T, P> zyyy(
const glm::vec<4, T, P> &v) {
 
 2074                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.y);
 
 2078         template<
typename T, qualifier P>
 
 2079         GLM_INLINE glm::vec<4, T, P> zyyz(
const glm::vec<3, T, P> &v) {
 
 2080                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.z);
 
 2083         template<
typename T, qualifier P>
 
 2084         GLM_INLINE glm::vec<4, T, P> zyyz(
const glm::vec<4, T, P> &v) {
 
 2085                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.z);
 
 2089         template<
typename T, qualifier P>
 
 2090         GLM_INLINE glm::vec<4, T, P> zyyw(
const glm::vec<4, T, P> &v) {
 
 2091                 return glm::vec<4, T, P>(v.z, v.y, v.y, v.w);
 
 2095         template<
typename T, qualifier P>
 
 2096         GLM_INLINE glm::vec<4, T, P> zyzx(
const glm::vec<3, T, P> &v) {
 
 2097                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.x);
 
 2100         template<
typename T, qualifier P>
 
 2101         GLM_INLINE glm::vec<4, T, P> zyzx(
const glm::vec<4, T, P> &v) {
 
 2102                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.x);
 
 2106         template<
typename T, qualifier P>
 
 2107         GLM_INLINE glm::vec<4, T, P> zyzy(
const glm::vec<3, T, P> &v) {
 
 2108                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.y);
 
 2111         template<
typename T, qualifier P>
 
 2112         GLM_INLINE glm::vec<4, T, P> zyzy(
const glm::vec<4, T, P> &v) {
 
 2113                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.y);
 
 2117         template<
typename T, qualifier P>
 
 2118         GLM_INLINE glm::vec<4, T, P> zyzz(
const glm::vec<3, T, P> &v) {
 
 2119                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.z);
 
 2122         template<
typename T, qualifier P>
 
 2123         GLM_INLINE glm::vec<4, T, P> zyzz(
const glm::vec<4, T, P> &v) {
 
 2124                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.z);
 
 2128         template<
typename T, qualifier P>
 
 2129         GLM_INLINE glm::vec<4, T, P> zyzw(
const glm::vec<4, T, P> &v) {
 
 2130                 return glm::vec<4, T, P>(v.z, v.y, v.z, v.w);
 
 2134         template<
typename T, qualifier P>
 
 2135         GLM_INLINE glm::vec<4, T, P> zywx(
const glm::vec<4, T, P> &v) {
 
 2136                 return glm::vec<4, T, P>(v.z, v.y, v.w, v.x);
 
 2140         template<
typename T, qualifier P>
 
 2141         GLM_INLINE glm::vec<4, T, P> zywy(
const glm::vec<4, T, P> &v) {
 
 2142                 return glm::vec<4, T, P>(v.z, v.y, v.w, v.y);
 
 2146         template<
typename T, qualifier P>
 
 2147         GLM_INLINE glm::vec<4, T, P> zywz(
const glm::vec<4, T, P> &v) {
 
 2148                 return glm::vec<4, T, P>(v.z, v.y, v.w, v.z);
 
 2152         template<
typename T, qualifier P>
 
 2153         GLM_INLINE glm::vec<4, T, P> zyww(
const glm::vec<4, T, P> &v) {
 
 2154                 return glm::vec<4, T, P>(v.z, v.y, v.w, v.w);
 
 2158         template<
typename T, qualifier P>
 
 2159         GLM_INLINE glm::vec<4, T, P> zzxx(
const glm::vec<3, T, P> &v) {
 
 2160                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.x);
 
 2163         template<
typename T, qualifier P>
 
 2164         GLM_INLINE glm::vec<4, T, P> zzxx(
const glm::vec<4, T, P> &v) {
 
 2165                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.x);
 
 2169         template<
typename T, qualifier P>
 
 2170         GLM_INLINE glm::vec<4, T, P> zzxy(
const glm::vec<3, T, P> &v) {
 
 2171                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.y);
 
 2174         template<
typename T, qualifier P>
 
 2175         GLM_INLINE glm::vec<4, T, P> zzxy(
const glm::vec<4, T, P> &v) {
 
 2176                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.y);
 
 2180         template<
typename T, qualifier P>
 
 2181         GLM_INLINE glm::vec<4, T, P> zzxz(
const glm::vec<3, T, P> &v) {
 
 2182                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.z);
 
 2185         template<
typename T, qualifier P>
 
 2186         GLM_INLINE glm::vec<4, T, P> zzxz(
const glm::vec<4, T, P> &v) {
 
 2187                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.z);
 
 2191         template<
typename T, qualifier P>
 
 2192         GLM_INLINE glm::vec<4, T, P> zzxw(
const glm::vec<4, T, P> &v) {
 
 2193                 return glm::vec<4, T, P>(v.z, v.z, v.x, v.w);
 
 2197         template<
typename T, qualifier P>
 
 2198         GLM_INLINE glm::vec<4, T, P> zzyx(
const glm::vec<3, T, P> &v) {
 
 2199                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.x);
 
 2202         template<
typename T, qualifier P>
 
 2203         GLM_INLINE glm::vec<4, T, P> zzyx(
const glm::vec<4, T, P> &v) {
 
 2204                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.x);
 
 2208         template<
typename T, qualifier P>
 
 2209         GLM_INLINE glm::vec<4, T, P> zzyy(
const glm::vec<3, T, P> &v) {
 
 2210                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.y);
 
 2213         template<
typename T, qualifier P>
 
 2214         GLM_INLINE glm::vec<4, T, P> zzyy(
const glm::vec<4, T, P> &v) {
 
 2215                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.y);
 
 2219         template<
typename T, qualifier P>
 
 2220         GLM_INLINE glm::vec<4, T, P> zzyz(
const glm::vec<3, T, P> &v) {
 
 2221                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.z);
 
 2224         template<
typename T, qualifier P>
 
 2225         GLM_INLINE glm::vec<4, T, P> zzyz(
const glm::vec<4, T, P> &v) {
 
 2226                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.z);
 
 2230         template<
typename T, qualifier P>
 
 2231         GLM_INLINE glm::vec<4, T, P> zzyw(
const glm::vec<4, T, P> &v) {
 
 2232                 return glm::vec<4, T, P>(v.z, v.z, v.y, v.w);
 
 2236         template<
typename T, qualifier P>
 
 2237         GLM_INLINE glm::vec<4, T, P> zzzx(
const glm::vec<3, T, P> &v) {
 
 2238                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.x);
 
 2241         template<
typename T, qualifier P>
 
 2242         GLM_INLINE glm::vec<4, T, P> zzzx(
const glm::vec<4, T, P> &v) {
 
 2243                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.x);
 
 2247         template<
typename T, qualifier P>
 
 2248         GLM_INLINE glm::vec<4, T, P> zzzy(
const glm::vec<3, T, P> &v) {
 
 2249                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.y);
 
 2252         template<
typename T, qualifier P>
 
 2253         GLM_INLINE glm::vec<4, T, P> zzzy(
const glm::vec<4, T, P> &v) {
 
 2254                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.y);
 
 2258         template<
typename T, qualifier P>
 
 2259         GLM_INLINE glm::vec<4, T, P> zzzz(
const glm::vec<3, T, P> &v) {
 
 2260                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.z);
 
 2263         template<
typename T, qualifier P>
 
 2264         GLM_INLINE glm::vec<4, T, P> zzzz(
const glm::vec<4, T, P> &v) {
 
 2265                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.z);
 
 2269         template<
typename T, qualifier P>
 
 2270         GLM_INLINE glm::vec<4, T, P> zzzw(
const glm::vec<4, T, P> &v) {
 
 2271                 return glm::vec<4, T, P>(v.z, v.z, v.z, v.w);
 
 2275         template<
typename T, qualifier P>
 
 2276         GLM_INLINE glm::vec<4, T, P> zzwx(
const glm::vec<4, T, P> &v) {
 
 2277                 return glm::vec<4, T, P>(v.z, v.z, v.w, v.x);
 
 2281         template<
typename T, qualifier P>
 
 2282         GLM_INLINE glm::vec<4, T, P> zzwy(
const glm::vec<4, T, P> &v) {
 
 2283                 return glm::vec<4, T, P>(v.z, v.z, v.w, v.y);
 
 2287         template<
typename T, qualifier P>
 
 2288         GLM_INLINE glm::vec<4, T, P> zzwz(
const glm::vec<4, T, P> &v) {
 
 2289                 return glm::vec<4, T, P>(v.z, v.z, v.w, v.z);
 
 2293         template<
typename T, qualifier P>
 
 2294         GLM_INLINE glm::vec<4, T, P> zzww(
const glm::vec<4, T, P> &v) {
 
 2295                 return glm::vec<4, T, P>(v.z, v.z, v.w, v.w);
 
 2299         template<
typename T, qualifier P>
 
 2300         GLM_INLINE glm::vec<4, T, P> zwxx(
const glm::vec<4, T, P> &v) {
 
 2301                 return glm::vec<4, T, P>(v.z, v.w, v.x, v.x);
 
 2305         template<
typename T, qualifier P>
 
 2306         GLM_INLINE glm::vec<4, T, P> zwxy(
const glm::vec<4, T, P> &v) {
 
 2307                 return glm::vec<4, T, P>(v.z, v.w, v.x, v.y);
 
 2311         template<
typename T, qualifier P>
 
 2312         GLM_INLINE glm::vec<4, T, P> zwxz(
const glm::vec<4, T, P> &v) {
 
 2313                 return glm::vec<4, T, P>(v.z, v.w, v.x, v.z);
 
 2317         template<
typename T, qualifier P>
 
 2318         GLM_INLINE glm::vec<4, T, P> zwxw(
const glm::vec<4, T, P> &v) {
 
 2319                 return glm::vec<4, T, P>(v.z, v.w, v.x, v.w);
 
 2323         template<
typename T, qualifier P>
 
 2324         GLM_INLINE glm::vec<4, T, P> zwyx(
const glm::vec<4, T, P> &v) {
 
 2325                 return glm::vec<4, T, P>(v.z, v.w, v.y, v.x);
 
 2329         template<
typename T, qualifier P>
 
 2330         GLM_INLINE glm::vec<4, T, P> zwyy(
const glm::vec<4, T, P> &v) {
 
 2331                 return glm::vec<4, T, P>(v.z, v.w, v.y, v.y);
 
 2335         template<
typename T, qualifier P>
 
 2336         GLM_INLINE glm::vec<4, T, P> zwyz(
const glm::vec<4, T, P> &v) {
 
 2337                 return glm::vec<4, T, P>(v.z, v.w, v.y, v.z);
 
 2341         template<
typename T, qualifier P>
 
 2342         GLM_INLINE glm::vec<4, T, P> zwyw(
const glm::vec<4, T, P> &v) {
 
 2343                 return glm::vec<4, T, P>(v.z, v.w, v.y, v.w);
 
 2347         template<
typename T, qualifier P>
 
 2348         GLM_INLINE glm::vec<4, T, P> zwzx(
const glm::vec<4, T, P> &v) {
 
 2349                 return glm::vec<4, T, P>(v.z, v.w, v.z, v.x);
 
 2353         template<
typename T, qualifier P>
 
 2354         GLM_INLINE glm::vec<4, T, P> zwzy(
const glm::vec<4, T, P> &v) {
 
 2355                 return glm::vec<4, T, P>(v.z, v.w, v.z, v.y);
 
 2359         template<
typename T, qualifier P>
 
 2360         GLM_INLINE glm::vec<4, T, P> zwzz(
const glm::vec<4, T, P> &v) {
 
 2361                 return glm::vec<4, T, P>(v.z, v.w, v.z, v.z);
 
 2365         template<
typename T, qualifier P>
 
 2366         GLM_INLINE glm::vec<4, T, P> zwzw(
const glm::vec<4, T, P> &v) {
 
 2367                 return glm::vec<4, T, P>(v.z, v.w, v.z, v.w);
 
 2371         template<
typename T, qualifier P>
 
 2372         GLM_INLINE glm::vec<4, T, P> zwwx(
const glm::vec<4, T, P> &v) {
 
 2373                 return glm::vec<4, T, P>(v.z, v.w, v.w, v.x);
 
 2377         template<
typename T, qualifier P>
 
 2378         GLM_INLINE glm::vec<4, T, P> zwwy(
const glm::vec<4, T, P> &v) {
 
 2379                 return glm::vec<4, T, P>(v.z, v.w, v.w, v.y);
 
 2383         template<
typename T, qualifier P>
 
 2384         GLM_INLINE glm::vec<4, T, P> zwwz(
const glm::vec<4, T, P> &v) {
 
 2385                 return glm::vec<4, T, P>(v.z, v.w, v.w, v.z);
 
 2389         template<
typename T, qualifier P>
 
 2390         GLM_INLINE glm::vec<4, T, P> zwww(
const glm::vec<4, T, P> &v) {
 
 2391                 return glm::vec<4, T, P>(v.z, v.w, v.w, v.w);
 
 2395         template<
typename T, qualifier P>
 
 2396         GLM_INLINE glm::vec<4, T, P> wxxx(
const glm::vec<4, T, P> &v) {
 
 2397                 return glm::vec<4, T, P>(v.w, v.x, v.x, v.x);
 
 2401         template<
typename T, qualifier P>
 
 2402         GLM_INLINE glm::vec<4, T, P> wxxy(
const glm::vec<4, T, P> &v) {
 
 2403                 return glm::vec<4, T, P>(v.w, v.x, v.x, v.y);
 
 2407         template<
typename T, qualifier P>
 
 2408         GLM_INLINE glm::vec<4, T, P> wxxz(
const glm::vec<4, T, P> &v) {
 
 2409                 return glm::vec<4, T, P>(v.w, v.x, v.x, v.z);
 
 2413         template<
typename T, qualifier P>
 
 2414         GLM_INLINE glm::vec<4, T, P> wxxw(
const glm::vec<4, T, P> &v) {
 
 2415                 return glm::vec<4, T, P>(v.w, v.x, v.x, v.w);
 
 2419         template<
typename T, qualifier P>
 
 2420         GLM_INLINE glm::vec<4, T, P> wxyx(
const glm::vec<4, T, P> &v) {
 
 2421                 return glm::vec<4, T, P>(v.w, v.x, v.y, v.x);
 
 2425         template<
typename T, qualifier P>
 
 2426         GLM_INLINE glm::vec<4, T, P> wxyy(
const glm::vec<4, T, P> &v) {
 
 2427                 return glm::vec<4, T, P>(v.w, v.x, v.y, v.y);
 
 2431         template<
typename T, qualifier P>
 
 2432         GLM_INLINE glm::vec<4, T, P> wxyz(
const glm::vec<4, T, P> &v) {
 
 2433                 return glm::vec<4, T, P>(v.w, v.x, v.y, v.z);
 
 2437         template<
typename T, qualifier P>
 
 2438         GLM_INLINE glm::vec<4, T, P> wxyw(
const glm::vec<4, T, P> &v) {
 
 2439                 return glm::vec<4, T, P>(v.w, v.x, v.y, v.w);
 
 2443         template<
typename T, qualifier P>
 
 2444         GLM_INLINE glm::vec<4, T, P> wxzx(
const glm::vec<4, T, P> &v) {
 
 2445                 return glm::vec<4, T, P>(v.w, v.x, v.z, v.x);
 
 2449         template<
typename T, qualifier P>
 
 2450         GLM_INLINE glm::vec<4, T, P> wxzy(
const glm::vec<4, T, P> &v) {
 
 2451                 return glm::vec<4, T, P>(v.w, v.x, v.z, v.y);
 
 2455         template<
typename T, qualifier P>
 
 2456         GLM_INLINE glm::vec<4, T, P> wxzz(
const glm::vec<4, T, P> &v) {
 
 2457                 return glm::vec<4, T, P>(v.w, v.x, v.z, v.z);
 
 2461         template<
typename T, qualifier P>
 
 2462         GLM_INLINE glm::vec<4, T, P> wxzw(
const glm::vec<4, T, P> &v) {
 
 2463                 return glm::vec<4, T, P>(v.w, v.x, v.z, v.w);
 
 2467         template<
typename T, qualifier P>
 
 2468         GLM_INLINE glm::vec<4, T, P> wxwx(
const glm::vec<4, T, P> &v) {
 
 2469                 return glm::vec<4, T, P>(v.w, v.x, v.w, v.x);
 
 2473         template<
typename T, qualifier P>
 
 2474         GLM_INLINE glm::vec<4, T, P> wxwy(
const glm::vec<4, T, P> &v) {
 
 2475                 return glm::vec<4, T, P>(v.w, v.x, v.w, v.y);
 
 2479         template<
typename T, qualifier P>
 
 2480         GLM_INLINE glm::vec<4, T, P> wxwz(
const glm::vec<4, T, P> &v) {
 
 2481                 return glm::vec<4, T, P>(v.w, v.x, v.w, v.z);
 
 2485         template<
typename T, qualifier P>
 
 2486         GLM_INLINE glm::vec<4, T, P> wxww(
const glm::vec<4, T, P> &v) {
 
 2487                 return glm::vec<4, T, P>(v.w, v.x, v.w, v.w);
 
 2491         template<
typename T, qualifier P>
 
 2492         GLM_INLINE glm::vec<4, T, P> wyxx(
const glm::vec<4, T, P> &v) {
 
 2493                 return glm::vec<4, T, P>(v.w, v.y, v.x, v.x);
 
 2497         template<
typename T, qualifier P>
 
 2498         GLM_INLINE glm::vec<4, T, P> wyxy(
const glm::vec<4, T, P> &v) {
 
 2499                 return glm::vec<4, T, P>(v.w, v.y, v.x, v.y);
 
 2503         template<
typename T, qualifier P>
 
 2504         GLM_INLINE glm::vec<4, T, P> wyxz(
const glm::vec<4, T, P> &v) {
 
 2505                 return glm::vec<4, T, P>(v.w, v.y, v.x, v.z);
 
 2509         template<
typename T, qualifier P>
 
 2510         GLM_INLINE glm::vec<4, T, P> wyxw(
const glm::vec<4, T, P> &v) {
 
 2511                 return glm::vec<4, T, P>(v.w, v.y, v.x, v.w);
 
 2515         template<
typename T, qualifier P>
 
 2516         GLM_INLINE glm::vec<4, T, P> wyyx(
const glm::vec<4, T, P> &v) {
 
 2517                 return glm::vec<4, T, P>(v.w, v.y, v.y, v.x);
 
 2521         template<
typename T, qualifier P>
 
 2522         GLM_INLINE glm::vec<4, T, P> wyyy(
const glm::vec<4, T, P> &v) {
 
 2523                 return glm::vec<4, T, P>(v.w, v.y, v.y, v.y);
 
 2527         template<
typename T, qualifier P>
 
 2528         GLM_INLINE glm::vec<4, T, P> wyyz(
const glm::vec<4, T, P> &v) {
 
 2529                 return glm::vec<4, T, P>(v.w, v.y, v.y, v.z);
 
 2533         template<
typename T, qualifier P>
 
 2534         GLM_INLINE glm::vec<4, T, P> wyyw(
const glm::vec<4, T, P> &v) {
 
 2535                 return glm::vec<4, T, P>(v.w, v.y, v.y, v.w);
 
 2539         template<
typename T, qualifier P>
 
 2540         GLM_INLINE glm::vec<4, T, P> wyzx(
const glm::vec<4, T, P> &v) {
 
 2541                 return glm::vec<4, T, P>(v.w, v.y, v.z, v.x);
 
 2545         template<
typename T, qualifier P>
 
 2546         GLM_INLINE glm::vec<4, T, P> wyzy(
const glm::vec<4, T, P> &v) {
 
 2547                 return glm::vec<4, T, P>(v.w, v.y, v.z, v.y);
 
 2551         template<
typename T, qualifier P>
 
 2552         GLM_INLINE glm::vec<4, T, P> wyzz(
const glm::vec<4, T, P> &v) {
 
 2553                 return glm::vec<4, T, P>(v.w, v.y, v.z, v.z);
 
 2557         template<
typename T, qualifier P>
 
 2558         GLM_INLINE glm::vec<4, T, P> wyzw(
const glm::vec<4, T, P> &v) {
 
 2559                 return glm::vec<4, T, P>(v.w, v.y, v.z, v.w);
 
 2563         template<
typename T, qualifier P>
 
 2564         GLM_INLINE glm::vec<4, T, P> wywx(
const glm::vec<4, T, P> &v) {
 
 2565                 return glm::vec<4, T, P>(v.w, v.y, v.w, v.x);
 
 2569         template<
typename T, qualifier P>
 
 2570         GLM_INLINE glm::vec<4, T, P> wywy(
const glm::vec<4, T, P> &v) {
 
 2571                 return glm::vec<4, T, P>(v.w, v.y, v.w, v.y);
 
 2575         template<
typename T, qualifier P>
 
 2576         GLM_INLINE glm::vec<4, T, P> wywz(
const glm::vec<4, T, P> &v) {
 
 2577                 return glm::vec<4, T, P>(v.w, v.y, v.w, v.z);
 
 2581         template<
typename T, qualifier P>
 
 2582         GLM_INLINE glm::vec<4, T, P> wyww(
const glm::vec<4, T, P> &v) {
 
 2583                 return glm::vec<4, T, P>(v.w, v.y, v.w, v.w);
 
 2587         template<
typename T, qualifier P>
 
 2588         GLM_INLINE glm::vec<4, T, P> wzxx(
const glm::vec<4, T, P> &v) {
 
 2589                 return glm::vec<4, T, P>(v.w, v.z, v.x, v.x);
 
 2593         template<
typename T, qualifier P>
 
 2594         GLM_INLINE glm::vec<4, T, P> wzxy(
const glm::vec<4, T, P> &v) {
 
 2595                 return glm::vec<4, T, P>(v.w, v.z, v.x, v.y);
 
 2599         template<
typename T, qualifier P>
 
 2600         GLM_INLINE glm::vec<4, T, P> wzxz(
const glm::vec<4, T, P> &v) {
 
 2601                 return glm::vec<4, T, P>(v.w, v.z, v.x, v.z);
 
 2605         template<
typename T, qualifier P>
 
 2606         GLM_INLINE glm::vec<4, T, P> wzxw(
const glm::vec<4, T, P> &v) {
 
 2607                 return glm::vec<4, T, P>(v.w, v.z, v.x, v.w);
 
 2611         template<
typename T, qualifier P>
 
 2612         GLM_INLINE glm::vec<4, T, P> wzyx(
const glm::vec<4, T, P> &v) {
 
 2613                 return glm::vec<4, T, P>(v.w, v.z, v.y, v.x);
 
 2617         template<
typename T, qualifier P>
 
 2618         GLM_INLINE glm::vec<4, T, P> wzyy(
const glm::vec<4, T, P> &v) {
 
 2619                 return glm::vec<4, T, P>(v.w, v.z, v.y, v.y);
 
 2623         template<
typename T, qualifier P>
 
 2624         GLM_INLINE glm::vec<4, T, P> wzyz(
const glm::vec<4, T, P> &v) {
 
 2625                 return glm::vec<4, T, P>(v.w, v.z, v.y, v.z);
 
 2629         template<
typename T, qualifier P>
 
 2630         GLM_INLINE glm::vec<4, T, P> wzyw(
const glm::vec<4, T, P> &v) {
 
 2631                 return glm::vec<4, T, P>(v.w, v.z, v.y, v.w);
 
 2635         template<
typename T, qualifier P>
 
 2636         GLM_INLINE glm::vec<4, T, P> wzzx(
const glm::vec<4, T, P> &v) {
 
 2637                 return glm::vec<4, T, P>(v.w, v.z, v.z, v.x);
 
 2641         template<
typename T, qualifier P>
 
 2642         GLM_INLINE glm::vec<4, T, P> wzzy(
const glm::vec<4, T, P> &v) {
 
 2643                 return glm::vec<4, T, P>(v.w, v.z, v.z, v.y);
 
 2647         template<
typename T, qualifier P>
 
 2648         GLM_INLINE glm::vec<4, T, P> wzzz(
const glm::vec<4, T, P> &v) {
 
 2649                 return glm::vec<4, T, P>(v.w, v.z, v.z, v.z);
 
 2653         template<
typename T, qualifier P>
 
 2654         GLM_INLINE glm::vec<4, T, P> wzzw(
const glm::vec<4, T, P> &v) {
 
 2655                 return glm::vec<4, T, P>(v.w, v.z, v.z, v.w);
 
 2659         template<
typename T, qualifier P>
 
 2660         GLM_INLINE glm::vec<4, T, P> wzwx(
const glm::vec<4, T, P> &v) {
 
 2661                 return glm::vec<4, T, P>(v.w, v.z, v.w, v.x);
 
 2665         template<
typename T, qualifier P>
 
 2666         GLM_INLINE glm::vec<4, T, P> wzwy(
const glm::vec<4, T, P> &v) {
 
 2667                 return glm::vec<4, T, P>(v.w, v.z, v.w, v.y);
 
 2671         template<
typename T, qualifier P>
 
 2672         GLM_INLINE glm::vec<4, T, P> wzwz(
const glm::vec<4, T, P> &v) {
 
 2673                 return glm::vec<4, T, P>(v.w, v.z, v.w, v.z);
 
 2677         template<
typename T, qualifier P>
 
 2678         GLM_INLINE glm::vec<4, T, P> wzww(
const glm::vec<4, T, P> &v) {
 
 2679                 return glm::vec<4, T, P>(v.w, v.z, v.w, v.w);
 
 2683         template<
typename T, qualifier P>
 
 2684         GLM_INLINE glm::vec<4, T, P> wwxx(
const glm::vec<4, T, P> &v) {
 
 2685                 return glm::vec<4, T, P>(v.w, v.w, v.x, v.x);
 
 2689         template<
typename T, qualifier P>
 
 2690         GLM_INLINE glm::vec<4, T, P> wwxy(
const glm::vec<4, T, P> &v) {
 
 2691                 return glm::vec<4, T, P>(v.w, v.w, v.x, v.y);
 
 2695         template<
typename T, qualifier P>
 
 2696         GLM_INLINE glm::vec<4, T, P> wwxz(
const glm::vec<4, T, P> &v) {
 
 2697                 return glm::vec<4, T, P>(v.w, v.w, v.x, v.z);
 
 2701         template<
typename T, qualifier P>
 
 2702         GLM_INLINE glm::vec<4, T, P> wwxw(
const glm::vec<4, T, P> &v) {
 
 2703                 return glm::vec<4, T, P>(v.w, v.w, v.x, v.w);
 
 2707         template<
typename T, qualifier P>
 
 2708         GLM_INLINE glm::vec<4, T, P> wwyx(
const glm::vec<4, T, P> &v) {
 
 2709                 return glm::vec<4, T, P>(v.w, v.w, v.y, v.x);
 
 2713         template<
typename T, qualifier P>
 
 2714         GLM_INLINE glm::vec<4, T, P> wwyy(
const glm::vec<4, T, P> &v) {
 
 2715                 return glm::vec<4, T, P>(v.w, v.w, v.y, v.y);
 
 2719         template<
typename T, qualifier P>
 
 2720         GLM_INLINE glm::vec<4, T, P> wwyz(
const glm::vec<4, T, P> &v) {
 
 2721                 return glm::vec<4, T, P>(v.w, v.w, v.y, v.z);
 
 2725         template<
typename T, qualifier P>
 
 2726         GLM_INLINE glm::vec<4, T, P> wwyw(
const glm::vec<4, T, P> &v) {
 
 2727                 return glm::vec<4, T, P>(v.w, v.w, v.y, v.w);
 
 2731         template<
typename T, qualifier P>
 
 2732         GLM_INLINE glm::vec<4, T, P> wwzx(
const glm::vec<4, T, P> &v) {
 
 2733                 return glm::vec<4, T, P>(v.w, v.w, v.z, v.x);
 
 2737         template<
typename T, qualifier P>
 
 2738         GLM_INLINE glm::vec<4, T, P> wwzy(
const glm::vec<4, T, P> &v) {
 
 2739                 return glm::vec<4, T, P>(v.w, v.w, v.z, v.y);
 
 2743         template<
typename T, qualifier P>
 
 2744         GLM_INLINE glm::vec<4, T, P> wwzz(
const glm::vec<4, T, P> &v) {
 
 2745                 return glm::vec<4, T, P>(v.w, v.w, v.z, v.z);
 
 2749         template<
typename T, qualifier P>
 
 2750         GLM_INLINE glm::vec<4, T, P> wwzw(
const glm::vec<4, T, P> &v) {
 
 2751                 return glm::vec<4, T, P>(v.w, v.w, v.z, v.w);
 
 2755         template<
typename T, qualifier P>
 
 2756         GLM_INLINE glm::vec<4, T, P> wwwx(
const glm::vec<4, T, P> &v) {
 
 2757                 return glm::vec<4, T, P>(v.w, v.w, v.w, v.x);
 
 2761         template<
typename T, qualifier P>
 
 2762         GLM_INLINE glm::vec<4, T, P> wwwy(
const glm::vec<4, T, P> &v) {
 
 2763                 return glm::vec<4, T, P>(v.w, v.w, v.w, v.y);
 
 2767         template<
typename T, qualifier P>
 
 2768         GLM_INLINE glm::vec<4, T, P> wwwz(
const glm::vec<4, T, P> &v) {
 
 2769                 return glm::vec<4, T, P>(v.w, v.w, v.w, v.z);
 
 2773         template<
typename T, qualifier P>
 
 2774         GLM_INLINE glm::vec<4, T, P> wwww(
const glm::vec<4, T, P> &v) {
 
 2775                 return glm::vec<4, T, P>(v.w, v.w, v.w, v.w);