la.h 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878
  1. #ifndef LA_H_
  2. #define LA_H_
  3. #include <math.h>
  4. #ifndef LADEF
  5. #define LADEF static inline
  6. #endif // LADEF
  7. LADEF float lerpf(float a, float b, float t);
  8. LADEF double lerp(double a, double b, double t);
  9. LADEF int mini(int a, int b);
  10. LADEF int maxi(int a, int b);
  11. LADEF unsigned int minu(unsigned int a, unsigned int b);
  12. LADEF unsigned int maxu(unsigned int a, unsigned int b);
  13. LADEF float clampf(float x, float a, float b);
  14. LADEF double clampd(double x, double a, double b);
  15. LADEF int clampi(int x, int a, int b);
  16. LADEF unsigned int clampu(unsigned int x, unsigned int a, unsigned int b);
  17. typedef struct { float x, y; } V2f;
  18. typedef struct { double x, y; } V2d;
  19. typedef struct { int x, y; } V2i;
  20. typedef struct { unsigned int x, y; } V2u;
  21. typedef struct { float x, y, z; } V3f;
  22. typedef struct { double x, y, z; } V3d;
  23. typedef struct { int x, y, z; } V3i;
  24. typedef struct { unsigned int x, y, z; } V3u;
  25. typedef struct { float x, y, z, w; } V4f;
  26. typedef struct { double x, y, z, w; } V4d;
  27. typedef struct { int x, y, z, w; } V4i;
  28. typedef struct { unsigned int x, y, z, w; } V4u;
  29. #define V2f_Fmt "v2f(%f, %f)"
  30. #define V2f_Arg(v) (v).x, (v).y
  31. LADEF V2f v2f(float x, float y);
  32. LADEF V2f v2ff(float x);
  33. LADEF V2f v2f2d(V2d a);
  34. LADEF V2f v2f2i(V2i a);
  35. LADEF V2f v2f2u(V2u a);
  36. LADEF V2f v2f3f(V3f a);
  37. LADEF V2f v2f3d(V3d a);
  38. LADEF V2f v2f3i(V3i a);
  39. LADEF V2f v2f3u(V3u a);
  40. LADEF V2f v2f4f(V4f a);
  41. LADEF V2f v2f4d(V4d a);
  42. LADEF V2f v2f4i(V4i a);
  43. LADEF V2f v2f4u(V4u a);
  44. LADEF V2f v2f_sum(V2f a, V2f b);
  45. LADEF V2f v2f_sub(V2f a, V2f b);
  46. LADEF V2f v2f_mul(V2f a, V2f b);
  47. LADEF V2f v2f_div(V2f a, V2f b);
  48. LADEF V2f v2f_sqrt(V2f a);
  49. LADEF V2f v2f_pow(V2f base, V2f exp);
  50. LADEF V2f v2f_sin(V2f a);
  51. LADEF V2f v2f_cos(V2f a);
  52. LADEF V2f v2f_min(V2f a, V2f b);
  53. LADEF V2f v2f_max(V2f a, V2f b);
  54. LADEF V2f v2f_lerp(V2f a, V2f b, V2f t);
  55. LADEF V2f v2f_floor(V2f a);
  56. LADEF V2f v2f_ceil(V2f a);
  57. LADEF V2f v2f_clamp(V2f x, V2f a, V2f b);
  58. LADEF float v2f_sqrlen(V2f a);
  59. LADEF float v2f_len(V2f a);
  60. #define V2d_Fmt "v2d(%lf, %lf)"
  61. #define V2d_Arg(v) (v).x, (v).y
  62. LADEF V2d v2d(double x, double y);
  63. LADEF V2d v2dd(double x);
  64. LADEF V2d v2d2f(V2f a);
  65. LADEF V2d v2d2i(V2i a);
  66. LADEF V2d v2d2u(V2u a);
  67. LADEF V2d v2d3f(V3f a);
  68. LADEF V2d v2d3d(V3d a);
  69. LADEF V2d v2d3i(V3i a);
  70. LADEF V2d v2d3u(V3u a);
  71. LADEF V2d v2d4f(V4f a);
  72. LADEF V2d v2d4d(V4d a);
  73. LADEF V2d v2d4i(V4i a);
  74. LADEF V2d v2d4u(V4u a);
  75. LADEF V2d v2d_sum(V2d a, V2d b);
  76. LADEF V2d v2d_sub(V2d a, V2d b);
  77. LADEF V2d v2d_mul(V2d a, V2d b);
  78. LADEF V2d v2d_div(V2d a, V2d b);
  79. LADEF V2d v2d_sqrt(V2d a);
  80. LADEF V2d v2d_pow(V2d base, V2d exp);
  81. LADEF V2d v2d_sin(V2d a);
  82. LADEF V2d v2d_cos(V2d a);
  83. LADEF V2d v2d_min(V2d a, V2d b);
  84. LADEF V2d v2d_max(V2d a, V2d b);
  85. LADEF V2d v2d_lerp(V2d a, V2d b, V2d t);
  86. LADEF V2d v2d_floor(V2d a);
  87. LADEF V2d v2d_ceil(V2d a);
  88. LADEF V2d v2d_clamp(V2d x, V2d a, V2d b);
  89. LADEF double v2d_sqrlen(V2d a);
  90. LADEF double v2d_len(V2d a);
  91. #define V2i_Fmt "v2i(%d, %d)"
  92. #define V2i_Arg(v) (v).x, (v).y
  93. LADEF V2i v2i(int x, int y);
  94. LADEF V2i v2ii(int x);
  95. LADEF V2i v2i2f(V2f a);
  96. LADEF V2i v2i2d(V2d a);
  97. LADEF V2i v2i2u(V2u a);
  98. LADEF V2i v2i3f(V3f a);
  99. LADEF V2i v2i3d(V3d a);
  100. LADEF V2i v2i3i(V3i a);
  101. LADEF V2i v2i3u(V3u a);
  102. LADEF V2i v2i4f(V4f a);
  103. LADEF V2i v2i4d(V4d a);
  104. LADEF V2i v2i4i(V4i a);
  105. LADEF V2i v2i4u(V4u a);
  106. LADEF V2i v2i_sum(V2i a, V2i b);
  107. LADEF V2i v2i_sub(V2i a, V2i b);
  108. LADEF V2i v2i_mul(V2i a, V2i b);
  109. LADEF V2i v2i_div(V2i a, V2i b);
  110. LADEF V2i v2i_min(V2i a, V2i b);
  111. LADEF V2i v2i_max(V2i a, V2i b);
  112. LADEF V2i v2i_clamp(V2i x, V2i a, V2i b);
  113. LADEF int v2i_sqrlen(V2i a);
  114. #define V2u_Fmt "v2u(%u, %u)"
  115. #define V2u_Arg(v) (v).x, (v).y
  116. LADEF V2u v2u(unsigned int x, unsigned int y);
  117. LADEF V2u v2uu(unsigned int x);
  118. LADEF V2u v2u2f(V2f a);
  119. LADEF V2u v2u2d(V2d a);
  120. LADEF V2u v2u2i(V2i a);
  121. LADEF V2u v2u3f(V3f a);
  122. LADEF V2u v2u3d(V3d a);
  123. LADEF V2u v2u3i(V3i a);
  124. LADEF V2u v2u3u(V3u a);
  125. LADEF V2u v2u4f(V4f a);
  126. LADEF V2u v2u4d(V4d a);
  127. LADEF V2u v2u4i(V4i a);
  128. LADEF V2u v2u4u(V4u a);
  129. LADEF V2u v2u_sum(V2u a, V2u b);
  130. LADEF V2u v2u_sub(V2u a, V2u b);
  131. LADEF V2u v2u_mul(V2u a, V2u b);
  132. LADEF V2u v2u_div(V2u a, V2u b);
  133. LADEF V2u v2u_min(V2u a, V2u b);
  134. LADEF V2u v2u_max(V2u a, V2u b);
  135. LADEF V2u v2u_clamp(V2u x, V2u a, V2u b);
  136. LADEF unsigned int v2u_sqrlen(V2u a);
  137. #define V3f_Fmt "v3f(%f, %f, %f)"
  138. #define V3f_Arg(v) (v).x, (v).y, (v).z
  139. LADEF V3f v3f(float x, float y, float z);
  140. LADEF V3f v3ff(float x);
  141. LADEF V3f v3f2f(V2f a);
  142. LADEF V3f v3f2d(V2d a);
  143. LADEF V3f v3f2i(V2i a);
  144. LADEF V3f v3f2u(V2u a);
  145. LADEF V3f v3f3d(V3d a);
  146. LADEF V3f v3f3i(V3i a);
  147. LADEF V3f v3f3u(V3u a);
  148. LADEF V3f v3f4f(V4f a);
  149. LADEF V3f v3f4d(V4d a);
  150. LADEF V3f v3f4i(V4i a);
  151. LADEF V3f v3f4u(V4u a);
  152. LADEF V3f v3f_sum(V3f a, V3f b);
  153. LADEF V3f v3f_sub(V3f a, V3f b);
  154. LADEF V3f v3f_mul(V3f a, V3f b);
  155. LADEF V3f v3f_div(V3f a, V3f b);
  156. LADEF V3f v3f_sqrt(V3f a);
  157. LADEF V3f v3f_pow(V3f base, V3f exp);
  158. LADEF V3f v3f_sin(V3f a);
  159. LADEF V3f v3f_cos(V3f a);
  160. LADEF V3f v3f_min(V3f a, V3f b);
  161. LADEF V3f v3f_max(V3f a, V3f b);
  162. LADEF V3f v3f_lerp(V3f a, V3f b, V3f t);
  163. LADEF V3f v3f_floor(V3f a);
  164. LADEF V3f v3f_ceil(V3f a);
  165. LADEF V3f v3f_clamp(V3f x, V3f a, V3f b);
  166. LADEF float v3f_sqrlen(V3f a);
  167. LADEF float v3f_len(V3f a);
  168. #define V3d_Fmt "v3d(%lf, %lf, %lf)"
  169. #define V3d_Arg(v) (v).x, (v).y, (v).z
  170. LADEF V3d v3d(double x, double y, double z);
  171. LADEF V3d v3dd(double x);
  172. LADEF V3d v3d2f(V2f a);
  173. LADEF V3d v3d2d(V2d a);
  174. LADEF V3d v3d2i(V2i a);
  175. LADEF V3d v3d2u(V2u a);
  176. LADEF V3d v3d3f(V3f a);
  177. LADEF V3d v3d3i(V3i a);
  178. LADEF V3d v3d3u(V3u a);
  179. LADEF V3d v3d4f(V4f a);
  180. LADEF V3d v3d4d(V4d a);
  181. LADEF V3d v3d4i(V4i a);
  182. LADEF V3d v3d4u(V4u a);
  183. LADEF V3d v3d_sum(V3d a, V3d b);
  184. LADEF V3d v3d_sub(V3d a, V3d b);
  185. LADEF V3d v3d_mul(V3d a, V3d b);
  186. LADEF V3d v3d_div(V3d a, V3d b);
  187. LADEF V3d v3d_sqrt(V3d a);
  188. LADEF V3d v3d_pow(V3d base, V3d exp);
  189. LADEF V3d v3d_sin(V3d a);
  190. LADEF V3d v3d_cos(V3d a);
  191. LADEF V3d v3d_min(V3d a, V3d b);
  192. LADEF V3d v3d_max(V3d a, V3d b);
  193. LADEF V3d v3d_lerp(V3d a, V3d b, V3d t);
  194. LADEF V3d v3d_floor(V3d a);
  195. LADEF V3d v3d_ceil(V3d a);
  196. LADEF V3d v3d_clamp(V3d x, V3d a, V3d b);
  197. LADEF double v3d_sqrlen(V3d a);
  198. LADEF double v3d_len(V3d a);
  199. #define V3i_Fmt "v3i(%d, %d, %d)"
  200. #define V3i_Arg(v) (v).x, (v).y, (v).z
  201. LADEF V3i v3i(int x, int y, int z);
  202. LADEF V3i v3ii(int x);
  203. LADEF V3i v3i2f(V2f a);
  204. LADEF V3i v3i2d(V2d a);
  205. LADEF V3i v3i2i(V2i a);
  206. LADEF V3i v3i2u(V2u a);
  207. LADEF V3i v3i3f(V3f a);
  208. LADEF V3i v3i3d(V3d a);
  209. LADEF V3i v3i3u(V3u a);
  210. LADEF V3i v3i4f(V4f a);
  211. LADEF V3i v3i4d(V4d a);
  212. LADEF V3i v3i4i(V4i a);
  213. LADEF V3i v3i4u(V4u a);
  214. LADEF V3i v3i_sum(V3i a, V3i b);
  215. LADEF V3i v3i_sub(V3i a, V3i b);
  216. LADEF V3i v3i_mul(V3i a, V3i b);
  217. LADEF V3i v3i_div(V3i a, V3i b);
  218. LADEF V3i v3i_min(V3i a, V3i b);
  219. LADEF V3i v3i_max(V3i a, V3i b);
  220. LADEF V3i v3i_clamp(V3i x, V3i a, V3i b);
  221. LADEF int v3i_sqrlen(V3i a);
  222. #define V3u_Fmt "v3u(%u, %u, %u)"
  223. #define V3u_Arg(v) (v).x, (v).y, (v).z
  224. LADEF V3u v3u(unsigned int x, unsigned int y, unsigned int z);
  225. LADEF V3u v3uu(unsigned int x);
  226. LADEF V3u v3u2f(V2f a);
  227. LADEF V3u v3u2d(V2d a);
  228. LADEF V3u v3u2i(V2i a);
  229. LADEF V3u v3u2u(V2u a);
  230. LADEF V3u v3u3f(V3f a);
  231. LADEF V3u v3u3d(V3d a);
  232. LADEF V3u v3u3i(V3i a);
  233. LADEF V3u v3u4f(V4f a);
  234. LADEF V3u v3u4d(V4d a);
  235. LADEF V3u v3u4i(V4i a);
  236. LADEF V3u v3u4u(V4u a);
  237. LADEF V3u v3u_sum(V3u a, V3u b);
  238. LADEF V3u v3u_sub(V3u a, V3u b);
  239. LADEF V3u v3u_mul(V3u a, V3u b);
  240. LADEF V3u v3u_div(V3u a, V3u b);
  241. LADEF V3u v3u_min(V3u a, V3u b);
  242. LADEF V3u v3u_max(V3u a, V3u b);
  243. LADEF V3u v3u_clamp(V3u x, V3u a, V3u b);
  244. LADEF unsigned int v3u_sqrlen(V3u a);
  245. #define V4f_Fmt "v4f(%f, %f, %f, %f)"
  246. #define V4f_Arg(v) (v).x, (v).y, (v).z, (v).w
  247. LADEF V4f v4f(float x, float y, float z, float w);
  248. LADEF V4f v4ff(float x);
  249. LADEF V4f v4f2f(V2f a);
  250. LADEF V4f v4f2d(V2d a);
  251. LADEF V4f v4f2i(V2i a);
  252. LADEF V4f v4f2u(V2u a);
  253. LADEF V4f v4f3f(V3f a);
  254. LADEF V4f v4f3d(V3d a);
  255. LADEF V4f v4f3i(V3i a);
  256. LADEF V4f v4f3u(V3u a);
  257. LADEF V4f v4f4d(V4d a);
  258. LADEF V4f v4f4i(V4i a);
  259. LADEF V4f v4f4u(V4u a);
  260. LADEF V4f v4f_sum(V4f a, V4f b);
  261. LADEF V4f v4f_sub(V4f a, V4f b);
  262. LADEF V4f v4f_mul(V4f a, V4f b);
  263. LADEF V4f v4f_div(V4f a, V4f b);
  264. LADEF V4f v4f_sqrt(V4f a);
  265. LADEF V4f v4f_pow(V4f base, V4f exp);
  266. LADEF V4f v4f_sin(V4f a);
  267. LADEF V4f v4f_cos(V4f a);
  268. LADEF V4f v4f_min(V4f a, V4f b);
  269. LADEF V4f v4f_max(V4f a, V4f b);
  270. LADEF V4f v4f_lerp(V4f a, V4f b, V4f t);
  271. LADEF V4f v4f_floor(V4f a);
  272. LADEF V4f v4f_ceil(V4f a);
  273. LADEF V4f v4f_clamp(V4f x, V4f a, V4f b);
  274. LADEF float v4f_sqrlen(V4f a);
  275. LADEF float v4f_len(V4f a);
  276. #define V4d_Fmt "v4d(%lf, %lf, %lf, %lf)"
  277. #define V4d_Arg(v) (v).x, (v).y, (v).z, (v).w
  278. LADEF V4d v4d(double x, double y, double z, double w);
  279. LADEF V4d v4dd(double x);
  280. LADEF V4d v4d2f(V2f a);
  281. LADEF V4d v4d2d(V2d a);
  282. LADEF V4d v4d2i(V2i a);
  283. LADEF V4d v4d2u(V2u a);
  284. LADEF V4d v4d3f(V3f a);
  285. LADEF V4d v4d3d(V3d a);
  286. LADEF V4d v4d3i(V3i a);
  287. LADEF V4d v4d3u(V3u a);
  288. LADEF V4d v4d4f(V4f a);
  289. LADEF V4d v4d4i(V4i a);
  290. LADEF V4d v4d4u(V4u a);
  291. LADEF V4d v4d_sum(V4d a, V4d b);
  292. LADEF V4d v4d_sub(V4d a, V4d b);
  293. LADEF V4d v4d_mul(V4d a, V4d b);
  294. LADEF V4d v4d_div(V4d a, V4d b);
  295. LADEF V4d v4d_sqrt(V4d a);
  296. LADEF V4d v4d_pow(V4d base, V4d exp);
  297. LADEF V4d v4d_sin(V4d a);
  298. LADEF V4d v4d_cos(V4d a);
  299. LADEF V4d v4d_min(V4d a, V4d b);
  300. LADEF V4d v4d_max(V4d a, V4d b);
  301. LADEF V4d v4d_lerp(V4d a, V4d b, V4d t);
  302. LADEF V4d v4d_floor(V4d a);
  303. LADEF V4d v4d_ceil(V4d a);
  304. LADEF V4d v4d_clamp(V4d x, V4d a, V4d b);
  305. LADEF double v4d_sqrlen(V4d a);
  306. LADEF double v4d_len(V4d a);
  307. #define V4i_Fmt "v4i(%d, %d, %d, %d)"
  308. #define V4i_Arg(v) (v).x, (v).y, (v).z, (v).w
  309. LADEF V4i v4i(int x, int y, int z, int w);
  310. LADEF V4i v4ii(int x);
  311. LADEF V4i v4i2f(V2f a);
  312. LADEF V4i v4i2d(V2d a);
  313. LADEF V4i v4i2i(V2i a);
  314. LADEF V4i v4i2u(V2u a);
  315. LADEF V4i v4i3f(V3f a);
  316. LADEF V4i v4i3d(V3d a);
  317. LADEF V4i v4i3i(V3i a);
  318. LADEF V4i v4i3u(V3u a);
  319. LADEF V4i v4i4f(V4f a);
  320. LADEF V4i v4i4d(V4d a);
  321. LADEF V4i v4i4u(V4u a);
  322. LADEF V4i v4i_sum(V4i a, V4i b);
  323. LADEF V4i v4i_sub(V4i a, V4i b);
  324. LADEF V4i v4i_mul(V4i a, V4i b);
  325. LADEF V4i v4i_div(V4i a, V4i b);
  326. LADEF V4i v4i_min(V4i a, V4i b);
  327. LADEF V4i v4i_max(V4i a, V4i b);
  328. LADEF V4i v4i_clamp(V4i x, V4i a, V4i b);
  329. LADEF int v4i_sqrlen(V4i a);
  330. #define V4u_Fmt "v4u(%u, %u, %u, %u)"
  331. #define V4u_Arg(v) (v).x, (v).y, (v).z, (v).w
  332. LADEF V4u v4u(unsigned int x, unsigned int y, unsigned int z, unsigned int w);
  333. LADEF V4u v4uu(unsigned int x);
  334. LADEF V4u v4u2f(V2f a);
  335. LADEF V4u v4u2d(V2d a);
  336. LADEF V4u v4u2i(V2i a);
  337. LADEF V4u v4u2u(V2u a);
  338. LADEF V4u v4u3f(V3f a);
  339. LADEF V4u v4u3d(V3d a);
  340. LADEF V4u v4u3i(V3i a);
  341. LADEF V4u v4u3u(V3u a);
  342. LADEF V4u v4u4f(V4f a);
  343. LADEF V4u v4u4d(V4d a);
  344. LADEF V4u v4u4i(V4i a);
  345. LADEF V4u v4u_sum(V4u a, V4u b);
  346. LADEF V4u v4u_sub(V4u a, V4u b);
  347. LADEF V4u v4u_mul(V4u a, V4u b);
  348. LADEF V4u v4u_div(V4u a, V4u b);
  349. LADEF V4u v4u_min(V4u a, V4u b);
  350. LADEF V4u v4u_max(V4u a, V4u b);
  351. LADEF V4u v4u_clamp(V4u x, V4u a, V4u b);
  352. LADEF unsigned int v4u_sqrlen(V4u a);
  353. #endif // LA_H_
  354. #ifdef LA_IMPLEMENTATION
  355. LADEF float lerpf(float a, float b, float t)
  356. {
  357. return a + (b - a) * t;
  358. }
  359. LADEF double lerp(double a, double b, double t)
  360. {
  361. return a + (b - a) * t;
  362. }
  363. LADEF int mini(int a, int b)
  364. {
  365. return a < b ? a : b;
  366. }
  367. LADEF int maxi(int a, int b)
  368. {
  369. return a < b ? b : a;
  370. }
  371. LADEF unsigned int minu(unsigned int a, unsigned int b)
  372. {
  373. return a < b ? a : b;
  374. }
  375. LADEF unsigned int maxu(unsigned int a, unsigned int b)
  376. {
  377. return a < b ? b : a;
  378. }
  379. LADEF float clampf(float x, float a, float b)
  380. {
  381. return fminf(fmaxf(a, x), b);
  382. }
  383. LADEF double clampd(double x, double a, double b)
  384. {
  385. return fmin(fmax(a, x), b);
  386. }
  387. LADEF int clampi(int x, int a, int b)
  388. {
  389. return mini(maxi(a, x), b);
  390. }
  391. LADEF unsigned int clampu(unsigned int x, unsigned int a, unsigned int b)
  392. {
  393. return minu(maxu(a, x), b);
  394. }
  395. LADEF V2f v2f(float x, float y)
  396. {
  397. V2f v;
  398. v.x = x;
  399. v.y = y;
  400. return v;
  401. }
  402. LADEF V2f v2ff(float x)
  403. {
  404. return v2f(x, x);
  405. }
  406. LADEF V2f v2f2d(V2d a)
  407. {
  408. V2f result;
  409. result.x = (float) a.x;
  410. result.y = (float) a.y;
  411. return result;
  412. }
  413. LADEF V2f v2f2i(V2i a)
  414. {
  415. V2f result;
  416. result.x = (float) a.x;
  417. result.y = (float) a.y;
  418. return result;
  419. }
  420. LADEF V2f v2f2u(V2u a)
  421. {
  422. V2f result;
  423. result.x = (float) a.x;
  424. result.y = (float) a.y;
  425. return result;
  426. }
  427. LADEF V2f v2f3f(V3f a)
  428. {
  429. V2f result;
  430. result.x = (float) a.x;
  431. result.y = (float) a.y;
  432. return result;
  433. }
  434. LADEF V2f v2f3d(V3d a)
  435. {
  436. V2f result;
  437. result.x = (float) a.x;
  438. result.y = (float) a.y;
  439. return result;
  440. }
  441. LADEF V2f v2f3i(V3i a)
  442. {
  443. V2f result;
  444. result.x = (float) a.x;
  445. result.y = (float) a.y;
  446. return result;
  447. }
  448. LADEF V2f v2f3u(V3u a)
  449. {
  450. V2f result;
  451. result.x = (float) a.x;
  452. result.y = (float) a.y;
  453. return result;
  454. }
  455. LADEF V2f v2f4f(V4f a)
  456. {
  457. V2f result;
  458. result.x = (float) a.x;
  459. result.y = (float) a.y;
  460. return result;
  461. }
  462. LADEF V2f v2f4d(V4d a)
  463. {
  464. V2f result;
  465. result.x = (float) a.x;
  466. result.y = (float) a.y;
  467. return result;
  468. }
  469. LADEF V2f v2f4i(V4i a)
  470. {
  471. V2f result;
  472. result.x = (float) a.x;
  473. result.y = (float) a.y;
  474. return result;
  475. }
  476. LADEF V2f v2f4u(V4u a)
  477. {
  478. V2f result;
  479. result.x = (float) a.x;
  480. result.y = (float) a.y;
  481. return result;
  482. }
  483. LADEF V2f v2f_sum(V2f a, V2f b)
  484. {
  485. a.x += b.x;
  486. a.y += b.y;
  487. return a;
  488. }
  489. LADEF V2f v2f_sub(V2f a, V2f b)
  490. {
  491. a.x -= b.x;
  492. a.y -= b.y;
  493. return a;
  494. }
  495. LADEF V2f v2f_mul(V2f a, V2f b)
  496. {
  497. a.x *= b.x;
  498. a.y *= b.y;
  499. return a;
  500. }
  501. LADEF V2f v2f_div(V2f a, V2f b)
  502. {
  503. a.x /= b.x;
  504. a.y /= b.y;
  505. return a;
  506. }
  507. LADEF V2f v2f_sqrt(V2f a)
  508. {
  509. a.x = sqrtf(a.x);
  510. a.y = sqrtf(a.y);
  511. return a;
  512. }
  513. LADEF V2f v2f_pow(V2f base, V2f exp)
  514. {
  515. base.x = powf(base.x, exp.x);
  516. base.y = powf(base.y, exp.y);
  517. return base;
  518. }
  519. LADEF V2f v2f_sin(V2f a)
  520. {
  521. a.x = sinf(a.x);
  522. a.y = sinf(a.y);
  523. return a;
  524. }
  525. LADEF V2f v2f_cos(V2f a)
  526. {
  527. a.x = cosf(a.x);
  528. a.y = cosf(a.y);
  529. return a;
  530. }
  531. LADEF V2f v2f_min(V2f a, V2f b)
  532. {
  533. a.x = fminf(a.x, b.x);
  534. a.y = fminf(a.y, b.y);
  535. return a;
  536. }
  537. LADEF V2f v2f_max(V2f a, V2f b)
  538. {
  539. a.x = fmaxf(a.x, b.x);
  540. a.y = fmaxf(a.y, b.y);
  541. return a;
  542. }
  543. LADEF V2f v2f_lerp(V2f a, V2f b, V2f t)
  544. {
  545. a.x = lerpf(a.x, b.x, t.x);
  546. a.y = lerpf(a.y, b.y, t.y);
  547. return a;
  548. }
  549. LADEF V2f v2f_floor(V2f a)
  550. {
  551. a.x = floorf(a.x);
  552. a.y = floorf(a.y);
  553. return a;
  554. }
  555. LADEF V2f v2f_ceil(V2f a)
  556. {
  557. a.x = ceilf(a.x);
  558. a.y = ceilf(a.y);
  559. return a;
  560. }
  561. LADEF V2f v2f_clamp(V2f x, V2f a, V2f b)
  562. {
  563. x.x = clampf(x.x, a.x, b.x);
  564. x.y = clampf(x.y, a.y, b.y);
  565. return x;
  566. }
  567. LADEF float v2f_sqrlen(V2f a)
  568. {
  569. return a.x*a.x + a.y*a.y;
  570. }
  571. LADEF float v2f_len(V2f a)
  572. {
  573. return sqrtf(v2f_sqrlen(a));
  574. }
  575. LADEF V2d v2d(double x, double y)
  576. {
  577. V2d v;
  578. v.x = x;
  579. v.y = y;
  580. return v;
  581. }
  582. LADEF V2d v2dd(double x)
  583. {
  584. return v2d(x, x);
  585. }
  586. LADEF V2d v2d2f(V2f a)
  587. {
  588. V2d result;
  589. result.x = (double) a.x;
  590. result.y = (double) a.y;
  591. return result;
  592. }
  593. LADEF V2d v2d2i(V2i a)
  594. {
  595. V2d result;
  596. result.x = (double) a.x;
  597. result.y = (double) a.y;
  598. return result;
  599. }
  600. LADEF V2d v2d2u(V2u a)
  601. {
  602. V2d result;
  603. result.x = (double) a.x;
  604. result.y = (double) a.y;
  605. return result;
  606. }
  607. LADEF V2d v2d3f(V3f a)
  608. {
  609. V2d result;
  610. result.x = (double) a.x;
  611. result.y = (double) a.y;
  612. return result;
  613. }
  614. LADEF V2d v2d3d(V3d a)
  615. {
  616. V2d result;
  617. result.x = (double) a.x;
  618. result.y = (double) a.y;
  619. return result;
  620. }
  621. LADEF V2d v2d3i(V3i a)
  622. {
  623. V2d result;
  624. result.x = (double) a.x;
  625. result.y = (double) a.y;
  626. return result;
  627. }
  628. LADEF V2d v2d3u(V3u a)
  629. {
  630. V2d result;
  631. result.x = (double) a.x;
  632. result.y = (double) a.y;
  633. return result;
  634. }
  635. LADEF V2d v2d4f(V4f a)
  636. {
  637. V2d result;
  638. result.x = (double) a.x;
  639. result.y = (double) a.y;
  640. return result;
  641. }
  642. LADEF V2d v2d4d(V4d a)
  643. {
  644. V2d result;
  645. result.x = (double) a.x;
  646. result.y = (double) a.y;
  647. return result;
  648. }
  649. LADEF V2d v2d4i(V4i a)
  650. {
  651. V2d result;
  652. result.x = (double) a.x;
  653. result.y = (double) a.y;
  654. return result;
  655. }
  656. LADEF V2d v2d4u(V4u a)
  657. {
  658. V2d result;
  659. result.x = (double) a.x;
  660. result.y = (double) a.y;
  661. return result;
  662. }
  663. LADEF V2d v2d_sum(V2d a, V2d b)
  664. {
  665. a.x += b.x;
  666. a.y += b.y;
  667. return a;
  668. }
  669. LADEF V2d v2d_sub(V2d a, V2d b)
  670. {
  671. a.x -= b.x;
  672. a.y -= b.y;
  673. return a;
  674. }
  675. LADEF V2d v2d_mul(V2d a, V2d b)
  676. {
  677. a.x *= b.x;
  678. a.y *= b.y;
  679. return a;
  680. }
  681. LADEF V2d v2d_div(V2d a, V2d b)
  682. {
  683. a.x /= b.x;
  684. a.y /= b.y;
  685. return a;
  686. }
  687. LADEF V2d v2d_sqrt(V2d a)
  688. {
  689. a.x = sqrt(a.x);
  690. a.y = sqrt(a.y);
  691. return a;
  692. }
  693. LADEF V2d v2d_pow(V2d base, V2d exp)
  694. {
  695. base.x = pow(base.x, exp.x);
  696. base.y = pow(base.y, exp.y);
  697. return base;
  698. }
  699. LADEF V2d v2d_sin(V2d a)
  700. {
  701. a.x = sin(a.x);
  702. a.y = sin(a.y);
  703. return a;
  704. }
  705. LADEF V2d v2d_cos(V2d a)
  706. {
  707. a.x = cos(a.x);
  708. a.y = cos(a.y);
  709. return a;
  710. }
  711. LADEF V2d v2d_min(V2d a, V2d b)
  712. {
  713. a.x = fmin(a.x, b.x);
  714. a.y = fmin(a.y, b.y);
  715. return a;
  716. }
  717. LADEF V2d v2d_max(V2d a, V2d b)
  718. {
  719. a.x = fmax(a.x, b.x);
  720. a.y = fmax(a.y, b.y);
  721. return a;
  722. }
  723. LADEF V2d v2d_lerp(V2d a, V2d b, V2d t)
  724. {
  725. a.x = lerp(a.x, b.x, t.x);
  726. a.y = lerp(a.y, b.y, t.y);
  727. return a;
  728. }
  729. LADEF V2d v2d_floor(V2d a)
  730. {
  731. a.x = floor(a.x);
  732. a.y = floor(a.y);
  733. return a;
  734. }
  735. LADEF V2d v2d_ceil(V2d a)
  736. {
  737. a.x = ceil(a.x);
  738. a.y = ceil(a.y);
  739. return a;
  740. }
  741. LADEF V2d v2d_clamp(V2d x, V2d a, V2d b)
  742. {
  743. x.x = clampd(x.x, a.x, b.x);
  744. x.y = clampd(x.y, a.y, b.y);
  745. return x;
  746. }
  747. LADEF double v2d_sqrlen(V2d a)
  748. {
  749. return a.x*a.x + a.y*a.y;
  750. }
  751. LADEF double v2d_len(V2d a)
  752. {
  753. return sqrt(v2d_sqrlen(a));
  754. }
  755. LADEF V2i v2i(int x, int y)
  756. {
  757. V2i v;
  758. v.x = x;
  759. v.y = y;
  760. return v;
  761. }
  762. LADEF V2i v2ii(int x)
  763. {
  764. return v2i(x, x);
  765. }
  766. LADEF V2i v2i2f(V2f a)
  767. {
  768. V2i result;
  769. result.x = (int) a.x;
  770. result.y = (int) a.y;
  771. return result;
  772. }
  773. LADEF V2i v2i2d(V2d a)
  774. {
  775. V2i result;
  776. result.x = (int) a.x;
  777. result.y = (int) a.y;
  778. return result;
  779. }
  780. LADEF V2i v2i2u(V2u a)
  781. {
  782. V2i result;
  783. result.x = (int) a.x;
  784. result.y = (int) a.y;
  785. return result;
  786. }
  787. LADEF V2i v2i3f(V3f a)
  788. {
  789. V2i result;
  790. result.x = (int) a.x;
  791. result.y = (int) a.y;
  792. return result;
  793. }
  794. LADEF V2i v2i3d(V3d a)
  795. {
  796. V2i result;
  797. result.x = (int) a.x;
  798. result.y = (int) a.y;
  799. return result;
  800. }
  801. LADEF V2i v2i3i(V3i a)
  802. {
  803. V2i result;
  804. result.x = (int) a.x;
  805. result.y = (int) a.y;
  806. return result;
  807. }
  808. LADEF V2i v2i3u(V3u a)
  809. {
  810. V2i result;
  811. result.x = (int) a.x;
  812. result.y = (int) a.y;
  813. return result;
  814. }
  815. LADEF V2i v2i4f(V4f a)
  816. {
  817. V2i result;
  818. result.x = (int) a.x;
  819. result.y = (int) a.y;
  820. return result;
  821. }
  822. LADEF V2i v2i4d(V4d a)
  823. {
  824. V2i result;
  825. result.x = (int) a.x;
  826. result.y = (int) a.y;
  827. return result;
  828. }
  829. LADEF V2i v2i4i(V4i a)
  830. {
  831. V2i result;
  832. result.x = (int) a.x;
  833. result.y = (int) a.y;
  834. return result;
  835. }
  836. LADEF V2i v2i4u(V4u a)
  837. {
  838. V2i result;
  839. result.x = (int) a.x;
  840. result.y = (int) a.y;
  841. return result;
  842. }
  843. LADEF V2i v2i_sum(V2i a, V2i b)
  844. {
  845. a.x += b.x;
  846. a.y += b.y;
  847. return a;
  848. }
  849. LADEF V2i v2i_sub(V2i a, V2i b)
  850. {
  851. a.x -= b.x;
  852. a.y -= b.y;
  853. return a;
  854. }
  855. LADEF V2i v2i_mul(V2i a, V2i b)
  856. {
  857. a.x *= b.x;
  858. a.y *= b.y;
  859. return a;
  860. }
  861. LADEF V2i v2i_div(V2i a, V2i b)
  862. {
  863. a.x /= b.x;
  864. a.y /= b.y;
  865. return a;
  866. }
  867. LADEF V2i v2i_min(V2i a, V2i b)
  868. {
  869. a.x = mini(a.x, b.x);
  870. a.y = mini(a.y, b.y);
  871. return a;
  872. }
  873. LADEF V2i v2i_max(V2i a, V2i b)
  874. {
  875. a.x = maxi(a.x, b.x);
  876. a.y = maxi(a.y, b.y);
  877. return a;
  878. }
  879. LADEF V2i v2i_clamp(V2i x, V2i a, V2i b)
  880. {
  881. x.x = clampi(x.x, a.x, b.x);
  882. x.y = clampi(x.y, a.y, b.y);
  883. return x;
  884. }
  885. LADEF int v2i_sqrlen(V2i a)
  886. {
  887. return a.x*a.x + a.y*a.y;
  888. }
  889. LADEF V2u v2u(unsigned int x, unsigned int y)
  890. {
  891. V2u v;
  892. v.x = x;
  893. v.y = y;
  894. return v;
  895. }
  896. LADEF V2u v2uu(unsigned int x)
  897. {
  898. return v2u(x, x);
  899. }
  900. LADEF V2u v2u2f(V2f a)
  901. {
  902. V2u result;
  903. result.x = (unsigned int) a.x;
  904. result.y = (unsigned int) a.y;
  905. return result;
  906. }
  907. LADEF V2u v2u2d(V2d a)
  908. {
  909. V2u result;
  910. result.x = (unsigned int) a.x;
  911. result.y = (unsigned int) a.y;
  912. return result;
  913. }
  914. LADEF V2u v2u2i(V2i a)
  915. {
  916. V2u result;
  917. result.x = (unsigned int) a.x;
  918. result.y = (unsigned int) a.y;
  919. return result;
  920. }
  921. LADEF V2u v2u3f(V3f a)
  922. {
  923. V2u result;
  924. result.x = (unsigned int) a.x;
  925. result.y = (unsigned int) a.y;
  926. return result;
  927. }
  928. LADEF V2u v2u3d(V3d a)
  929. {
  930. V2u result;
  931. result.x = (unsigned int) a.x;
  932. result.y = (unsigned int) a.y;
  933. return result;
  934. }
  935. LADEF V2u v2u3i(V3i a)
  936. {
  937. V2u result;
  938. result.x = (unsigned int) a.x;
  939. result.y = (unsigned int) a.y;
  940. return result;
  941. }
  942. LADEF V2u v2u3u(V3u a)
  943. {
  944. V2u result;
  945. result.x = (unsigned int) a.x;
  946. result.y = (unsigned int) a.y;
  947. return result;
  948. }
  949. LADEF V2u v2u4f(V4f a)
  950. {
  951. V2u result;
  952. result.x = (unsigned int) a.x;
  953. result.y = (unsigned int) a.y;
  954. return result;
  955. }
  956. LADEF V2u v2u4d(V4d a)
  957. {
  958. V2u result;
  959. result.x = (unsigned int) a.x;
  960. result.y = (unsigned int) a.y;
  961. return result;
  962. }
  963. LADEF V2u v2u4i(V4i a)
  964. {
  965. V2u result;
  966. result.x = (unsigned int) a.x;
  967. result.y = (unsigned int) a.y;
  968. return result;
  969. }
  970. LADEF V2u v2u4u(V4u a)
  971. {
  972. V2u result;
  973. result.x = (unsigned int) a.x;
  974. result.y = (unsigned int) a.y;
  975. return result;
  976. }
  977. LADEF V2u v2u_sum(V2u a, V2u b)
  978. {
  979. a.x += b.x;
  980. a.y += b.y;
  981. return a;
  982. }
  983. LADEF V2u v2u_sub(V2u a, V2u b)
  984. {
  985. a.x -= b.x;
  986. a.y -= b.y;
  987. return a;
  988. }
  989. LADEF V2u v2u_mul(V2u a, V2u b)
  990. {
  991. a.x *= b.x;
  992. a.y *= b.y;
  993. return a;
  994. }
  995. LADEF V2u v2u_div(V2u a, V2u b)
  996. {
  997. a.x /= b.x;
  998. a.y /= b.y;
  999. return a;
  1000. }
  1001. LADEF V2u v2u_min(V2u a, V2u b)
  1002. {
  1003. a.x = minu(a.x, b.x);
  1004. a.y = minu(a.y, b.y);
  1005. return a;
  1006. }
  1007. LADEF V2u v2u_max(V2u a, V2u b)
  1008. {
  1009. a.x = maxu(a.x, b.x);
  1010. a.y = maxu(a.y, b.y);
  1011. return a;
  1012. }
  1013. LADEF V2u v2u_clamp(V2u x, V2u a, V2u b)
  1014. {
  1015. x.x = clampu(x.x, a.x, b.x);
  1016. x.y = clampu(x.y, a.y, b.y);
  1017. return x;
  1018. }
  1019. LADEF unsigned int v2u_sqrlen(V2u a)
  1020. {
  1021. return a.x*a.x + a.y*a.y;
  1022. }
  1023. LADEF V3f v3f(float x, float y, float z)
  1024. {
  1025. V3f v;
  1026. v.x = x;
  1027. v.y = y;
  1028. v.z = z;
  1029. return v;
  1030. }
  1031. LADEF V3f v3ff(float x)
  1032. {
  1033. return v3f(x, x, x);
  1034. }
  1035. LADEF V3f v3f2f(V2f a)
  1036. {
  1037. V3f result;
  1038. result.x = (float) a.x;
  1039. result.y = (float) a.y;
  1040. result.z = 0.0f;
  1041. return result;
  1042. }
  1043. LADEF V3f v3f2d(V2d a)
  1044. {
  1045. V3f result;
  1046. result.x = (float) a.x;
  1047. result.y = (float) a.y;
  1048. result.z = 0.0f;
  1049. return result;
  1050. }
  1051. LADEF V3f v3f2i(V2i a)
  1052. {
  1053. V3f result;
  1054. result.x = (float) a.x;
  1055. result.y = (float) a.y;
  1056. result.z = 0.0f;
  1057. return result;
  1058. }
  1059. LADEF V3f v3f2u(V2u a)
  1060. {
  1061. V3f result;
  1062. result.x = (float) a.x;
  1063. result.y = (float) a.y;
  1064. result.z = 0.0f;
  1065. return result;
  1066. }
  1067. LADEF V3f v3f3d(V3d a)
  1068. {
  1069. V3f result;
  1070. result.x = (float) a.x;
  1071. result.y = (float) a.y;
  1072. result.z = (float) a.z;
  1073. return result;
  1074. }
  1075. LADEF V3f v3f3i(V3i a)
  1076. {
  1077. V3f result;
  1078. result.x = (float) a.x;
  1079. result.y = (float) a.y;
  1080. result.z = (float) a.z;
  1081. return result;
  1082. }
  1083. LADEF V3f v3f3u(V3u a)
  1084. {
  1085. V3f result;
  1086. result.x = (float) a.x;
  1087. result.y = (float) a.y;
  1088. result.z = (float) a.z;
  1089. return result;
  1090. }
  1091. LADEF V3f v3f4f(V4f a)
  1092. {
  1093. V3f result;
  1094. result.x = (float) a.x;
  1095. result.y = (float) a.y;
  1096. result.z = (float) a.z;
  1097. return result;
  1098. }
  1099. LADEF V3f v3f4d(V4d a)
  1100. {
  1101. V3f result;
  1102. result.x = (float) a.x;
  1103. result.y = (float) a.y;
  1104. result.z = (float) a.z;
  1105. return result;
  1106. }
  1107. LADEF V3f v3f4i(V4i a)
  1108. {
  1109. V3f result;
  1110. result.x = (float) a.x;
  1111. result.y = (float) a.y;
  1112. result.z = (float) a.z;
  1113. return result;
  1114. }
  1115. LADEF V3f v3f4u(V4u a)
  1116. {
  1117. V3f result;
  1118. result.x = (float) a.x;
  1119. result.y = (float) a.y;
  1120. result.z = (float) a.z;
  1121. return result;
  1122. }
  1123. LADEF V3f v3f_sum(V3f a, V3f b)
  1124. {
  1125. a.x += b.x;
  1126. a.y += b.y;
  1127. a.z += b.z;
  1128. return a;
  1129. }
  1130. LADEF V3f v3f_sub(V3f a, V3f b)
  1131. {
  1132. a.x -= b.x;
  1133. a.y -= b.y;
  1134. a.z -= b.z;
  1135. return a;
  1136. }
  1137. LADEF V3f v3f_mul(V3f a, V3f b)
  1138. {
  1139. a.x *= b.x;
  1140. a.y *= b.y;
  1141. a.z *= b.z;
  1142. return a;
  1143. }
  1144. LADEF V3f v3f_div(V3f a, V3f b)
  1145. {
  1146. a.x /= b.x;
  1147. a.y /= b.y;
  1148. a.z /= b.z;
  1149. return a;
  1150. }
  1151. LADEF V3f v3f_sqrt(V3f a)
  1152. {
  1153. a.x = sqrtf(a.x);
  1154. a.y = sqrtf(a.y);
  1155. a.z = sqrtf(a.z);
  1156. return a;
  1157. }
  1158. LADEF V3f v3f_pow(V3f base, V3f exp)
  1159. {
  1160. base.x = powf(base.x, exp.x);
  1161. base.y = powf(base.y, exp.y);
  1162. base.z = powf(base.z, exp.z);
  1163. return base;
  1164. }
  1165. LADEF V3f v3f_sin(V3f a)
  1166. {
  1167. a.x = sinf(a.x);
  1168. a.y = sinf(a.y);
  1169. a.z = sinf(a.z);
  1170. return a;
  1171. }
  1172. LADEF V3f v3f_cos(V3f a)
  1173. {
  1174. a.x = cosf(a.x);
  1175. a.y = cosf(a.y);
  1176. a.z = cosf(a.z);
  1177. return a;
  1178. }
  1179. LADEF V3f v3f_min(V3f a, V3f b)
  1180. {
  1181. a.x = fminf(a.x, b.x);
  1182. a.y = fminf(a.y, b.y);
  1183. a.z = fminf(a.z, b.z);
  1184. return a;
  1185. }
  1186. LADEF V3f v3f_max(V3f a, V3f b)
  1187. {
  1188. a.x = fmaxf(a.x, b.x);
  1189. a.y = fmaxf(a.y, b.y);
  1190. a.z = fmaxf(a.z, b.z);
  1191. return a;
  1192. }
  1193. LADEF V3f v3f_lerp(V3f a, V3f b, V3f t)
  1194. {
  1195. a.x = lerpf(a.x, b.x, t.x);
  1196. a.y = lerpf(a.y, b.y, t.y);
  1197. a.z = lerpf(a.z, b.z, t.z);
  1198. return a;
  1199. }
  1200. LADEF V3f v3f_floor(V3f a)
  1201. {
  1202. a.x = floorf(a.x);
  1203. a.y = floorf(a.y);
  1204. a.z = floorf(a.z);
  1205. return a;
  1206. }
  1207. LADEF V3f v3f_ceil(V3f a)
  1208. {
  1209. a.x = ceilf(a.x);
  1210. a.y = ceilf(a.y);
  1211. a.z = ceilf(a.z);
  1212. return a;
  1213. }
  1214. LADEF V3f v3f_clamp(V3f x, V3f a, V3f b)
  1215. {
  1216. x.x = clampf(x.x, a.x, b.x);
  1217. x.y = clampf(x.y, a.y, b.y);
  1218. x.z = clampf(x.z, a.z, b.z);
  1219. return x;
  1220. }
  1221. LADEF float v3f_sqrlen(V3f a)
  1222. {
  1223. return a.x*a.x + a.y*a.y + a.z*a.z;
  1224. }
  1225. LADEF float v3f_len(V3f a)
  1226. {
  1227. return sqrtf(v3f_sqrlen(a));
  1228. }
  1229. LADEF V3d v3d(double x, double y, double z)
  1230. {
  1231. V3d v;
  1232. v.x = x;
  1233. v.y = y;
  1234. v.z = z;
  1235. return v;
  1236. }
  1237. LADEF V3d v3dd(double x)
  1238. {
  1239. return v3d(x, x, x);
  1240. }
  1241. LADEF V3d v3d2f(V2f a)
  1242. {
  1243. V3d result;
  1244. result.x = (double) a.x;
  1245. result.y = (double) a.y;
  1246. result.z = 0.0;
  1247. return result;
  1248. }
  1249. LADEF V3d v3d2d(V2d a)
  1250. {
  1251. V3d result;
  1252. result.x = (double) a.x;
  1253. result.y = (double) a.y;
  1254. result.z = 0.0;
  1255. return result;
  1256. }
  1257. LADEF V3d v3d2i(V2i a)
  1258. {
  1259. V3d result;
  1260. result.x = (double) a.x;
  1261. result.y = (double) a.y;
  1262. result.z = 0.0;
  1263. return result;
  1264. }
  1265. LADEF V3d v3d2u(V2u a)
  1266. {
  1267. V3d result;
  1268. result.x = (double) a.x;
  1269. result.y = (double) a.y;
  1270. result.z = 0.0;
  1271. return result;
  1272. }
  1273. LADEF V3d v3d3f(V3f a)
  1274. {
  1275. V3d result;
  1276. result.x = (double) a.x;
  1277. result.y = (double) a.y;
  1278. result.z = (double) a.z;
  1279. return result;
  1280. }
  1281. LADEF V3d v3d3i(V3i a)
  1282. {
  1283. V3d result;
  1284. result.x = (double) a.x;
  1285. result.y = (double) a.y;
  1286. result.z = (double) a.z;
  1287. return result;
  1288. }
  1289. LADEF V3d v3d3u(V3u a)
  1290. {
  1291. V3d result;
  1292. result.x = (double) a.x;
  1293. result.y = (double) a.y;
  1294. result.z = (double) a.z;
  1295. return result;
  1296. }
  1297. LADEF V3d v3d4f(V4f a)
  1298. {
  1299. V3d result;
  1300. result.x = (double) a.x;
  1301. result.y = (double) a.y;
  1302. result.z = (double) a.z;
  1303. return result;
  1304. }
  1305. LADEF V3d v3d4d(V4d a)
  1306. {
  1307. V3d result;
  1308. result.x = (double) a.x;
  1309. result.y = (double) a.y;
  1310. result.z = (double) a.z;
  1311. return result;
  1312. }
  1313. LADEF V3d v3d4i(V4i a)
  1314. {
  1315. V3d result;
  1316. result.x = (double) a.x;
  1317. result.y = (double) a.y;
  1318. result.z = (double) a.z;
  1319. return result;
  1320. }
  1321. LADEF V3d v3d4u(V4u a)
  1322. {
  1323. V3d result;
  1324. result.x = (double) a.x;
  1325. result.y = (double) a.y;
  1326. result.z = (double) a.z;
  1327. return result;
  1328. }
  1329. LADEF V3d v3d_sum(V3d a, V3d b)
  1330. {
  1331. a.x += b.x;
  1332. a.y += b.y;
  1333. a.z += b.z;
  1334. return a;
  1335. }
  1336. LADEF V3d v3d_sub(V3d a, V3d b)
  1337. {
  1338. a.x -= b.x;
  1339. a.y -= b.y;
  1340. a.z -= b.z;
  1341. return a;
  1342. }
  1343. LADEF V3d v3d_mul(V3d a, V3d b)
  1344. {
  1345. a.x *= b.x;
  1346. a.y *= b.y;
  1347. a.z *= b.z;
  1348. return a;
  1349. }
  1350. LADEF V3d v3d_div(V3d a, V3d b)
  1351. {
  1352. a.x /= b.x;
  1353. a.y /= b.y;
  1354. a.z /= b.z;
  1355. return a;
  1356. }
  1357. LADEF V3d v3d_sqrt(V3d a)
  1358. {
  1359. a.x = sqrt(a.x);
  1360. a.y = sqrt(a.y);
  1361. a.z = sqrt(a.z);
  1362. return a;
  1363. }
  1364. LADEF V3d v3d_pow(V3d base, V3d exp)
  1365. {
  1366. base.x = pow(base.x, exp.x);
  1367. base.y = pow(base.y, exp.y);
  1368. base.z = pow(base.z, exp.z);
  1369. return base;
  1370. }
  1371. LADEF V3d v3d_sin(V3d a)
  1372. {
  1373. a.x = sin(a.x);
  1374. a.y = sin(a.y);
  1375. a.z = sin(a.z);
  1376. return a;
  1377. }
  1378. LADEF V3d v3d_cos(V3d a)
  1379. {
  1380. a.x = cos(a.x);
  1381. a.y = cos(a.y);
  1382. a.z = cos(a.z);
  1383. return a;
  1384. }
  1385. LADEF V3d v3d_min(V3d a, V3d b)
  1386. {
  1387. a.x = fmin(a.x, b.x);
  1388. a.y = fmin(a.y, b.y);
  1389. a.z = fmin(a.z, b.z);
  1390. return a;
  1391. }
  1392. LADEF V3d v3d_max(V3d a, V3d b)
  1393. {
  1394. a.x = fmax(a.x, b.x);
  1395. a.y = fmax(a.y, b.y);
  1396. a.z = fmax(a.z, b.z);
  1397. return a;
  1398. }
  1399. LADEF V3d v3d_lerp(V3d a, V3d b, V3d t)
  1400. {
  1401. a.x = lerp(a.x, b.x, t.x);
  1402. a.y = lerp(a.y, b.y, t.y);
  1403. a.z = lerp(a.z, b.z, t.z);
  1404. return a;
  1405. }
  1406. LADEF V3d v3d_floor(V3d a)
  1407. {
  1408. a.x = floor(a.x);
  1409. a.y = floor(a.y);
  1410. a.z = floor(a.z);
  1411. return a;
  1412. }
  1413. LADEF V3d v3d_ceil(V3d a)
  1414. {
  1415. a.x = ceil(a.x);
  1416. a.y = ceil(a.y);
  1417. a.z = ceil(a.z);
  1418. return a;
  1419. }
  1420. LADEF V3d v3d_clamp(V3d x, V3d a, V3d b)
  1421. {
  1422. x.x = clampd(x.x, a.x, b.x);
  1423. x.y = clampd(x.y, a.y, b.y);
  1424. x.z = clampd(x.z, a.z, b.z);
  1425. return x;
  1426. }
  1427. LADEF double v3d_sqrlen(V3d a)
  1428. {
  1429. return a.x*a.x + a.y*a.y + a.z*a.z;
  1430. }
  1431. LADEF double v3d_len(V3d a)
  1432. {
  1433. return sqrt(v3d_sqrlen(a));
  1434. }
  1435. LADEF V3i v3i(int x, int y, int z)
  1436. {
  1437. V3i v;
  1438. v.x = x;
  1439. v.y = y;
  1440. v.z = z;
  1441. return v;
  1442. }
  1443. LADEF V3i v3ii(int x)
  1444. {
  1445. return v3i(x, x, x);
  1446. }
  1447. LADEF V3i v3i2f(V2f a)
  1448. {
  1449. V3i result;
  1450. result.x = (int) a.x;
  1451. result.y = (int) a.y;
  1452. result.z = 0;
  1453. return result;
  1454. }
  1455. LADEF V3i v3i2d(V2d a)
  1456. {
  1457. V3i result;
  1458. result.x = (int) a.x;
  1459. result.y = (int) a.y;
  1460. result.z = 0;
  1461. return result;
  1462. }
  1463. LADEF V3i v3i2i(V2i a)
  1464. {
  1465. V3i result;
  1466. result.x = (int) a.x;
  1467. result.y = (int) a.y;
  1468. result.z = 0;
  1469. return result;
  1470. }
  1471. LADEF V3i v3i2u(V2u a)
  1472. {
  1473. V3i result;
  1474. result.x = (int) a.x;
  1475. result.y = (int) a.y;
  1476. result.z = 0;
  1477. return result;
  1478. }
  1479. LADEF V3i v3i3f(V3f a)
  1480. {
  1481. V3i result;
  1482. result.x = (int) a.x;
  1483. result.y = (int) a.y;
  1484. result.z = (int) a.z;
  1485. return result;
  1486. }
  1487. LADEF V3i v3i3d(V3d a)
  1488. {
  1489. V3i result;
  1490. result.x = (int) a.x;
  1491. result.y = (int) a.y;
  1492. result.z = (int) a.z;
  1493. return result;
  1494. }
  1495. LADEF V3i v3i3u(V3u a)
  1496. {
  1497. V3i result;
  1498. result.x = (int) a.x;
  1499. result.y = (int) a.y;
  1500. result.z = (int) a.z;
  1501. return result;
  1502. }
  1503. LADEF V3i v3i4f(V4f a)
  1504. {
  1505. V3i result;
  1506. result.x = (int) a.x;
  1507. result.y = (int) a.y;
  1508. result.z = (int) a.z;
  1509. return result;
  1510. }
  1511. LADEF V3i v3i4d(V4d a)
  1512. {
  1513. V3i result;
  1514. result.x = (int) a.x;
  1515. result.y = (int) a.y;
  1516. result.z = (int) a.z;
  1517. return result;
  1518. }
  1519. LADEF V3i v3i4i(V4i a)
  1520. {
  1521. V3i result;
  1522. result.x = (int) a.x;
  1523. result.y = (int) a.y;
  1524. result.z = (int) a.z;
  1525. return result;
  1526. }
  1527. LADEF V3i v3i4u(V4u a)
  1528. {
  1529. V3i result;
  1530. result.x = (int) a.x;
  1531. result.y = (int) a.y;
  1532. result.z = (int) a.z;
  1533. return result;
  1534. }
  1535. LADEF V3i v3i_sum(V3i a, V3i b)
  1536. {
  1537. a.x += b.x;
  1538. a.y += b.y;
  1539. a.z += b.z;
  1540. return a;
  1541. }
  1542. LADEF V3i v3i_sub(V3i a, V3i b)
  1543. {
  1544. a.x -= b.x;
  1545. a.y -= b.y;
  1546. a.z -= b.z;
  1547. return a;
  1548. }
  1549. LADEF V3i v3i_mul(V3i a, V3i b)
  1550. {
  1551. a.x *= b.x;
  1552. a.y *= b.y;
  1553. a.z *= b.z;
  1554. return a;
  1555. }
  1556. LADEF V3i v3i_div(V3i a, V3i b)
  1557. {
  1558. a.x /= b.x;
  1559. a.y /= b.y;
  1560. a.z /= b.z;
  1561. return a;
  1562. }
  1563. LADEF V3i v3i_min(V3i a, V3i b)
  1564. {
  1565. a.x = mini(a.x, b.x);
  1566. a.y = mini(a.y, b.y);
  1567. a.z = mini(a.z, b.z);
  1568. return a;
  1569. }
  1570. LADEF V3i v3i_max(V3i a, V3i b)
  1571. {
  1572. a.x = maxi(a.x, b.x);
  1573. a.y = maxi(a.y, b.y);
  1574. a.z = maxi(a.z, b.z);
  1575. return a;
  1576. }
  1577. LADEF V3i v3i_clamp(V3i x, V3i a, V3i b)
  1578. {
  1579. x.x = clampi(x.x, a.x, b.x);
  1580. x.y = clampi(x.y, a.y, b.y);
  1581. x.z = clampi(x.z, a.z, b.z);
  1582. return x;
  1583. }
  1584. LADEF int v3i_sqrlen(V3i a)
  1585. {
  1586. return a.x*a.x + a.y*a.y + a.z*a.z;
  1587. }
  1588. LADEF V3u v3u(unsigned int x, unsigned int y, unsigned int z)
  1589. {
  1590. V3u v;
  1591. v.x = x;
  1592. v.y = y;
  1593. v.z = z;
  1594. return v;
  1595. }
  1596. LADEF V3u v3uu(unsigned int x)
  1597. {
  1598. return v3u(x, x, x);
  1599. }
  1600. LADEF V3u v3u2f(V2f a)
  1601. {
  1602. V3u result;
  1603. result.x = (unsigned int) a.x;
  1604. result.y = (unsigned int) a.y;
  1605. result.z = 0u;
  1606. return result;
  1607. }
  1608. LADEF V3u v3u2d(V2d a)
  1609. {
  1610. V3u result;
  1611. result.x = (unsigned int) a.x;
  1612. result.y = (unsigned int) a.y;
  1613. result.z = 0u;
  1614. return result;
  1615. }
  1616. LADEF V3u v3u2i(V2i a)
  1617. {
  1618. V3u result;
  1619. result.x = (unsigned int) a.x;
  1620. result.y = (unsigned int) a.y;
  1621. result.z = 0u;
  1622. return result;
  1623. }
  1624. LADEF V3u v3u2u(V2u a)
  1625. {
  1626. V3u result;
  1627. result.x = (unsigned int) a.x;
  1628. result.y = (unsigned int) a.y;
  1629. result.z = 0u;
  1630. return result;
  1631. }
  1632. LADEF V3u v3u3f(V3f a)
  1633. {
  1634. V3u result;
  1635. result.x = (unsigned int) a.x;
  1636. result.y = (unsigned int) a.y;
  1637. result.z = (unsigned int) a.z;
  1638. return result;
  1639. }
  1640. LADEF V3u v3u3d(V3d a)
  1641. {
  1642. V3u result;
  1643. result.x = (unsigned int) a.x;
  1644. result.y = (unsigned int) a.y;
  1645. result.z = (unsigned int) a.z;
  1646. return result;
  1647. }
  1648. LADEF V3u v3u3i(V3i a)
  1649. {
  1650. V3u result;
  1651. result.x = (unsigned int) a.x;
  1652. result.y = (unsigned int) a.y;
  1653. result.z = (unsigned int) a.z;
  1654. return result;
  1655. }
  1656. LADEF V3u v3u4f(V4f a)
  1657. {
  1658. V3u result;
  1659. result.x = (unsigned int) a.x;
  1660. result.y = (unsigned int) a.y;
  1661. result.z = (unsigned int) a.z;
  1662. return result;
  1663. }
  1664. LADEF V3u v3u4d(V4d a)
  1665. {
  1666. V3u result;
  1667. result.x = (unsigned int) a.x;
  1668. result.y = (unsigned int) a.y;
  1669. result.z = (unsigned int) a.z;
  1670. return result;
  1671. }
  1672. LADEF V3u v3u4i(V4i a)
  1673. {
  1674. V3u result;
  1675. result.x = (unsigned int) a.x;
  1676. result.y = (unsigned int) a.y;
  1677. result.z = (unsigned int) a.z;
  1678. return result;
  1679. }
  1680. LADEF V3u v3u4u(V4u a)
  1681. {
  1682. V3u result;
  1683. result.x = (unsigned int) a.x;
  1684. result.y = (unsigned int) a.y;
  1685. result.z = (unsigned int) a.z;
  1686. return result;
  1687. }
  1688. LADEF V3u v3u_sum(V3u a, V3u b)
  1689. {
  1690. a.x += b.x;
  1691. a.y += b.y;
  1692. a.z += b.z;
  1693. return a;
  1694. }
  1695. LADEF V3u v3u_sub(V3u a, V3u b)
  1696. {
  1697. a.x -= b.x;
  1698. a.y -= b.y;
  1699. a.z -= b.z;
  1700. return a;
  1701. }
  1702. LADEF V3u v3u_mul(V3u a, V3u b)
  1703. {
  1704. a.x *= b.x;
  1705. a.y *= b.y;
  1706. a.z *= b.z;
  1707. return a;
  1708. }
  1709. LADEF V3u v3u_div(V3u a, V3u b)
  1710. {
  1711. a.x /= b.x;
  1712. a.y /= b.y;
  1713. a.z /= b.z;
  1714. return a;
  1715. }
  1716. LADEF V3u v3u_min(V3u a, V3u b)
  1717. {
  1718. a.x = minu(a.x, b.x);
  1719. a.y = minu(a.y, b.y);
  1720. a.z = minu(a.z, b.z);
  1721. return a;
  1722. }
  1723. LADEF V3u v3u_max(V3u a, V3u b)
  1724. {
  1725. a.x = maxu(a.x, b.x);
  1726. a.y = maxu(a.y, b.y);
  1727. a.z = maxu(a.z, b.z);
  1728. return a;
  1729. }
  1730. LADEF V3u v3u_clamp(V3u x, V3u a, V3u b)
  1731. {
  1732. x.x = clampu(x.x, a.x, b.x);
  1733. x.y = clampu(x.y, a.y, b.y);
  1734. x.z = clampu(x.z, a.z, b.z);
  1735. return x;
  1736. }
  1737. LADEF unsigned int v3u_sqrlen(V3u a)
  1738. {
  1739. return a.x*a.x + a.y*a.y + a.z*a.z;
  1740. }
  1741. LADEF V4f v4f(float x, float y, float z, float w)
  1742. {
  1743. V4f v;
  1744. v.x = x;
  1745. v.y = y;
  1746. v.z = z;
  1747. v.w = w;
  1748. return v;
  1749. }
  1750. LADEF V4f v4ff(float x)
  1751. {
  1752. return v4f(x, x, x, x);
  1753. }
  1754. LADEF V4f v4f2f(V2f a)
  1755. {
  1756. V4f result;
  1757. result.x = (float) a.x;
  1758. result.y = (float) a.y;
  1759. result.z = 0.0f;
  1760. result.w = 0.0f;
  1761. return result;
  1762. }
  1763. LADEF V4f v4f2d(V2d a)
  1764. {
  1765. V4f result;
  1766. result.x = (float) a.x;
  1767. result.y = (float) a.y;
  1768. result.z = 0.0f;
  1769. result.w = 0.0f;
  1770. return result;
  1771. }
  1772. LADEF V4f v4f2i(V2i a)
  1773. {
  1774. V4f result;
  1775. result.x = (float) a.x;
  1776. result.y = (float) a.y;
  1777. result.z = 0.0f;
  1778. result.w = 0.0f;
  1779. return result;
  1780. }
  1781. LADEF V4f v4f2u(V2u a)
  1782. {
  1783. V4f result;
  1784. result.x = (float) a.x;
  1785. result.y = (float) a.y;
  1786. result.z = 0.0f;
  1787. result.w = 0.0f;
  1788. return result;
  1789. }
  1790. LADEF V4f v4f3f(V3f a)
  1791. {
  1792. V4f result;
  1793. result.x = (float) a.x;
  1794. result.y = (float) a.y;
  1795. result.z = (float) a.z;
  1796. result.w = 0.0f;
  1797. return result;
  1798. }
  1799. LADEF V4f v4f3d(V3d a)
  1800. {
  1801. V4f result;
  1802. result.x = (float) a.x;
  1803. result.y = (float) a.y;
  1804. result.z = (float) a.z;
  1805. result.w = 0.0f;
  1806. return result;
  1807. }
  1808. LADEF V4f v4f3i(V3i a)
  1809. {
  1810. V4f result;
  1811. result.x = (float) a.x;
  1812. result.y = (float) a.y;
  1813. result.z = (float) a.z;
  1814. result.w = 0.0f;
  1815. return result;
  1816. }
  1817. LADEF V4f v4f3u(V3u a)
  1818. {
  1819. V4f result;
  1820. result.x = (float) a.x;
  1821. result.y = (float) a.y;
  1822. result.z = (float) a.z;
  1823. result.w = 0.0f;
  1824. return result;
  1825. }
  1826. LADEF V4f v4f4d(V4d a)
  1827. {
  1828. V4f result;
  1829. result.x = (float) a.x;
  1830. result.y = (float) a.y;
  1831. result.z = (float) a.z;
  1832. result.w = (float) a.w;
  1833. return result;
  1834. }
  1835. LADEF V4f v4f4i(V4i a)
  1836. {
  1837. V4f result;
  1838. result.x = (float) a.x;
  1839. result.y = (float) a.y;
  1840. result.z = (float) a.z;
  1841. result.w = (float) a.w;
  1842. return result;
  1843. }
  1844. LADEF V4f v4f4u(V4u a)
  1845. {
  1846. V4f result;
  1847. result.x = (float) a.x;
  1848. result.y = (float) a.y;
  1849. result.z = (float) a.z;
  1850. result.w = (float) a.w;
  1851. return result;
  1852. }
  1853. LADEF V4f v4f_sum(V4f a, V4f b)
  1854. {
  1855. a.x += b.x;
  1856. a.y += b.y;
  1857. a.z += b.z;
  1858. a.w += b.w;
  1859. return a;
  1860. }
  1861. LADEF V4f v4f_sub(V4f a, V4f b)
  1862. {
  1863. a.x -= b.x;
  1864. a.y -= b.y;
  1865. a.z -= b.z;
  1866. a.w -= b.w;
  1867. return a;
  1868. }
  1869. LADEF V4f v4f_mul(V4f a, V4f b)
  1870. {
  1871. a.x *= b.x;
  1872. a.y *= b.y;
  1873. a.z *= b.z;
  1874. a.w *= b.w;
  1875. return a;
  1876. }
  1877. LADEF V4f v4f_div(V4f a, V4f b)
  1878. {
  1879. a.x /= b.x;
  1880. a.y /= b.y;
  1881. a.z /= b.z;
  1882. a.w /= b.w;
  1883. return a;
  1884. }
  1885. LADEF V4f v4f_sqrt(V4f a)
  1886. {
  1887. a.x = sqrtf(a.x);
  1888. a.y = sqrtf(a.y);
  1889. a.z = sqrtf(a.z);
  1890. a.w = sqrtf(a.w);
  1891. return a;
  1892. }
  1893. LADEF V4f v4f_pow(V4f base, V4f exp)
  1894. {
  1895. base.x = powf(base.x, exp.x);
  1896. base.y = powf(base.y, exp.y);
  1897. base.z = powf(base.z, exp.z);
  1898. base.w = powf(base.w, exp.w);
  1899. return base;
  1900. }
  1901. LADEF V4f v4f_sin(V4f a)
  1902. {
  1903. a.x = sinf(a.x);
  1904. a.y = sinf(a.y);
  1905. a.z = sinf(a.z);
  1906. a.w = sinf(a.w);
  1907. return a;
  1908. }
  1909. LADEF V4f v4f_cos(V4f a)
  1910. {
  1911. a.x = cosf(a.x);
  1912. a.y = cosf(a.y);
  1913. a.z = cosf(a.z);
  1914. a.w = cosf(a.w);
  1915. return a;
  1916. }
  1917. LADEF V4f v4f_min(V4f a, V4f b)
  1918. {
  1919. a.x = fminf(a.x, b.x);
  1920. a.y = fminf(a.y, b.y);
  1921. a.z = fminf(a.z, b.z);
  1922. a.w = fminf(a.w, b.w);
  1923. return a;
  1924. }
  1925. LADEF V4f v4f_max(V4f a, V4f b)
  1926. {
  1927. a.x = fmaxf(a.x, b.x);
  1928. a.y = fmaxf(a.y, b.y);
  1929. a.z = fmaxf(a.z, b.z);
  1930. a.w = fmaxf(a.w, b.w);
  1931. return a;
  1932. }
  1933. LADEF V4f v4f_lerp(V4f a, V4f b, V4f t)
  1934. {
  1935. a.x = lerpf(a.x, b.x, t.x);
  1936. a.y = lerpf(a.y, b.y, t.y);
  1937. a.z = lerpf(a.z, b.z, t.z);
  1938. a.w = lerpf(a.w, b.w, t.w);
  1939. return a;
  1940. }
  1941. LADEF V4f v4f_floor(V4f a)
  1942. {
  1943. a.x = floorf(a.x);
  1944. a.y = floorf(a.y);
  1945. a.z = floorf(a.z);
  1946. a.w = floorf(a.w);
  1947. return a;
  1948. }
  1949. LADEF V4f v4f_ceil(V4f a)
  1950. {
  1951. a.x = ceilf(a.x);
  1952. a.y = ceilf(a.y);
  1953. a.z = ceilf(a.z);
  1954. a.w = ceilf(a.w);
  1955. return a;
  1956. }
  1957. LADEF V4f v4f_clamp(V4f x, V4f a, V4f b)
  1958. {
  1959. x.x = clampf(x.x, a.x, b.x);
  1960. x.y = clampf(x.y, a.y, b.y);
  1961. x.z = clampf(x.z, a.z, b.z);
  1962. x.w = clampf(x.w, a.w, b.w);
  1963. return x;
  1964. }
  1965. LADEF float v4f_sqrlen(V4f a)
  1966. {
  1967. return a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w;
  1968. }
  1969. LADEF float v4f_len(V4f a)
  1970. {
  1971. return sqrtf(v4f_sqrlen(a));
  1972. }
  1973. LADEF V4d v4d(double x, double y, double z, double w)
  1974. {
  1975. V4d v;
  1976. v.x = x;
  1977. v.y = y;
  1978. v.z = z;
  1979. v.w = w;
  1980. return v;
  1981. }
  1982. LADEF V4d v4dd(double x)
  1983. {
  1984. return v4d(x, x, x, x);
  1985. }
  1986. LADEF V4d v4d2f(V2f a)
  1987. {
  1988. V4d result;
  1989. result.x = (double) a.x;
  1990. result.y = (double) a.y;
  1991. result.z = 0.0;
  1992. result.w = 0.0;
  1993. return result;
  1994. }
  1995. LADEF V4d v4d2d(V2d a)
  1996. {
  1997. V4d result;
  1998. result.x = (double) a.x;
  1999. result.y = (double) a.y;
  2000. result.z = 0.0;
  2001. result.w = 0.0;
  2002. return result;
  2003. }
  2004. LADEF V4d v4d2i(V2i a)
  2005. {
  2006. V4d result;
  2007. result.x = (double) a.x;
  2008. result.y = (double) a.y;
  2009. result.z = 0.0;
  2010. result.w = 0.0;
  2011. return result;
  2012. }
  2013. LADEF V4d v4d2u(V2u a)
  2014. {
  2015. V4d result;
  2016. result.x = (double) a.x;
  2017. result.y = (double) a.y;
  2018. result.z = 0.0;
  2019. result.w = 0.0;
  2020. return result;
  2021. }
  2022. LADEF V4d v4d3f(V3f a)
  2023. {
  2024. V4d result;
  2025. result.x = (double) a.x;
  2026. result.y = (double) a.y;
  2027. result.z = (double) a.z;
  2028. result.w = 0.0;
  2029. return result;
  2030. }
  2031. LADEF V4d v4d3d(V3d a)
  2032. {
  2033. V4d result;
  2034. result.x = (double) a.x;
  2035. result.y = (double) a.y;
  2036. result.z = (double) a.z;
  2037. result.w = 0.0;
  2038. return result;
  2039. }
  2040. LADEF V4d v4d3i(V3i a)
  2041. {
  2042. V4d result;
  2043. result.x = (double) a.x;
  2044. result.y = (double) a.y;
  2045. result.z = (double) a.z;
  2046. result.w = 0.0;
  2047. return result;
  2048. }
  2049. LADEF V4d v4d3u(V3u a)
  2050. {
  2051. V4d result;
  2052. result.x = (double) a.x;
  2053. result.y = (double) a.y;
  2054. result.z = (double) a.z;
  2055. result.w = 0.0;
  2056. return result;
  2057. }
  2058. LADEF V4d v4d4f(V4f a)
  2059. {
  2060. V4d result;
  2061. result.x = (double) a.x;
  2062. result.y = (double) a.y;
  2063. result.z = (double) a.z;
  2064. result.w = (double) a.w;
  2065. return result;
  2066. }
  2067. LADEF V4d v4d4i(V4i a)
  2068. {
  2069. V4d result;
  2070. result.x = (double) a.x;
  2071. result.y = (double) a.y;
  2072. result.z = (double) a.z;
  2073. result.w = (double) a.w;
  2074. return result;
  2075. }
  2076. LADEF V4d v4d4u(V4u a)
  2077. {
  2078. V4d result;
  2079. result.x = (double) a.x;
  2080. result.y = (double) a.y;
  2081. result.z = (double) a.z;
  2082. result.w = (double) a.w;
  2083. return result;
  2084. }
  2085. LADEF V4d v4d_sum(V4d a, V4d b)
  2086. {
  2087. a.x += b.x;
  2088. a.y += b.y;
  2089. a.z += b.z;
  2090. a.w += b.w;
  2091. return a;
  2092. }
  2093. LADEF V4d v4d_sub(V4d a, V4d b)
  2094. {
  2095. a.x -= b.x;
  2096. a.y -= b.y;
  2097. a.z -= b.z;
  2098. a.w -= b.w;
  2099. return a;
  2100. }
  2101. LADEF V4d v4d_mul(V4d a, V4d b)
  2102. {
  2103. a.x *= b.x;
  2104. a.y *= b.y;
  2105. a.z *= b.z;
  2106. a.w *= b.w;
  2107. return a;
  2108. }
  2109. LADEF V4d v4d_div(V4d a, V4d b)
  2110. {
  2111. a.x /= b.x;
  2112. a.y /= b.y;
  2113. a.z /= b.z;
  2114. a.w /= b.w;
  2115. return a;
  2116. }
  2117. LADEF V4d v4d_sqrt(V4d a)
  2118. {
  2119. a.x = sqrt(a.x);
  2120. a.y = sqrt(a.y);
  2121. a.z = sqrt(a.z);
  2122. a.w = sqrt(a.w);
  2123. return a;
  2124. }
  2125. LADEF V4d v4d_pow(V4d base, V4d exp)
  2126. {
  2127. base.x = pow(base.x, exp.x);
  2128. base.y = pow(base.y, exp.y);
  2129. base.z = pow(base.z, exp.z);
  2130. base.w = pow(base.w, exp.w);
  2131. return base;
  2132. }
  2133. LADEF V4d v4d_sin(V4d a)
  2134. {
  2135. a.x = sin(a.x);
  2136. a.y = sin(a.y);
  2137. a.z = sin(a.z);
  2138. a.w = sin(a.w);
  2139. return a;
  2140. }
  2141. LADEF V4d v4d_cos(V4d a)
  2142. {
  2143. a.x = cos(a.x);
  2144. a.y = cos(a.y);
  2145. a.z = cos(a.z);
  2146. a.w = cos(a.w);
  2147. return a;
  2148. }
  2149. LADEF V4d v4d_min(V4d a, V4d b)
  2150. {
  2151. a.x = fmin(a.x, b.x);
  2152. a.y = fmin(a.y, b.y);
  2153. a.z = fmin(a.z, b.z);
  2154. a.w = fmin(a.w, b.w);
  2155. return a;
  2156. }
  2157. LADEF V4d v4d_max(V4d a, V4d b)
  2158. {
  2159. a.x = fmax(a.x, b.x);
  2160. a.y = fmax(a.y, b.y);
  2161. a.z = fmax(a.z, b.z);
  2162. a.w = fmax(a.w, b.w);
  2163. return a;
  2164. }
  2165. LADEF V4d v4d_lerp(V4d a, V4d b, V4d t)
  2166. {
  2167. a.x = lerp(a.x, b.x, t.x);
  2168. a.y = lerp(a.y, b.y, t.y);
  2169. a.z = lerp(a.z, b.z, t.z);
  2170. a.w = lerp(a.w, b.w, t.w);
  2171. return a;
  2172. }
  2173. LADEF V4d v4d_floor(V4d a)
  2174. {
  2175. a.x = floor(a.x);
  2176. a.y = floor(a.y);
  2177. a.z = floor(a.z);
  2178. a.w = floor(a.w);
  2179. return a;
  2180. }
  2181. LADEF V4d v4d_ceil(V4d a)
  2182. {
  2183. a.x = ceil(a.x);
  2184. a.y = ceil(a.y);
  2185. a.z = ceil(a.z);
  2186. a.w = ceil(a.w);
  2187. return a;
  2188. }
  2189. LADEF V4d v4d_clamp(V4d x, V4d a, V4d b)
  2190. {
  2191. x.x = clampd(x.x, a.x, b.x);
  2192. x.y = clampd(x.y, a.y, b.y);
  2193. x.z = clampd(x.z, a.z, b.z);
  2194. x.w = clampd(x.w, a.w, b.w);
  2195. return x;
  2196. }
  2197. LADEF double v4d_sqrlen(V4d a)
  2198. {
  2199. return a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w;
  2200. }
  2201. LADEF double v4d_len(V4d a)
  2202. {
  2203. return sqrt(v4d_sqrlen(a));
  2204. }
  2205. LADEF V4i v4i(int x, int y, int z, int w)
  2206. {
  2207. V4i v;
  2208. v.x = x;
  2209. v.y = y;
  2210. v.z = z;
  2211. v.w = w;
  2212. return v;
  2213. }
  2214. LADEF V4i v4ii(int x)
  2215. {
  2216. return v4i(x, x, x, x);
  2217. }
  2218. LADEF V4i v4i2f(V2f a)
  2219. {
  2220. V4i result;
  2221. result.x = (int) a.x;
  2222. result.y = (int) a.y;
  2223. result.z = 0;
  2224. result.w = 0;
  2225. return result;
  2226. }
  2227. LADEF V4i v4i2d(V2d a)
  2228. {
  2229. V4i result;
  2230. result.x = (int) a.x;
  2231. result.y = (int) a.y;
  2232. result.z = 0;
  2233. result.w = 0;
  2234. return result;
  2235. }
  2236. LADEF V4i v4i2i(V2i a)
  2237. {
  2238. V4i result;
  2239. result.x = (int) a.x;
  2240. result.y = (int) a.y;
  2241. result.z = 0;
  2242. result.w = 0;
  2243. return result;
  2244. }
  2245. LADEF V4i v4i2u(V2u a)
  2246. {
  2247. V4i result;
  2248. result.x = (int) a.x;
  2249. result.y = (int) a.y;
  2250. result.z = 0;
  2251. result.w = 0;
  2252. return result;
  2253. }
  2254. LADEF V4i v4i3f(V3f a)
  2255. {
  2256. V4i result;
  2257. result.x = (int) a.x;
  2258. result.y = (int) a.y;
  2259. result.z = (int) a.z;
  2260. result.w = 0;
  2261. return result;
  2262. }
  2263. LADEF V4i v4i3d(V3d a)
  2264. {
  2265. V4i result;
  2266. result.x = (int) a.x;
  2267. result.y = (int) a.y;
  2268. result.z = (int) a.z;
  2269. result.w = 0;
  2270. return result;
  2271. }
  2272. LADEF V4i v4i3i(V3i a)
  2273. {
  2274. V4i result;
  2275. result.x = (int) a.x;
  2276. result.y = (int) a.y;
  2277. result.z = (int) a.z;
  2278. result.w = 0;
  2279. return result;
  2280. }
  2281. LADEF V4i v4i3u(V3u a)
  2282. {
  2283. V4i result;
  2284. result.x = (int) a.x;
  2285. result.y = (int) a.y;
  2286. result.z = (int) a.z;
  2287. result.w = 0;
  2288. return result;
  2289. }
  2290. LADEF V4i v4i4f(V4f a)
  2291. {
  2292. V4i result;
  2293. result.x = (int) a.x;
  2294. result.y = (int) a.y;
  2295. result.z = (int) a.z;
  2296. result.w = (int) a.w;
  2297. return result;
  2298. }
  2299. LADEF V4i v4i4d(V4d a)
  2300. {
  2301. V4i result;
  2302. result.x = (int) a.x;
  2303. result.y = (int) a.y;
  2304. result.z = (int) a.z;
  2305. result.w = (int) a.w;
  2306. return result;
  2307. }
  2308. LADEF V4i v4i4u(V4u a)
  2309. {
  2310. V4i result;
  2311. result.x = (int) a.x;
  2312. result.y = (int) a.y;
  2313. result.z = (int) a.z;
  2314. result.w = (int) a.w;
  2315. return result;
  2316. }
  2317. LADEF V4i v4i_sum(V4i a, V4i b)
  2318. {
  2319. a.x += b.x;
  2320. a.y += b.y;
  2321. a.z += b.z;
  2322. a.w += b.w;
  2323. return a;
  2324. }
  2325. LADEF V4i v4i_sub(V4i a, V4i b)
  2326. {
  2327. a.x -= b.x;
  2328. a.y -= b.y;
  2329. a.z -= b.z;
  2330. a.w -= b.w;
  2331. return a;
  2332. }
  2333. LADEF V4i v4i_mul(V4i a, V4i b)
  2334. {
  2335. a.x *= b.x;
  2336. a.y *= b.y;
  2337. a.z *= b.z;
  2338. a.w *= b.w;
  2339. return a;
  2340. }
  2341. LADEF V4i v4i_div(V4i a, V4i b)
  2342. {
  2343. a.x /= b.x;
  2344. a.y /= b.y;
  2345. a.z /= b.z;
  2346. a.w /= b.w;
  2347. return a;
  2348. }
  2349. LADEF V4i v4i_min(V4i a, V4i b)
  2350. {
  2351. a.x = mini(a.x, b.x);
  2352. a.y = mini(a.y, b.y);
  2353. a.z = mini(a.z, b.z);
  2354. a.w = mini(a.w, b.w);
  2355. return a;
  2356. }
  2357. LADEF V4i v4i_max(V4i a, V4i b)
  2358. {
  2359. a.x = maxi(a.x, b.x);
  2360. a.y = maxi(a.y, b.y);
  2361. a.z = maxi(a.z, b.z);
  2362. a.w = maxi(a.w, b.w);
  2363. return a;
  2364. }
  2365. LADEF V4i v4i_clamp(V4i x, V4i a, V4i b)
  2366. {
  2367. x.x = clampi(x.x, a.x, b.x);
  2368. x.y = clampi(x.y, a.y, b.y);
  2369. x.z = clampi(x.z, a.z, b.z);
  2370. x.w = clampi(x.w, a.w, b.w);
  2371. return x;
  2372. }
  2373. LADEF int v4i_sqrlen(V4i a)
  2374. {
  2375. return a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w;
  2376. }
  2377. LADEF V4u v4u(unsigned int x, unsigned int y, unsigned int z, unsigned int w)
  2378. {
  2379. V4u v;
  2380. v.x = x;
  2381. v.y = y;
  2382. v.z = z;
  2383. v.w = w;
  2384. return v;
  2385. }
  2386. LADEF V4u v4uu(unsigned int x)
  2387. {
  2388. return v4u(x, x, x, x);
  2389. }
  2390. LADEF V4u v4u2f(V2f a)
  2391. {
  2392. V4u result;
  2393. result.x = (unsigned int) a.x;
  2394. result.y = (unsigned int) a.y;
  2395. result.z = 0u;
  2396. result.w = 0u;
  2397. return result;
  2398. }
  2399. LADEF V4u v4u2d(V2d a)
  2400. {
  2401. V4u result;
  2402. result.x = (unsigned int) a.x;
  2403. result.y = (unsigned int) a.y;
  2404. result.z = 0u;
  2405. result.w = 0u;
  2406. return result;
  2407. }
  2408. LADEF V4u v4u2i(V2i a)
  2409. {
  2410. V4u result;
  2411. result.x = (unsigned int) a.x;
  2412. result.y = (unsigned int) a.y;
  2413. result.z = 0u;
  2414. result.w = 0u;
  2415. return result;
  2416. }
  2417. LADEF V4u v4u2u(V2u a)
  2418. {
  2419. V4u result;
  2420. result.x = (unsigned int) a.x;
  2421. result.y = (unsigned int) a.y;
  2422. result.z = 0u;
  2423. result.w = 0u;
  2424. return result;
  2425. }
  2426. LADEF V4u v4u3f(V3f a)
  2427. {
  2428. V4u result;
  2429. result.x = (unsigned int) a.x;
  2430. result.y = (unsigned int) a.y;
  2431. result.z = (unsigned int) a.z;
  2432. result.w = 0u;
  2433. return result;
  2434. }
  2435. LADEF V4u v4u3d(V3d a)
  2436. {
  2437. V4u result;
  2438. result.x = (unsigned int) a.x;
  2439. result.y = (unsigned int) a.y;
  2440. result.z = (unsigned int) a.z;
  2441. result.w = 0u;
  2442. return result;
  2443. }
  2444. LADEF V4u v4u3i(V3i a)
  2445. {
  2446. V4u result;
  2447. result.x = (unsigned int) a.x;
  2448. result.y = (unsigned int) a.y;
  2449. result.z = (unsigned int) a.z;
  2450. result.w = 0u;
  2451. return result;
  2452. }
  2453. LADEF V4u v4u3u(V3u a)
  2454. {
  2455. V4u result;
  2456. result.x = (unsigned int) a.x;
  2457. result.y = (unsigned int) a.y;
  2458. result.z = (unsigned int) a.z;
  2459. result.w = 0u;
  2460. return result;
  2461. }
  2462. LADEF V4u v4u4f(V4f a)
  2463. {
  2464. V4u result;
  2465. result.x = (unsigned int) a.x;
  2466. result.y = (unsigned int) a.y;
  2467. result.z = (unsigned int) a.z;
  2468. result.w = (unsigned int) a.w;
  2469. return result;
  2470. }
  2471. LADEF V4u v4u4d(V4d a)
  2472. {
  2473. V4u result;
  2474. result.x = (unsigned int) a.x;
  2475. result.y = (unsigned int) a.y;
  2476. result.z = (unsigned int) a.z;
  2477. result.w = (unsigned int) a.w;
  2478. return result;
  2479. }
  2480. LADEF V4u v4u4i(V4i a)
  2481. {
  2482. V4u result;
  2483. result.x = (unsigned int) a.x;
  2484. result.y = (unsigned int) a.y;
  2485. result.z = (unsigned int) a.z;
  2486. result.w = (unsigned int) a.w;
  2487. return result;
  2488. }
  2489. LADEF V4u v4u_sum(V4u a, V4u b)
  2490. {
  2491. a.x += b.x;
  2492. a.y += b.y;
  2493. a.z += b.z;
  2494. a.w += b.w;
  2495. return a;
  2496. }
  2497. LADEF V4u v4u_sub(V4u a, V4u b)
  2498. {
  2499. a.x -= b.x;
  2500. a.y -= b.y;
  2501. a.z -= b.z;
  2502. a.w -= b.w;
  2503. return a;
  2504. }
  2505. LADEF V4u v4u_mul(V4u a, V4u b)
  2506. {
  2507. a.x *= b.x;
  2508. a.y *= b.y;
  2509. a.z *= b.z;
  2510. a.w *= b.w;
  2511. return a;
  2512. }
  2513. LADEF V4u v4u_div(V4u a, V4u b)
  2514. {
  2515. a.x /= b.x;
  2516. a.y /= b.y;
  2517. a.z /= b.z;
  2518. a.w /= b.w;
  2519. return a;
  2520. }
  2521. LADEF V4u v4u_min(V4u a, V4u b)
  2522. {
  2523. a.x = minu(a.x, b.x);
  2524. a.y = minu(a.y, b.y);
  2525. a.z = minu(a.z, b.z);
  2526. a.w = minu(a.w, b.w);
  2527. return a;
  2528. }
  2529. LADEF V4u v4u_max(V4u a, V4u b)
  2530. {
  2531. a.x = maxu(a.x, b.x);
  2532. a.y = maxu(a.y, b.y);
  2533. a.z = maxu(a.z, b.z);
  2534. a.w = maxu(a.w, b.w);
  2535. return a;
  2536. }
  2537. LADEF V4u v4u_clamp(V4u x, V4u a, V4u b)
  2538. {
  2539. x.x = clampu(x.x, a.x, b.x);
  2540. x.y = clampu(x.y, a.y, b.y);
  2541. x.z = clampu(x.z, a.z, b.z);
  2542. x.w = clampu(x.w, a.w, b.w);
  2543. return x;
  2544. }
  2545. LADEF unsigned int v4u_sqrlen(V4u a)
  2546. {
  2547. return a.x*a.x + a.y*a.y + a.z*a.z + a.w*a.w;
  2548. }
  2549. #endif // LA_IMPLEMENTATION