From 4efd7c5651cae21e9b6871d6265b082e199224be Mon Sep 17 00:00:00 2001 From: Nic Barker Date: Wed, 28 Aug 2024 16:15:19 +1200 Subject: [PATCH] Draft odin bindings --- bindings/odin/.gitignore | 3 + bindings/odin/README.md | 0 bindings/odin/clay-odin/clay.a | Bin 0 -> 55568 bytes bindings/odin/clay-odin/clay.odin | 246 ++++++++++++++++++++++++++++++ bindings/odin/main.odin | 28 ++++ bindings/odin/ols.json | 6 + 6 files changed, 283 insertions(+) create mode 100644 bindings/odin/.gitignore create mode 100644 bindings/odin/README.md create mode 100644 bindings/odin/clay-odin/clay.a create mode 100644 bindings/odin/clay-odin/clay.odin create mode 100644 bindings/odin/main.odin create mode 100644 bindings/odin/ols.json diff --git a/bindings/odin/.gitignore b/bindings/odin/.gitignore new file mode 100644 index 0000000..0410287 --- /dev/null +++ b/bindings/odin/.gitignore @@ -0,0 +1,3 @@ +odin +odin.dSYM +.vscode diff --git a/bindings/odin/README.md b/bindings/odin/README.md new file mode 100644 index 0000000..e69de29 diff --git a/bindings/odin/clay-odin/clay.a b/bindings/odin/clay-odin/clay.a new file mode 100644 index 0000000000000000000000000000000000000000..1bf6422f3d6bf0e84b480e93c3f4ce4e249e425e GIT binary patch literal 55568 zcmeIbe|VHtmM;2Lia^2-0RaI)QV2Go6$QaI9QlSSDgn|4f=Lu?Xe%)(Nt%$vB(%`b zV=$f;g&E<@Th=teg@T&|zbklL@SNZ!!7(14f2rVR!A`+f1b-!XS#VO0&bLx!Uln{$a6s@zw3+Q)Be+ShUGRCqEnWMg@NSiQsjUG@m7c<$__sCj?&> zd_(Xf!6CsJlQo~O36=@g3O*rtMDUd0dBNWb=3cM)%oe;=um~6mmIWRR;ah%xRR|_3 zaDQ2qM21$CmzSl-RTP(0go5Sks{*C#@l;Y)vaV!(6=PPHu1O^i-d|Z&zHS7f)n(;@ zs?zmqMj$I)7g$p=63zPJl1-sNMFkoqtqDC4D7(MJv`JcOYMs*Jl+?9>%C(_&feoS3 zs*-hvUlvYP6(uF1_2tDSS3_4(UY;iHbtQqy`zuO9RVAAs%|LK%NycI;N`h5^^=ryT zl0-!bM8S?)w=S^0IJHuh!HV*-GFLaI2qG=r2rP3qS8fOdOM+_y6-GFfRTb>e6t1di zSvfV<>aL!)v9YY>bPrxTf8-ymWib*6^^! zWu?eeR%ug1dqYiQ!*{|WGTpq)os}Ui6HiShbxiH>Oo>;?1agr|u4`!0{al%-_=e_& zruJ}a`M1NZLRAs2ZLewC+Bm$phNa3>vx;z&Qt$2CYntj(o0lo^Dw!mjm(u&g_V!iK zW-7lj+`cYc)3&2ETovBgzIsPfZF@s=lL!upBFzoWZP1TILVGKeJ+;l1?$}I)v4~+C zk&Pe|v-?}>F!WQJ-6l1sWm#L(R==*MrL;Y~JszvAP9}CRE3`*K>TSl`fC2P4c7)2K&=$s25J zZVSgbi}aEbGsPKG6VI5GBSmN_42m1t(2)=CfN(LY0^6ILwx%`+Dw;vMjM6$_N@EQB zRM}=__f1N|-juY|L*T77jY$?89bpX8hHz^es)VT{nIg%8xT=$?mZ1>{Gj_@Fc@jf( z1m+k)ro~AdWmpYg)nuZPtC>Wft%^xR6__Ny9j<(=rsd(9gqA1Ow5l~6Uf*1YIW~F1 zPHuP#)yQ>C&XBFLq^f9cZXdaD7uD4jp2(23@Let8s^%m^UWF*rpDweRAu0%a5T@x# ztGX*+DpAIoXQy{nJUfv~15=5N?-eR<2{*0E=&YHRks@wOQtX9Fb9+zjOc`h;iZ)?G z4Xk8*gpg61;mW{3IX1)9CUq)zS4i8w3|w7vkD*s%rL?WIsjZ5Ratr|H4Sv>DZ5#B46D7?C#f_@~*Ai?=P%hzTIDvmrjUvd?NN z!foO9@<$%Q|3)YeD-9CKB0s$Rc%E9fex#&5lF4_D=WIyxb2BE1SxclfwJ*Ihlx{fS z8@l2%N;rwcCC#LG*RVpo^l)Nb5^7Wnp_G>DNF$*XCn00vsvVC!l2ETCl8W$-wwi|< z!^4my8QCSKpOUy33mX?)Qfii1nQSvMY%?>lNW~CsPk5Or+0#=>Q}Q;``ZPAQh~z5a zY{gwNrj;pSr;O>egrsaOiB&>rUA&nRo8s+;S~D&n;<+#$5(|NNY+L%$EhWt;Lh?{) zPj!;xxm+o!>fSE1^aBm>)5FHFKUUM)1V0@N$^w;DA?}G_{~7z?OYYPg-0FX`A6~RH z^M3fU<##Rrnxd>8TMPBLy%|jKdHY}g@!zrihn;EtAGUg}P1t9)eE8xs6W@y}RRz=j z%li`@wUc@98Q7;0Tdo$r*aB9cP>2ne03f9HSrTFMG-Ho`B0sWh*>73z^I??Lp;Pq# zp-?Ry+@`G(naa=b@kred{;@l^=IxFNg|HB*NyLOg#eu3oBJAT~06wM(M;^B1p>A3pPY z5Z~wVWu9yO40T%X^pCLyKOAQbI$moq=JgNe<@&oX0T+7w-Fcq;Z4c*IRjA)oNgMnG zX$_$HtvCObujg8mzm;osJDq1%Si4TFFf=MZXcp#LkLKOCaDQx~#bbo2K`-<+;v-Z=x&zK6Q<{&CN*W7DlcK1aO; zU8jTib`}goy$=oK=lchVd6Q9hPyYVc6trWCfAF{X=6gDRb#MO9|9snb^Pm5^XWSo;MV=VSN8Bf@51%hh*L+TZ=fVj(E$Y!SFy&m*dG<$9htxcU`PLxD^3?iq z9Tl;0R(HI;ka7PQKVu1O~B zUnQGVx%64kk(?7(pfiz9$OW>Ac0wMI3H5cA=_|y=tbx19qtNQ8fX-ddZ}j&CML1fR zTJJ^wcwPO2anKLl{t$iS?w`DryyO@CeW(b7_WCQkSDhH@6Wtx5ULRUohceYAHu?`& z7iXf?-OsT-(cg`+(LFRB;}y>zp{+NgZT;SySEz@e8+4$X{m|`f?HZ2P-ccPDPk`Um z@?xDFH6~CujtSTcq6c<|JYd+rMp?5@7!SKN_z5u8_B=DH<5vs6JN9`CWB&;}GcW1K zf?o1<=fMs=jr!#+Jn=loEatn>N(6`%|>%8OY}o@7Pzi z!RGFV&CQ!OcE8Va#=57fsa>Gpo<<2>|nT*u#lkMTyw3hH=jA3yyE z>SOlrwb;jg*fR(H9OE29dj>T9+hO__arv}mzZA4C5L$YH~fsHQQIX>#GCI zOFg&*Tqt8XZ{5N#eH;g1vpEl3wcTd>rucV7YYTQ7pD|UJ<82*Am-BOBlWIdd3q95@ zqw`6AW677_*1gw#xi;&n=cwyka}=Jl&QYk}AH-ITxkg*{CC$xa$0XXFgXe7R&PV;e zXuIJ94$udT!2g3EIN-rpVL5(}wx^8aI64u0q07`qtpT9N?)fl=F#P}r zs^msL4}K{9PTDuqM~>J;wy_ZX1{?Tjq1ZsxrimThdAk}0;HSrZA>-RH-pJ;+pi{Dd zz2O{qwe23(uY*s1P4oMgHD*S;#tfdbjv3VNKV-~Eef|(*#)CET|0gmY=aMm=v&tCt z`wx+^)aROH?B!mG_rw*fKe>02bqtTvW0?CaCtwTR3PgXgTe30Yi|ZU(6@qfT6b%-OF-HZOL{eiHjn z_WW{2$$l5-RIlDc=}+nZO!ZXzQlbZtj2H}tfdb1vy%>nAhJIhT7AS~sok z_}6IWp`u39I)z`TR~g)h@j z`Tyfym+8+`8<%me#QqHD|1UaM4r`nLm#nA8eJZY5zlf|mt#`y`z%F9XALmd*V`Q!! z13NKA+u&Es*&b}?r7<1d`3;wfU?XUs$MNh6_JlU4J8xl1cxLI>nXcw;@Kg30{4Wg+ zO~=`o&U2MK;$=)oDPxf?Bc5*Sbk@hh{187g45F=QBlg~OeNn!uKjKtf7-s$5VbqJTFZ{)LJk}Ty_#`Lbli+7t2aQi~FZg{m|IHh5PB07S1lumngZ>v-&{OF7 zJe0Mop(_UeQt9t3$T`Pa#^-)KyL||bA<7l!3*9UO{kQE6@o81ONAEX$g+46#pbQm1 z0ngyi@i1IlVg>&0eI8x5DK~Ev>W6(0>RUh35r3Heao%{V8|VG;b1Sq((c$N92N&Wz z9rO9%Z_zf+t85FuIMag6LOn@7GHt^wtGBcu*s_ao@*$5X7{f0%CdIXiUtwRwU)rPRIxtC z5H@|nK8SSQh_b%Hdj`-2eb(GB?N;$~{oTjlA4O3Q@}e#{ot{Gu)-Glp$NqG$VI16P zAa4hE4x~JkQ!wyVlusT})Yb52J>P{sMLTspt3|G+j?^3K+%cq+C-pJUr)BG4kH8sY z4YGdmx?oLj@>0)L9_YGrhef-UrdzM{ZB{;8><+E-qF=bPupVdN-n8`>`;2lLc3jeD zh59(Y2{X)K4aTdl#NA6dJGmRi{Vz*=RAw)37zzByLj+&RuRt5?O}rQ=mx zvyO}1!#tsZ*h(N|5$m+Nqf0|Yu_-yrRi3&2<$3wmqkgmA&cweK<8qr{l>wi>m*eJ# z(pJVphkDhT8hI_GGfWvmr;tzA18aufJfCk)EWRGcy_rd`U+?oQm;-%R^vt8`bYF%# zN!#LW-ikUkOPwa9)Cuv>`9z(N&akQzY=aFQI=qc2pfx>g6Du?JObESI|Y@A<`G>;@%qkv%!zR&m(7XBjsb=OkTE$ zeg^M!%>AFte@ybT-KnztqIKdKBW3hO^Y>@WKkA*&nn zi(bwR-^6z|_Aj;!>=hmn?@jPIzB%Aol5A7d+|nm=0c@RXUZvl*?O~Y*k0H&idlBy} zbw}-lck{r)b+B8Ytuc3y5Eu1gzCw8?yjunep`Qv-m%@N&Imd(=ci>6gilY2}+IY~` zd#(RNjhT-yhoG;`eym5@VeXQVH|>ix>5t|(&tqJ^fH9Bu$9`sY^R7{Bo_D#^i7|wI z67~W2(cJZC84>Wfvb*BM=gs$FOpMZFB1oH@cT z40A-m0Ov{gzlYZ5`Uk&``FA1HCXC%rol)z-UH;{jPSabLaSAkJ;zw zS3M6Ygx`*NA#YbfWsc|OIrIrRH~pi`F{VG5$5~+YqJ3(9(L54)J;=*4NW(Tc3+O*; zo9mmV%guWSbJAq%QIGVU;SJpzM7@@;^;qhjAN$8MQ|DLp#WQ*10=42D&o>;uT<{yE z`5AiaCTX|AMBRsNH)x%Cu6C#7jkg;#s@?Nk^}b2R9YcFeKeC@ppDSAd9q4eaFQ7-9 zpC08{oRBIfNuy61*KItLAJ-si?`}Er<36c{{=k~5=UDKeo_IgF^gzW^7hJMEsrnXj zfsV2c{Zq9Lo`x^1>g;{!>h%71GPeotoThQ)! z6rx^Bu0l^i%eA}KQ`n=Fyz%}5jp{G8&JjJ8@iDBPQm^8Ain>7`-1?>TRQlb-56h2w zpQ@+m6V+~oSJ`gR!v9aSJ0)+t-JntJR_jAO2bghn46;tsQ}mnCQ|Q1o>nYZRaXrPe z(o?Jt)AjTw=;=2Tdg{^x6;C~doZYe|FC*Wv7#C)qFNDp-eY0(axmNd;-K#MV%9#?@ zOy-=`^4!(LCygb{0~|}5M=~Ab-0?%+ z(eUMOfGztsw5p=Ua_je=E%>>f@pql}@nV`Ek z0^M}b%>doIBhcLdy6K?%+Y#udf$j#-{f}YkVj<{9E$+8=zBxSIM$m00-7kixD+gUA z>3%*u-5Su{OS*Hz(_sw+e;jl_8=mfN&|zQ3>HP1*(_tU1e<|tydU(18pu--K(|LAy zx&qM6BVFI{bQstDvq<;T;pwoR>xYeSI^R%qW}NtVA0GRj9D7FpX|L4XWc*IcJwC4N z-iS5d1GtAXTCe%MT=R{=7{u?duqNSelKgVVU7i194H)VCzms^7#%u^xfeYFzf1ETireeo&nbdTdR_|7 ziLYlZ{2n3V{fiZ+gEy&r4-xOt6`VIBot#&3Ux#~eE3tMo`*6W6I8(r0|M#&Ej(F0> zR{Fc^=jl6J7UtYY->ja~ow6^{xfy$^%!9i%KG~;6Tm(J}Z4>96DEA|N|4XBz849_K6WJsV~tR6>3Tl{zAS_7 zj-t;`pr6_A9-J{+Gq7H+#k?)DazcZMN~LBH}@#lsKj->QARb>cr?ReA6iGq%I!M}DDp zz!%EMH^qmHx5MQ>a_z`?2kqgrY9H2!x{nfl)gMB8iy-sORs#--o70kWQX8((fGS5%2peoGBf!O@F_F zHp!Wy?bP3q9{jKDUWebE${9{4eX$wv#b(0Zjm92b&O6*+jKJO{<{13mY+8q%6rS8+ zpT_>BsuT7zO&aeRQEyj0q{mDY?c=!!ZDi_RDr_Il%HiMM1A8^o!Wa8huv_`l;BVtu z_M;DzPVN10Tu;D$gXm5?9%BjnOxi~Ttu-0>VFUN&TBle)(&Zz}-}mOj?^V1I&f{7R zaWX&c%5_Mx0mD+IzL- z!PaIh5AmwK7~dS*X*BE`#K-Hzu}|GWf1eJ{l>OWXF~5IP+4-A`WsV6x*kx?OCH5)i z_`+NZUp%94G0&@c*UU9aHb_&tuu-pN<8hQ1;#561a@{|@hjTXOAvGr%I`ZY7S*+6P zj<-X~WY?h`JAKXj=)G5@k2 zILEKJbT8s$?pE~?dXA;obofa~S7qOey?W#~^1M{eJ#*{&6TiQq=yY&4WQcOGr^!1x zkP6uyLGNufp!3Vl{UjpNK7j4roCM0wpbMPSZo(TRK?+4(lVOp|3)p>uypX!{d z{VDG>?N6CB`cq7!KZP{bG08Uqo$8-8WW^vgtBPkX2RzXo224Y zy{$)oY5Wk-868n&dG9Zx?-HL^m@Yn|uFC^O=j8XcQK3C1yx5OUQ0D4jRS%z;r$5L# zZParQ`k69>-aNWp>UFI1fgX3d3VVefdO#j{H8A$Js<3B=c#J`Fj?Fk{r73fxdM3TI zl4a_=468DEPKLhxQ=aF0rzZN;Tb0zOuZ+vkr{2S=Ph(s4n2GD!W`fK z6WFG_xpQKhX|t`~=&FXbtgYAQl5_Zqq9Cy@p_|R{- zd}y>UVLM0zn~Cwcyx#ct=mYel^7Z5Pi!|DoR(XGcHnYBJ?1P@=&z*~T{T3zX>%Fi$ z7S>NmbrZeLlxH64VQZL&e0gS&iHgOj`W5cQCd_ zmkZfzxsrx`<61-E)kVsWO6_OoDXUl6Q0dEnx!Zy|fZvFHc`he&U*^d;aGpx&t+5}B zi?1)Jv##|8>!aFLyJ~qfSD&9c&w(Cmh1eSQKh_|~ulAe82AX(hy7=_uk7x4X9xL`q z6@9#X@|$Ayss#jyFtpl2MnG3eq$7`G-q3SUEwXZRz3e?`Yf;mfNy`1WHF zcV+j3*fZLM^@83r`n>u7#9G0FwSskMsPE=?VzoCMiapD_DR_TR=bSFyK`>(l_Ef$5 z2l~++#lDIAe9+vl{OMQ3@4@*I##ekVn&W}{ygc91`z%LS@R{}iYabO~@Q$@y&iw`> zKk~fe?6(HZJ3;#Qqpw~36rah^bMW9=fb}fg#r)VWSmfWu^F{jmh0Cp7ik9ae(_oXO z%sjd88}ZKUIo&q{?<2xDIHQZ{um|cazZCXLo#o>k{{;48Pj^n=8S%cmf_u}aJ8u}! z^6+C{8+#+BZoKQ-Hw|;b4LGN{A9Lyrvd-Itcm8O5G4>`cqiE-rffKUPxAC|O`XCwihhkkHc|AgLg`-%^`(D9n_=cor6Y)UCVKSTiF7`zaX2xc z^oHxinHYzZsUA~bfd4obe>^Mx;}ZNCzJX<==!UsF5igrJjVd`Y;L&SSw zMJzbyP;58$oqw~}ro5b&#$X)*e0fao(7Rr&PxKg%z2{Y9i{mr)fqu4dCrA2w7xevb z|8D=F(>JF39L8R3O2Klc_NGJ5m2r3hRVmNdc?}tbf@l(;0E`QtZe_YC-% z;LEY6d`>*mzLAD?q#R*olx#a zt~$}zDDYUz70m+BU`>)gU)wh3k0CC8PTLImHA9y0^JCi*x=J3GK*#shsrMzp_R+^I z%+tPzX@4qRKIqiEf%0S9z!&;+PVV!YFzfR}vCAqBWwU&%?}l{IK+u!58>Vep1$T);=EoA!I8+L#2#zW4_ zkaI2MTnX758KW#EW0d_N>TnWY%FonG+64a)a$JM<-Upu$>&zNyLxl8<$NGNlIPGf< zJtggUD!CnB9jp5&Ue~9jt}DTNC3TU$3wX&LGjk7x^d62|*j}^t9FE@kNUyP(Ppz>L zrmi?2VGKPs8sF8b91q5ndriuC=L5-$dZ;mnu*&;^uA3S=s7HzM&4%OkUJ5US6|eVD zk9S>ZoI?;+Y44&ORc{@RL58Y-AXD~Dm}6Ds%|7ys7nzFOxc6c9Vw|?oy+h5?7tJYs zA@z^Gy^`!o@9@P1NGb#(O%QFuwpGWpUXZRI>290s+zPv}0R4O`bR6qR+5%@D!t;W> zV{(dZVw$p9oXZO|tqSA3G&W1qs<~l5=7xy~7l1yD`>NbSfiBQSJZ)@XAKH&Sd&ZTz zfRju=3?#)xi5+|-qRr+)6_W@;#7TEehtb$ouT~G ziSqMJ`HYkDStq`$QkA=OHRe{|91rG7XBNuf{)Lp=k2H5&yj-^XCsy~`QF5;M6Y$2E z@X0zj#xUC6;SNI{XUrI6I`%*!?l9Kfmf4?YI_l~-b!Ye{@OOvjf-!)T9V><7bW58E5>m%Cm4QXu^z?dV6EEyWtS_<_B}+oj?5>lYL*-N!1HJ)Ftrax!9$* zbKtiG2QU2^C~;h~E?lC|sGL`Gdz0cZm-6h&c`dh>_3ihf%v$&X@2(n*y_pmDw~TGc zjJm{r3>o|=C%!I7^`YpqKsL*xMc3eKp&a_X zPGxQ{%T#moMm(cTuFagy@(e%03F&9$Z$U2uMsHa^+OwBY*O&1O`x|>H2X}}{z_&z? zb?|o({%~`NvIAD0r+~aaTmzboq`_Q;avg*}3?a;Pl*fJ=dO>6$`(VfNMQ$74uw&k- zhj5ND=meoB`yroa@qJFyC+Wz&(2-knwT|48+wBCW9CFHCI#QmjBSUYG5}&a+ZH@7S zS!29ioNWJVQEn~TPko|H@Gj)NMn;H_u^m7M^|tnQtT41nb|IvNRNm$1%sx11t>ut= zt(JpI$6jnwx{dU$I-Ryh={4%5<~p?DJmxyau}o*)UR&uB`|4iEsT|)*l*_s<@ps2w z9o4O#A?HhYmttIZ`Fq0GbQ)#aPu<|$wi0<)t{Oyr^xTGLXCB&yJsDLd`u}Pe~CNg2a<6c#Iy4W}BPCxX8c9i+^u+Po>^Tj?he?N5v=_+j_&a{xO zWbiD`u$ae_KQ{Kk9*}r$+@_n*5>v$(0!kG`=g?#;?xGf4M>zS%6 z>Q*m(uEH3H)FHF3v1EUVeUlHrP^}~QP5`xbL?8SZ^!&ZRcv&ahExLPmaX0H~);nY4 z^Q7i~>Fy`>nr1q9Okbteug*Qidj7v>RIjtL824QfFKdJ!$~?k&>@BE!$4pmi0fbeb zKMs9dIZDrYC|~Iz>ht&XYf+bseyuAW`yq+@>UdW2*bToHZA|iOUG*g29M~!)2iWVl zua2{le$vs`STIVbf7ib}_L$WTon5AQKjzo{j<&IX)m{Z?c~+@!^j=wE4iaSS1tEum)!BJWYe5M?yjOb|@k;L0N6OvovAmG5L6`6xD_EuOV6zSU;_n$xRk|nh$6RB7Iwu}- zZq;+Zhj;MIMxR}gmUgbj_!qb0ok(}k#~1~@p^q^NKE`#2oTZksgZ)dB$Mh6;dGP1n zm@EDo#p=8TBqyKsKk*C>oyND%lbCDvd%M?Cmd|=2%khVtd9Jy5Ua~x6Zw9zO(#`cx>2#4L z;;b5d_W8pbBn~zL^O({@ti_V_(z!#zu#?fTVkZ}Pbz2t%lkDU(;$NtCaV}rbsqN&m zs6S{~kL_~a%0BA9Rm(8;(l~Xm)A=N)*MV%E-{thO?$&+K*Nb!i*!exe>}&S#|08LE zzh2?|sKXxG2Kh8Yem|o8#vXEB?XaC6pRt|SI&93f@v|G}anN<*`;?X?^^|q;OoJ7| zoZLSPdOF41&Hj!}r)={N;S4X~3l}8IR`vC>s3Y`GjbrQ`@Lr@@A98=!k@iuhik>py zo+jk?zrn6o(e^dxh|O3vyeyla(6U^L`ZupilVz+gPo1ASOSKI9@6fV!?iSf`oZOQl z*Oe|=J_T7$fqbSzmQO*JePgf>4q5JpEIU(VIS+IT@V(U~OVlYY%PElM<{T}{P)@hw z1+VEYSx(O&%cYQ|v5A>vY1#vQRI;QDC`-tXvSgh5>)tc`=g(!V(T-uA7nz~;9%D<( z{&XN&_GYX==af%+dasuKdsf_MC>*WFg3@)YF}O!aJFe}lrSvt2?I90Wy1BC#d(W@^ z1KRr6JX(in>kC}IRRP8>*SW^GVi52V_7&I$cUPmQOX7ULVQ zn~Z%$hdG(?$}cc=Pw@>@-Jwrvo_ba4PXAz*tM0Q>>dtU#-Cs?qJ9&y0=d-^%v12`TA?MPwTvdI&sdxew<22Kag+#R!M&u>0*m7q3^jr6??(c9s54ku`dL= z&HJvnx6Za=4{6YODbVZe_rN{@pGAJet9~_h^Ep?X=z{Zo(AVm}4-k73=eYS+@){In zaqX%0%V~pYV?Cl*;Gb$+Xj4?XTyo;ODp{A*u@k42wwpPh@{6&}96QkefQ+4m93$K# znBebT>(xG<6UP}K!{hyVPqICJQ``OuZ!0i5suRQ;|C?`OsD9`rkAG1uw(;GLwVE)L4gvo8Oa z*c4q3!?fqIiKq+KVoAS!!|&a=K657Gy+&SZaHR*|Tzt_lpzki607QPAy$#0Sv4uPi z+8#sOcxG0JJn^)?#Bb@%yP^0S4s*6f+B`XnbnlmP-y`DvZ!1ps-K6j3^?kF;y@);22IiMz_E>uKCoI0icRoQC*U*j|h~d|^*8=d$glO!wXie`}D3`S(fRI~kuv<%134U5Vd8SKRp`sGB>l`z(t2%$b)uLxlb3ZvZ*(vW^b=D~5SupGVff zcsB2f%E3OF7yDwPFurp!h84ZJlLNYQWAwWm)S6?8rS8Qj-WV6^P7TX}-t!KQ;fZ%1 z^?o$n-}^D{&iq4x=Gl=eei`UJx?XXAf&9!m@(o$Pxn-fwrARZ`zl%27{ho$sj(%UQ z;(z@-wzTjSJ|b;mh|1>2qFno~!zTH2Y=jMxhrRLs96{cElz9 zcDOI`w~C*x8akb{1(JKi0P;dA!^~{ll1Cf_@7GmSa4qyJe({*5(u0=qf589P@ zPYUx`>$L7N-s0Fs--3sFM+$jh?~Z51aUP}M5pBc$%&~Hx4Ea>qC4uFIV@3C*3?KHZ znC6)a-K0`u=YjU`Fj)Upy z$_>xTW+2_Elzy10`;3F`hg{_; ze+)Wop*+&X>vpf{Crj(fT@r@wsD86`ybtl;Lce_r{T7gZ^FeP^U6D4T?Bg`oAbXcy zs&Y6cGRYqCyd%&3OQo}Tj<;`(ZqMACT(X}wg6xMYC+I2%&r0?|l)o}X_O9~Oo}-aH z=;C!-sq17x#zWY@Rq@!XHFnwf9S@s*chNOv{6^X1MLg#O?jQ3VQ;d(oZtA&fcGsWa+?sP)>}xWAvJT7rgY{n%A3?&b zQ!EJoA&7MBpTN(-9y5Noaktf7Z|?UBtp(YT&g{kVK3@!Us{MDn_G*Sa%j5h!!f$B? ze$aEp4`WL0%ab4I6u+e|e*Xr3Ljm3q*Ly#xPd?gmvyJ=nurr>6u%kGuVf)x8D*wM_ zpvPFJy-K2oeN(c-+!CFW;6IkUXb&E{nZY#!r86xh!#vD6xWBCCJ2hrOYwn2p zJ^m}cY1S3yXB`*bq-`yq)qD*b{dY#++rYco>W!hU`{X{P;Ya(+_x&-S4|5Q8Ypw@~ z@XZVLIN&%}>9o;^=Q&NhE2<^tp<{z64E@&qWzwy!qgdunno>iE-?!Jd7uI*!_WsCI=^Lo$+v|0aC{XNB12A);FOhJE7O!T*^r<9e{ z-=K-t3BNPY?U6Xxk+ilh&!TsT$9_U$?!|MQ?>K4eOlj-nVdh=Rez-EmxXQq@YU>!3 z?M-Q`l$B%?KohT%SK2D}n(6?Lj?K;fg1JG_qgER4d2#M>Qi974^ z+&8l)>b()aQM?hq8Mtxh>6dOSD%@io!ame4r#45u>oNYD1-&MWuW8KRx!^l2&AWwB z*Tel-m%HoCeS#R){9Gq_FkidV%(^(X0DCEwR`(Em?V-&U_KVK0=NzC~7Ww9@B0SuJD2po?;FFKo$tiN`-Js6xYN9cF>&YaL$P&uKT485QI}%akITb) z_Cz1n>8!J~i+}4;rS)5f3ek6bwlJ1_`Iz(hj5)(MK|f=!Q0-|ddi1gK#XSC9g-fhm z%5P|}mYX(XUrhUXsPF$kn`6|gkF93jd9d(zWA)fb{B1a&Wd+*X!`oZh@weT5?ajWL z#>VE_n)a}-rnR+Zm#?7-58OhHL6}`D)sIwKe!N=?(38ZmRP= z*1V&!&e#0yaO)$D&5zw~1r(E-+S+hio39xhnji5!+`OZyt_^9)<<`}y;#G$BdN9sh z%dz29mep}ue-qg_@GV~wdzGl-@ibmnkVPha zj!MO6WJy0I6+WVKrR6VU1MoSZAuau)q?ct$pD#JGrMF1>$t?M2W5bP~Z29XYJzM^% zxKuP;{%T1-rODFTH&r?>Tlv+Jo=tuOBjhiJVdN)U`2&)kt^8sbMt-uD|GuPW%a8pp z^@(UmYd`kP)F)g1seEfJJ|{J#n&@_#Dn*~%}Pt}|vU|EQ!N&cc8344rU3OFG`Gsy^AuFO&3a_5*kC z)TdEHTKgI$JsbZnNzcZ=an|tsFG~8SB+D>=ot>@o?<7o0pWjy8q|=vi{>qTQ1ux^` z=gBPd+h=%T7e7({mm&XA9~1NiP(Ye|Hr%X|tu75|>3Q>Xg48@c{T7{GpCx~bq!(pL zk4m~fOL|PwtFol8_=--*mVeI(={=HO4f(>%d|-m*lepV5$(zW7d^Aj2pveXXQRHPg~tM##TU()Yp7$<+QyUz75)w7>9fo&KpV zIj#JuD|Gte@tOG-uhr@ALyt3+?-Rw!Hhvo=eHqzg7+(=dSHmzvdXJK2}dMc2Ye3c)f(+Bz}3jN0ay$y1a1M&2R;QlpGJEC za`;n(F9YvK`lrBW5sqoJKbCYy@S;Zh0&o%jod@m%{aYICv%u#Oe-d~rFbaGE>BlwN zM@AJ<)EzoJNu!NBzIdsoRrbC{yFYqVbnmLdKykm(0?eAxkwc0G{&S10k+62Df$ z#S;D$dU^n?aEF&@p8-CNaF0g&q=cgqJ_4jX4gxm-_W>!-4j|>TN25LPE#(`QeWuaA z47?w7hk@T^ejwX@K%>1A*n;@^f}b@Y5n%_o5qJuC1W~VRwD(AOr-V02xJtqsfGn>F z_z-Xzkb1RPqdi{2c@n;i@%$vxKhwnft~29o|ZjrM#X`Ca~oW%+>@fyh#JL8EN} zsn4H3sK>#8M%$6_`x1T&$oiZElK)wab`OyJj{;erBb&6G4{NkrB-|+BwZP4wn=SD( zBz`IoEEYwflq}~skmW=)+DCvaXD5*5ECW)Hr&ejSfYis&E44ljXtdv#@I?uq0X~N; zJsRy(z-JJCU8B7Z_%y;#YP8!W+#=y>AWYMuJSZdUdj`sRg#0wxw@J8A!lNWiB?g`S z>3ZG%GeDJ3qkSAmevLr3qaOGa_||E(%Ot#3!nXmxhx9^?_R)2EJRbq>LHuEj_8tlE zl<*3m8o$6!&@IzwpQJGHFACg;_~RPwqd>}i50G--1RRI-Dvfs8*DWiI_=BaEH4E_v zG}=!Bp|WKi8tpAWmbXcxJ+M~K6Q2Q}K>THmb_~e!qCj-01NS4| z(P*EO_#WT^#CK`5BS4szMTdb;BmSU9dnb^58iCYvoT(G-4ZsS-uK*rKe33@G5ZH$J zfx9g0PZ0l^M*CwR`CJ52Z_f+9rO`eo_&N|GUvwP!9Oxn%?R`M}TeJuNQ4Tvb+SR}Z z5MKq{gZK>^?IMZ44fuV;7izR8N&F}v6F4_q!2G#-B0IPu1pA8!A6+qGz0ZHeR@ND4y2+shrpQmcH&o0q+ z<#k{K(oX_uccL2YYT%zDyhWp31>6X_V&Ep=G9dM1u}0emB>ilS_9O|9m+)JQb^1At z_DKmxCEOz6MhS0_aG8V)B|KlkGbGFl_bAuCaEIo9UZZ_V!mmqsr-a)jyh*}U5?&_Z z#S+c~vcE=Yv_D5DvV8*@ZAZdy37(Vq0}|dR;T8!uO1KKh{@4KII4aXLC zXdl+;Wd}9dn_@ab+B-|z8;}Sk9ctql>CA>w# zw@G-m;3y#Fbs5Hoa*S!T9U$fPzDE0;q@R`aqY^#{WV;V&v^ykzk4C#%!doP~3AhF2 zRRL*_H)yoS10P2`jo_ak{_{eGc1&a0#}YmdWIf-~XrBXq3;7NMG372g2&CORpwZp~ z9EI>sjrJB`8R&|D#(gEiWhf%HeZfJcFTU^{SyPA@CcX!|5QTf%uj zuE$0J*&a)yeHq5T0r4jV8wGCzQjZFOoCoJ?w0%Iau{7EPb9Ffv zfh^}7km+YN+6N{6NnjPy_elCqNpA$Qo`pc>pD*b?Np~>mv!3q@Uest`5Ik3){j;+g z?JnQ}(4W$19|zWg??H(_Ao2CUYS7hbv}XfJH$$hFP1R^$oTK?)5InEZeoOESa6R%J z1(M$pjdss03qSpVf2h$u01Sd|gT$9fymO;vtzv#)fa$=g$XBM(_5qpi^D@6l*)0kn3S>R&B)(eWR{+VMLL&bjH2NN37m)ljeE(1Ofy7N;k3;)XA(r6zCGQJ+j^5*OKGM}V>cD*jI3&`@?fuwH%LWE_F8tp9- zKVQ&+P*~3hkaR~i+AR{lOyU8gOF%M(25)p{8PQZJ8dv=0OEuk4^k+XuV{`DO!2 zH$$VH2h2fult%k70;D?#B;5gx_8y=I;hh@o4g^TI2S~b|8g1NbR&;e5?VXlo%|?2= zMtc(w{e2yD&4Ng;!`FgnuJfbO$THd|NFgxnpx=mR1S5hSg4Ke4L7$){=%8O!e!+-f zhhVj!U(hFL2|B2t$}boZ>=3LL^b7g~EkOr*q4Enx1Um$)1^t3PK}*nqa8!Q5h+v0c zwV+?nCuj*e&?l8&Fe2C?SS{!m^a)ym4)jdr7mNsY2v!UF1$}~+paZ>9`2{0_9fH+@ zenFq0CFp2<8+}GFBG@5VE$A2Y30i^<3RmR|Mg%(qs|EdnK0!;+fqvp~^clg3V25C} zpkL4@2vGT+qq2j6`D|hsb(;kzj-OHqKPKV-B;n^Ie5-`tl<<=ho+06XM?aCD30E*3 zvh%^YoJq5nRN-$bO3e_E%9F%K}DC*l8H!p9{%3G)fl zk4X3~3GbBflM=3%@K}^L5%t?AG zzD4L4OL^xdyg}0cS@L&CxL@)|g#MpM?~>mxsn24m&$B|mLFm7SYD{GR?$Y%+GggPq zJ){9lT1+?hmWqYmoP*AQonv}&zRv#$CMAZ=J*!hfZ_XX>G4!x6{2Vs)uowJ%BI)Lw z@p}@co#E$Sgx=gE`)BZBdFI@-Q|fQ-!TqJwe?Iz{pC6!}q&N4Z)?=P#_zcS7=Uq_n!Z}mOhpG zn|ow;2tRZ0>|dpPbIy#v&!qC3bLH)lU)K)xl=dH#h!-Ti8u|EnOVZ7~zJrhx>toKD z4?yk=AN476Yq!+j+=IL%>E>SJ1nCcR4|18Ln|lk3q&#!a@d((Gzd4uxGdweF?jg*S z{xJ6%rb~OxJ%e(gH}?`Mr95*_;M)>5_fG!1)X&_bQGOD5n0qnvq(0`J0+LjH%)Nx) zi$0ipSU(s2G55O4r9aI*uDw!!b1&;}B)_>w_XEj4A9CU6tCHW`qYFuW&Aqv(=##mp zbhGq_x!3e_$#3o{wMlvA-qB4`p1G&=w$#tuJDN^<@bHVhXhWT79}D-Z>RGczf6P6w zE5gs*E88jMn|oxh2!C@g>>H;2SjX`*S^Cf1tHHaOl)TM7p5I8=+^e}D;k;XP{<8q; zi@7({D(U7P&5tB(?)5B^`a~r^=UL`A_j3A$pSdS9UdDsD_q1E|@9b<{en8}L9CnqT zb)w(qp5b4JJT|~C^Yg6qr@1HiL*Z}kt=z}@AkHW99*en6%})n({;x=QpM)QhaJ__| zm+&SDx064<5#je&B7bv_?%U&a`^~*P{J|C_4|5N%LF8lZ)#06TiXS%t_<2wG7fN_K z#~b1tDeo@I3*mzj-X!5Jp|9b5iu9<2ZxMdyg+3_Z7771Q@^6svSt+kt!p}+iVhO(} z>3#_ZDSz;MUBUxs1H-XrRCBCbB)vn@-x7Joq<+63f5_;7jE_B%UL@&%CE;@t{!qea zgx@L&@09e*(!RA4eo(@fO?}y4h`T81Z%MlGe}=?A7?AXBXa>|d{wYQOxx-c{i0k~J zP-#;`dqYiQ!*{|P!mVu$ZSAK*S5s@tqa$*?Pv{Gg?F|~5v#&m8=A^$cHwslrqEzbW9^Pc@Lk=| zRMVK0R?<|L6b_ZQgqunlQM0CYR$znrDS~0dL>46kCb}8XnoCLo=~p$k)`eSx=C=$P zD6*vm8=Kq0m9?$Sjg8qzSioxeNkldp#U@)K8I*3X*%}^>AXA-pw6!;H&yb+&o06ca zkP^p|E5fzyHBDO^!|^oqZd*9saq34a6=B4bKk|qxzM-jo>7Ai=^}Cc%Wr9Ab6V}$W z)vv2*DaG$%(gh1t($ur#WnDIIR4+Lkdj9^0N6b0VyGQUjG&xTU1s-%^J$pVIDl#!6VJ zxYD-;8k?K826i@>y?)2`hZ9-1 zC*}tkK^e`nP=#J?&X`!hGem@5T6ql$G zfJrXKB-+}5U+smduYv8*(o_GTD>rUA3zvT-BUp zI~iqY+r`*E&;ZQ~*O_RScB%O)o{-EtX^w&hNcJQmEwMym@*L%gPs)`f?rcOZg-a_X zwFQY8*Trqb9!t>b9!f1n*I665)HIjlmYE>4r~Lg(keIfc#oHr2PJ2 zlr|GxivDIKNh&*8l}Dye*XoRUhEed0^sAbi#qrA6{7?q@8Z#`tk%?{6u*gJ^VT5EN z%Qjdt(O$*4$&@Xnftge`Q?~4*DHHW@11l5#uwyJ!hOEOa6Y;PkFH?q0gD?{vMh>0x zG)*cCJQ%{a{Qjy?amnhy{bf}cU5qrbC1oY+O4e6}swzrKLKWrZBhjUBsSH+>mz9Nr z_Ah@<9BiX9*^0L&d zl~om`>(`{lDn_P(sN(926~(A^qW;5^r!{wY^5FfIRpskK!xOD8D-Tq$_QR7^ zlmx2+>(`W(j6heqF0f`K8qo+-pz8be<;5kb0<0)mucfnYU0{82YHH<%K(HjZHc(+f znJTM7>|CQ=rO3D`6sV|xs)@>k9tf1(Um}Zz+wZa(+qdJ|uwFadjt2ynnjjt!ywe2l cG;>I!+iy&oxR$6K_+PC>Zr8!ZX2a_L1-o;xLI3~& literal 0 HcmV?d00001 diff --git a/bindings/odin/clay-odin/clay.odin b/bindings/odin/clay-odin/clay.odin new file mode 100644 index 0000000..9af55ab --- /dev/null +++ b/bindings/odin/clay-odin/clay.odin @@ -0,0 +1,246 @@ +package clay + +import "core:c" +import "core:fmt" +foreign import Clay "clay.a" + +String :: struct { + length: c.int, + chars: [^]c.char, +} + +Vector2 :: struct { + x: c.float, + y: c.float, +} + +Dimensions :: struct { + width: c.float, + height: c.float, +} + +Arena :: struct { + label: String, + nextAllocation: c.uint64_t, + capacity: c.uint64_t, + memory: [^]c.char, +} + +BoundingBox :: struct { + x: c.float, + y: c.float, + width: c.float, + height: c.float, +} + +Color :: struct { + r: c.float, + g: c.float, + b: c.float, + a: c.float, +} + +CornerRadius :: struct { + topLeft: c.float, + topRight: c.float, + bottomLeft: c.float, + bottomRight: c.float, +} + +Border :: struct { + width: c.uint32_t, + color: Color, +} + +RenderCommandType :: enum u8 { + None, + Rectangle, + Border, + Text, + Image, + ScissorStart, + ScissorEnd, + Custom, +} + +RectangleElementConfig :: struct { + color: Color, + cornerRadius: CornerRadius, +} + +TextElementConfig :: struct { + textColor: Color, + fontId: c.uint16_t, + fontSize: c.uint16_t, + letterSpacing: c.uint16_t, + lineSpacing: c.uint16_t, +} + +ImageElementConfig :: struct { + imageData: rawptr, + sourceDimensions: Dimensions, +} + +CustomElementConfig :: struct { + customData: rawptr, +} + +BorderContainerElementConfig :: struct { + left: Border, + right: Border, + top: Border, + bottom: Border, + betweenChildren: Border, + cornerRadius: CornerRadius, +} + +ScrollContainerElementConfig :: struct { + horizontal: c.bool, + vertical: c.bool, +} + +ElementConfigUnion :: struct #raw_union { + rectangleElementConfig: ^RectangleElementConfig, + textElementConfig: ^TextElementConfig, + imageElementConfig: ^ImageElementConfig, + customElementConfig: ^CustomElementConfig, + borderContainerElementConfig: ^BorderContainerElementConfig, +} + +RenderCommand :: struct { + boundingBox: BoundingBox, + config: ElementConfigUnion, + text: String, + id: c.uint32_t, + commandType: RenderCommandType, +} + +RenderCommandArray :: struct { + capacity: c.uint32_t, + length: c.uint32_t, + internalArray: [^]RenderCommand, +} + +ScrollContainerData :: struct { + // Note: This is a pointer to the real internal scroll position, mutating it may cause a change in final layout. + // Intended for use with external functionality that modifies scroll position, such as scroll bars or auto scrolling. + scrollPosition: ^Vector2, + scrollContainerDimensions: Dimensions, + contentDimensions: Dimensions, + config: ScrollContainerElementConfig, + // Indicates whether an actual scroll container matched the provided ID or if the default struct was returned. + found: c.bool, +} + +SizingType :: enum u8 { + FIT, + GROW, + PERCENT, +} + +SizingAxis :: struct { + // Note: `min` is used for CLAY_SIZING_PERCENT, slightly different to clay.h due to lack of C anonymous unions + min: c.float, + max: c.float, + type: SizingType, +} + +Sizing :: struct { + width: SizingAxis, + height: SizingAxis, +} + +Padding :: struct { + x: c.uint16_t, + y: c.uint16_t, +} + +LayoutDirection :: enum u8 { + LEFT_TO_RIGHT, + TOP_TO_BOTTOM, +} + +LayoutAlignmentX :: enum u8 { + LEFT, + RIGHT, + CENTER, +} + +LayoutAlignmentY :: enum u8 { + TOP, + BOTTOM, + CENTER, +} + +ChildAlignment :: struct { + x: LayoutAlignmentX, + y: LayoutAlignmentY, +} + +LayoutConfig :: struct { + sizing: Sizing, + padding: Padding, + childGap: c.uint16_t, + layoutDirection: LayoutDirection, + childAlignment: ChildAlignment, +} + +foreign Clay { + Clay_MinMemorySize :: proc() -> c.uint32_t --- + Clay_CreateArenaWithCapacityAndMemory :: proc(capacity: c.uint32_t, offset: [^]u8) -> Arena --- + Clay_SetPointerPosition :: proc(position: Vector2) --- + Clay_Initialize :: proc(arena: Arena) --- + Clay_UpdateScrollContainers :: proc(isPointerActive: c.bool, scrollDelta: Vector2, deltaTime: c.float) --- + Clay_BeginLayout :: proc(screenWidth: c.int, screenHeight: c.int) --- + Clay_EndLayout :: proc(screenWidth: c.int, screenHeight: c.int) -> RenderCommandArray --- + Clay_PointerOver :: proc(id: c.uint32_t) -> c.bool --- + Clay_GetScrollContainerData :: proc(id: c.uint32_t) -> ScrollContainerData --- + Clay__CloseContainerElement :: proc() --- + Clay__OpenRectangleElement :: proc(id: c.uint32_t, layoutConfig: ^LayoutConfig, rectangleConfig: ^RectangleElementConfig) --- +} + +MinMemorySize :: proc() -> c.uint32_t { + return Clay_MinMemorySize() +} + +CreateArenaWithCapacityAndMemory :: proc(capacity: c.uint32_t, offset: [^]u8) -> Arena { + return Clay_CreateArenaWithCapacityAndMemory(capacity, offset) +} + +SetPointerPosition :: proc(position: Vector2) { + Clay_SetPointerPosition(position) +} + +Initialize :: proc(arena: Arena) { + Clay_Initialize(arena) +} + +UpdateScrollContainers :: proc(isPointerActive: c.bool, scrollDelta: Vector2, deltaTime: c.float) { + Clay_UpdateScrollContainers(isPointerActive, scrollDelta, deltaTime) +} + +BeginLayout :: proc(screenWidth: c.int, screenHeight: c.int) { + Clay_BeginLayout(screenWidth, screenHeight) +} + +EndLayout :: proc(screenWidth: c.int, screenHeight: c.int) -> RenderCommandArray { + return Clay_EndLayout(screenWidth, screenHeight) +} + +PointerOver :: proc(id: c.uint32_t) -> c.bool { + return Clay_PointerOver(id) +} + +GetScrollContainerData :: proc(id: c.uint32_t) -> ScrollContainerData { + return Clay_GetScrollContainerData(id) +} + +@(deferred_none = Clay__CloseContainerElement) +Rectangle :: proc( + id: c.uint32_t, + layoutConfig: ^LayoutConfig, + rectangleConfig: ^RectangleElementConfig, +) -> bool { + Clay__OpenRectangleElement(id, layoutConfig, rectangleConfig) + return true +} diff --git a/bindings/odin/main.odin b/bindings/odin/main.odin new file mode 100644 index 0000000..6875499 --- /dev/null +++ b/bindings/odin/main.odin @@ -0,0 +1,28 @@ +package main + +import clay "clay-odin" +import "core:c" +import "core:fmt" + +main :: proc() { + minMemorySize: c.uint32_t = clay.MinMemorySize() + memory := make([^]u8, minMemorySize) + arena: clay.Arena = clay.CreateArenaWithCapacityAndMemory(minMemorySize, memory) + clay.Initialize(arena) + clay.BeginLayout(1024, 768) + layoutConfig: clay.LayoutConfig = clay.LayoutConfig { + sizing = {width = {type = clay.SizingType.GROW}, height = {type = clay.SizingType.GROW}}, + padding = {16, 16}, + } + rectangleConfig: clay.RectangleElementConfig = clay.RectangleElementConfig { + cornerRadius = {topLeft = 5}, + } + + if clay.Rectangle(1, &layoutConfig, &rectangleConfig) { + if clay.Rectangle(1, &layoutConfig, &rectangleConfig) { + + } + } + + renderCommands: clay.RenderCommandArray = clay.EndLayout(1024, 768) +} diff --git a/bindings/odin/ols.json b/bindings/odin/ols.json new file mode 100644 index 0000000..90e2150 --- /dev/null +++ b/bindings/odin/ols.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://raw.githubusercontent.com/DanielGavin/ols/master/misc/ols.schema.json", + "enable_document_symbols": true, + "enable_hover": true, + "enable_snippets": true +} \ No newline at end of file