vec_swizzle.hpp 78 KB

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