la.h 51 KB

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