From 5a58a0cc77bd483d0af7d0ae345653f06c63c595 Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Mon, 9 Jan 2023 21:30:47 +0100 Subject: [PATCH] StarField in the background --- .gitignore | 13 +++++ CMakeLists.txt | 1 + README.md | 3 ++ assets-cg/Sprites/fill_circ_0.png | Bin 7343 -> 0 bytes assets-cg/Sprites/fill_circ_1.png | Bin 7801 -> 0 bytes assets-cg/Sprites/fill_circ_2.png | Bin 7417 -> 0 bytes assets-cg/Sprites/fill_circ_3.png | Bin 6964 -> 0 bytes assets-cg/Sprites/fill_circ_4.png | Bin 6541 -> 0 bytes assets-cg/Sprites/fill_circ_5.png | Bin 6203 -> 0 bytes assets-cg/example.png | Bin 3816 -> 0 bytes src/MyAzurShaders.h | 4 ++ src/main.cpp | 37 ++++++++++---- src/particles.cpp | 16 +++--- src/pixelshader.cpp | 13 ++--- src/pixelshader.h | 3 -- src/starfield.cpp | 79 ++++++++++++++++++++++++++++++ src/starfield.h | 22 +++++++++ 17 files changed, 165 insertions(+), 26 deletions(-) create mode 100644 .gitignore delete mode 100644 assets-cg/Sprites/fill_circ_0.png delete mode 100644 assets-cg/Sprites/fill_circ_1.png delete mode 100644 assets-cg/Sprites/fill_circ_2.png delete mode 100644 assets-cg/Sprites/fill_circ_3.png delete mode 100644 assets-cg/Sprites/fill_circ_4.png delete mode 100644 assets-cg/Sprites/fill_circ_5.png delete mode 100644 assets-cg/example.png create mode 100644 src/MyAzurShaders.h delete mode 100644 src/pixelshader.h create mode 100644 src/starfield.cpp create mode 100644 src/starfield.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2c4f84b --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Build files +/build-fx +/build-cg +/*.g1a +/*.g3a + +# Python bytecode + __pycache__/ + +# Common IDE files +*.sublime-project +*.sublime-workspace +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt index b841e35..855c84b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ set(SOURCES src/main.cpp src/utilities.cpp src/particles.cpp + src/starfield.cpp src/pixelshader.cpp # ... ) diff --git a/README.md b/README.md index d9a06bc..2d6ea02 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ # A very simple Space Shooter - SHMUP - Shoot Them All First attempt to use Lephe's Azur. + +Yet it only consists in a Particle Engine able to reproduce some kind of explosions and a starfield moving in the background of the screen. +The particle engine is based on fixed-point maths for update and on Azur shaders for rendering. \ No newline at end of file diff --git a/assets-cg/Sprites/fill_circ_0.png b/assets-cg/Sprites/fill_circ_0.png deleted file mode 100644 index 277e658d253da0b117d12eacd566cd57574f178a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7343 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 Q2Lfj^*0<2Ruj?B2A57*VmjD0& diff --git a/assets-cg/Sprites/fill_circ_1.png b/assets-cg/Sprites/fill_circ_1.png deleted file mode 100644 index fbfc7ee31dbb42e72f35b6b608b7d056624421d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7801 zcmeHrc{r3^`2QeTdPx$I7(*{&%nSx&-x;#Yl2kKeFqWBN1|unJvddmsOQ@_(gRIF~ zDQn3Z5}|Bavcz|&ce{Syf8Oi*egAuBu4m?X?(?}n=e|GZKIeMQi8MDg;9wVE2LJ#Z zNJCvq`agw!9cDd9|ApurdISJ)CSA6+BU_^UfJASCGtL7GB>NMwKr994Oa~9%zvY-Z zDZv^3!M;VhahtW#8_ukFd;>LvB z8x@1@f!`(TR^*jjJGbQKKYUN#THpEH@3++7*+f#mD5n0hc6vR#`0AV8P1UQA#d?mo zNx~u8>IQmeQxB58Iusw?vz4j_(x~Xv{y{Z2UEo`yKBH8w_KmJAIHYd{?w;Sx&)sQ35*?^`liE-C>c(!Lcd0X_w>ei3S><9^s`t}d&X4e`>xa@l?bJKG>(?@=^ z*Y9Rwz7DHVqb*K9D9JVn^js418lB|5I>*aetp2jJENs+v`mN?FBYW$Q-%F1LoJpQ* z<_5=6Ch8ZYWVEGm5xT{eMpB=)Q1^V*iXC1|lu{C>vSQuxYw-idrXR|i1BP~rhzswk zsCuR*H(Nky+e=d0GtAQzJZ9y5zM^e&N}~83Xs!27T5qADYIfdBlg0kI>G*!QmDZAU zKs1?K<-@7`=7x0O2W=Nqp3x6NF>cw+hDR!SLvjxr<+;I(i zfl*?j?bhBUefg&v;AyV41-~P&2!0ooy~myCZsXSbEywOY>-X-SXI%->db$q_5%^> zZS}m!%H>XA9P8g`_<~*wc4E=wUuW?eBQGFI z2YPcGq$7bX?#|s(`pmE5kfz%Y9SsS3b>6$SBO$35XH$3jUot~Rgl*=teYPCmdYm78 zRjEB1p4BJb8+fJR#5hlcFZNb4!Y$BP*s`hjV~5OV3yGbo5%0Ou?>$2B`fB3 zI!|R+wcHS~6|>qE64GY_p7dTD5*zIG%q-FRt^i2JM|5NL(W(*k)_v^&Q+46g5i z$<~%GPZh&zsH~TJ1koyd1)i(D61RLzd68Gw{YF`#C6>he(D0U!gY(7%kpBCZqu(mz z{fce)?v@4D#z^`%qiyuR1%c1XSq^`H6Ov}!FUm9~24pU|?OFcYXrfD%j!xv+wDR=K z!O3UFm^9w_Mg1Im{locyLz9q%zOB!jJD0&`&9Y02yaw+cXt}CI&Tupr6)8^p%n8Z9mIx0LimCD&Z04_g- zzB_Z~mB`!kCC>`@IR>2qV#Z<)c1A`?m|icYwJQXh^gHTE%bmN`I&XIgvJUs;eqDB1 zsMO+-6;C*gdiix07Y*k7y11COS)zLccBJYKd?pN*P4!iY?`{alKIJbS6$33jckZ=E z#n3G;imMqdF*To2CstSV0Ah^6nlfH^$$J!Nudn@?*dCu>U3jmuHA79G-4Y5 z{9X=XQSyK-^MQHz;bbN|axwKYIx~7IvT0KKvEN%?RW=YZSW}lX`5SHAz|L6j>#F)Ph{J%8cM{ar!6ipW7-E7teF84yfpTrt$Yw zZEVLpK>3zaAAN%{9!NZ;b|;4hNqGD@MHuLB;C+xEiEDDIhJhgJfp;&l?ovh;D^hI0qGHz_(x{F!+H7zL)ALn&2{ zqf;#E!eSWi2yrxqnD~Xy!g)7s+Lye7brpu;`Qtjg1rr`qpSvT~L=*Jplrnvv7t>_N zncBtJH?n?nZSRoes-4)DGoluY;xoWiDDB_|;NWeQDJtQ$OiCahZ+k({LqkgyAAw_| zq#PGBAg7Kl$I! zM9!#G4%}=Vlm;%s=USmyO_IYzUZm$V^Zmrc`65RuMxb6S;BwH&;yV_k)I6xBnaw2U zWau3h9fhHxo#H}H-?XWRr0JQr2W81|-{+$j)Sr7$SY%acGOtefGRmJ2Ky-1_7f?Y%AXToky$M-v6n? zqa(g|o4;+c_A6{YK~z4yb%!akK(4FN>evhB_os8&a=SD`GyJXyHK%p46NB1^H-(-N-aUDD;ggW?`G-ktoV3P)m^S=xC(tzp-<6tJM77q2+W1pvHe=3L z!#dLOHzwiNDRzOeM;w7()S|d!Po>%Sd#Xr$hQN zze4EE={Ik+tXs1-&zNN$@dR8=Y>g!fUeMDHwqh-Z6DOT+P_=*L4=L-%z5b#b+;4D0_@zA<}Sr;dT=`4YTNK=gUOF;?Ve7`q|J#CmmQm$Cqps(} z+*=c$>9{;17e-#;yXLyqG2>^gke1abfeboKZFlDu!3y(r8CFKhupYZ}W9gpzykeW0 z#657+BFfjSTh2!7{up43-Ju~C^j?(j5Q)oTbVDhEX!1+Iv5nn{{xU+(Dcc><> zt)9(uco2`E@9wKz1}Sr&`XAY9q5Ku+cMZJccH)KtoBJlc~WedZNq<(vjSZvE*yh_+>Y zu=~~FO|ORdjTzS$&e!Gxhc}-_P>Mg8x_N02v}H+4fW@2;49(;ooq+b)qisQF3*akj zCv>EHB_7Vdkus~*B6KQUdE(3L*18M$v8Ar9EL& z6Towi18pY?(1RYJb+=i%yb)SUTfHMQ*S}f5HBr;h+FzXQvIVc_ux-drc$--oa70+% zvgTgYX&=5)hYS4S-`eC`GeSI-tkY_bacw48bq?#ZndW5c>q6`$0zOwAN9flC>r}6d zDZ{E$JoDM7`R9%uA6xtO4I2KPsKvnOzsyh%{U%Z-^R-P=c*Nh}k(=3a-Pvp3p(R7r zKSo^bubt5f;V;OO>+8E->NEF%dcmq?I8j`j^V*v*udI;~OZ*DB?p%7&@fnGhr&))h zjta9rhdc5cp6!^Mdph+ozrBttEBZ``o^6(ITO5zyN5+iCs=Y{bQ!&>Kye&YzWK0=5=glB=7t)QdM05Zo}QC!r^+*jU^N z3g&{h)p~r|s9s61AN-8R1CvnVEXvNO7NuA}jYLc|f~{?ybhaqS^> zsx6{Y_liiWdvn0bE_S?=tK-FX&Z)FZZ0UFpv23ApCkzf;f)$DtcIkR&Pfz}CmVm@P zcJSg|>t_AjX-3}HAO z9do3P&L7)T`ld7^@TQt!lQ~bgnbrN%$BwAnP;x3X<<->_q_OK2a=C@uoIG=3lf^_J zk%!Nqkv2BgiGJJIVsFc0tHrg=;N|0GNxsRwV9X9i*Dg|or$5^h(%@rQua&qP;B_@Xv0!OSA-#W&)Y^?vVuXB5Y*3=Zs!d}N6C2*M$ z1`kdLPOwV7JiUZiN=NdEU7f6+SUNEs@`|xDCVi$))hoo|jzbrd)&r!TZJL=6x^&OFZ$W3Dr zTecX%Lxq~5Up5hK*4$x zoUbfMogJv^?c}U%sjL5sg8rliawU_A$`FX3pP!7MoD9L+1p-4L5D=&=L{=6|M}SHG zcruCt#*;+%D1LJ2Vo4Zp9FdG8;DLLbC^W%`tOf$n+ktuYmqn50W+g)CFRRB@ukQF<3ocES@a-cM2!WpZ-K2Z;$1^T9(xkF;5>=@UUaelfh6Oc{}SsTvF)|&r}Otf=v*38}JK~ae;F*O0vrp&qGZ8v zML9TKW_dIijaI~f(HMlBGXjA@C}I`<$xb3Tll@TMSS=TNru1y+1+4nWhfK``IRtaZ&v@2u`1;M(L{A0@V8}v?)TG1 zUtZ{|739z5>X&AFGX5WaevQTdVGnfb|2p|s`u-=^e{%gR1^yNIzv}u=u79P#zXJbP zUH{+YV*hKygT>R|g8b;)nI}_NH~LoSAlleK7qGkc&8aI$qFdOAhV~=?;Ly>%ive&u z<2c>OLPnbCu}m|t965AaI}-VVZYoFWYFXPgeN8v!4g&tBQ!Ku;Q?UGdmG{97369w( z2}S3*$P^Q1r`+MwVc?8TP)%|xYuXF-JQcHp^0z{RPHMWXrfeVh0!VC4+r;`B(!v9l zciE70(LWyfm=_lK#0@GQJ=O<-W$y zMCd|6jBrxITAW9+v+Kg|iuQ)y-7B_)po23)9>J~PW|zwa7=X=h5edffPn&@+Lif{q|0B!@U zjv3=OfN}A1ura>D+Iwy>e!4uH@sPN(U&IjJ#gdLM=qReiStuCHP zaR?Gelb1F{I!6WCKd*kTDqrm?FOLaO_a->(6@R~3H$Amh-q*bfSa>vMv)QiU8S*y$ zLDTDYmyH#C-iF%w^48piPK`}?;^gYZF9)0&hb|0W-Spk_x$#o&`Y1$kROGDTy6?c* z_0jWh%Q~cx5(ay}A6>Qy`&Q0+0Bz9e*uGV|gkDPhu_+QCwxM7$>XDR+|SBXV-(UU!RFCW6o~PbQFfF5O%Ie+coExT zx1qkpb2jMFeFskYz+<09kM^eAVZTbeOWjIqH`qjkFS3@=#Tw4p5YtJ2j_pGM2fdx6y{6 zAbCL@wG-AL%OIyVWM zA1j;eHw!PheLvX-uJ(Qt@MhNi{G^|mJ)E^YUs^yVEiCF~nTzv*Tk1VU7Qn*V$TRc4KyPoYfH1sM+Ao$j+NRjAI z6Pw+7^VViB-Ww_?369iP-!bF1yFom>l&QS0+9uS;!7fWD!1`Xdo9COhf~T+TBb<*A zxxMo|zGjJkDn3T-ea%_fBO<%$I9wy5jjPO7lR>E6n7S$^h#O3&?IY4NkgJ(DPfGeu z`4slpQ)N6F-Wtmf(c%#*%%`RL{<(0So9tO#@ zoPNVTD&MK7H?=9tIW>L{oBI#tcJ0N_TkuR=`da$qi)DL7$ECuYftvC&Dz=s4Li&S3 z^ux!l2e(fpL-Z$}7_NG=*4K_K(|PfA{=)b6VZt{E;X=Z-Z!UfEXftoqHu2m{bYTtF z(_4w{nFKZ@Amw7L2X4MhmIItfpEQ7EE}zi(5Tq|H51pvTE~KQ~mO0YWDkaN5he)`c zF_EXqpYrhLrwl^qNYbi(U9e!mAP(OiVg4UJLo^(Wt;7?_P_}#K?+uH2?XIc-V-kNpFJ7f}r2SkC0tqPJvDH{V#7k zW*q|-(d~Py{4LU74-?qp@-zAK5)aiz*=5$mT$LY?x9aZ5E>1Mpvz4Pc_!wll7hA4g z?2a3qs&llDFPf6;=7~^dv1qn!jDIZW=41AiKUZ3MChS5M_iP52my=y3I{v*K6k4E3uFV<3!x-es(C&BnPYBDC zPD^_A_3@bNxcy6Id-R7x)yF4B)Mzicm=0X-E>iFd#m@M&@8_y18$%F!#-49( zv4X7*Ds9Cj!BgdARmtYl4%Iyuk0%K0mp{wSk9@jj_4Grdg;VilbM9ki%HrCugfq?tf89r9^qCTCv@1*wtMy4Q_8s6vS@o zjMt3M-8+<(_HJ_Og74a44nJ!+3A1TAn+_2ZO>wR=(nN25=vqf6+pQSi|C-`DR}znP zJbZgjpqwelbTD#WyDdq6igM&y!NTzY&g_oegat~;*9nL4FAyvBJ7&lYyK_UWm!!H9 zEOslBqra;b_~=<){PuEgmwz9E#eL%K@rK2Le8~Z${%&#@dNOrIG1OHfgQxPv2=2D# z0?8|L_alWai^YN(dJi_$OoQD|vS5YU{;vQ1+*iu3Lg>Nx8+Ulh(iX#Fe3Od0!+p>5 z>ro{7ary+3tUWB7`?!F(W$?+He(~SY(z+QA!CtOBSQC9;Rx{Hjv5&1E1p`=I_WGo2 zUYk1TZs_PH03v94zHWp8#w`Lr4h6q4p10*rU`lgE)2pGWCgmm#KFPVypB-zqsNv#f zsgDWG4v{&CXgTVuVHUKSUmo)Mbq{aLtL%?_ye&W&e+UN~>e^)0KBJX$>wtJEGsgr7 z*Y!xAQ`ux|4A!_ig;xxNR}FkOlVvBqd?d8^C2!#CHA?hGlCaEjzLZf`G97TVXZX|Q zs9h7P=+1$=XSy%X%5S2?1Uk(HEuOdd)Bigef3PYzrbp8;I=s;2DI zUoq#HYzex2sx_X8^YP*<{s^Bh{wS^1(}(>Ypu{f&LhT;Xggeja-O0t8++(S;U}DZn z;826KoqEp8-m=3Uw3voAGb*vhc%iE#iA+Z@F1FIhr*s>aRxKj|(N&Wk=fXyGq9 z1ZDduWr{e&sUh@b^ij!EaYego+45Iq@(0H*qp8f1vq|&3;TXL&=JZvpNF>YtXA*hk zjR3u-D*oaTDZcBd*4Hd0`!(_>Ha=HYj32rl3vsMvYRuMqN9)^@Lgaa%?@(+c-^@Bw zXc%L0A+clFEq9AGOFBW!Fr`ZKOvFu@c6dUNtFWnT)9RPCFh^hgwQ`cg1Q2dC>epEk z-aJ_}g0C1qqGtW6;u9(2_{Rh32F=FUpumpDdsk|ZrYLDg;Ah?aPsdHaMneeg{j1s# zN?fq;ov8DiY!A^{igzA;%MV1z`kVa z1b>EcpNpG?iKu^+rehLb? zK6_|3xq``t7S!*u2i;IP{KP)f@{8Bw@AGC82k+t5(hi4#`WKrNmvpxBce5^^xa>C@ z*|ahaOSNCKuK>xlL=6)!UkUrJxwSIQceGlX;QMu!p-wLfxNoN4$#|!&o>b_x;?nli_aGpF{ zPS~n6;LPJa5Fuq6b;)@6L#|HuU5LE*=!~xK%{^)7tROP<^$&tt`ZO>B&Y zj3rkWJs<2)*D}h<+&XY7F6MJubWBQx)Q8UnALtftyhnBmvVaYg^=0mUh_m8*XO{n| zQ48_$)uLfQxQuV@hCpkcZG3-K_<4z&M=5S=V|haPsS9zDd587##u4XT^woLL=>DYx zkOb?+?mVulA~Rceb(Ikp=z%gk*n1u(g9$6ZdNCg0xqR86XrUu&Df6PXVi6|@NG6ws|R3Q3- z*vGqkU){91@AlGJLqj@;c#gc!o9~48Alp>PILFbpBTLAobOT}O(8+t_OQKT|?aZC= z>C-)EpD62N)s}8*5U3fX6wsoiveEIkxtKIPj_Y`YH&aSom7+dwYy)hY;CXm3A4NmwB zWsdR-*L&g9bV;nphnY1u{OJAn z!7V~&%&OMLMku_urvi@P?Mze%@T4$iSpWd79zen2-HCLdGtq_Yg^^rncpwQR6EKoi zO2!aliZ;=ej18g^&4WxV@Imf)BtcSLjT0S!VgPs&={R73r-v5}6@Zc4!9_9dx5Z#d z;EoF29V2ONYzox&rV@dQ3W^F4kZu6k4<@O`2}Dx~B$Szs-Y*Eo3M1)Cr&Ca1u)n{* zf_(y!66l3E*;k{_TSYYr04!}{sPz4Cs(-Zu=1&yxj#{l^i(0{a`SujR^uo;o& z?MuZIb^VB5bgADV2>3tkDZW&XopcCzFwukP$xx*+yh8uxQs2PX^iPXz3S7vZlpQMu z*?-fdlSzM(^|#ozcXrbGJrIWZpSXY1{v-DtWrmiqF-pf9@4FqIfeuD;+dqonjVBXO zKW|A0B|JpQ8H9i3LHuE5o5A7!(gva{gcFG;b2!A4er> zx-c?jWW#8noos+|J5juPy`AJV|BY|h8^bpSuM-+A|o zt}rCKDOejC0I+A@_QeFq%-YWoveONWb=jww*!j7*MxUJi%n(%@=xAD4KblK#=MMvN z>0C^)&fR5`n?3gYz+?g8q-^v2bCx(BuqabTG3kBnlkCo_`6Ll3yTj{=^JxB8PCU$B z0J9SCd)YBIAo)zbqh3t1?OoX)xrxW>BZ$ptF;1<+PBcQZ_wT3g;qUs)QT7NO0=}F@!1u&;w$qlLaj8& l8>$ZK&KeHYn^$TDVOWM<453}q{8NK*DKWho_!ie5V< z3MtCI$D1OhWdA-??_1aJ`_Fq_zwdv|T+cJlbMA9K=bX=d?)$pWHBshf27Dk<5C;bb zpOK-iCGg7zE`AR>;Az&BWi@mSu_e1$#2-WQqp~%<}Ujfk|u%8Bp%YP44Zq z#}uXCfrR(i6TP^s$ER=0b5ca_@?Zgu& z;kQdmjfIvdoq6Z!9RIO9r?|SgMuA|8UxB0RYFNqmHP)M$RdqSovRnK@4rmwYn-AqIBY-CY{ z-P&xPllg+*XED3Mi}5{lx6b9t+~s3qUp}o!YVaEcF6AuuX{>oq^imtt=>9p});2R6y4`Stgh*S4eshht zm8r}#Rzl@`hLTj5ht%1lt$q_9)!#W|J_Z^d3(89?i(zUiB&|5#-oF;JzmjUuH~hY< zdqJA^EUHm_StBr9W2LrI9VF)m{gi*K;qqOPG=w-dXk1CaXx`r1Z_DcJ^2+c7VF97r zcjB6|i>K~3T%2<{Aj>~l7hAXF%AJrov*}XgtuSXxPEK0BsJ?5N3e9Zbz~^S@7ia$5YWIEsr`?w0K97!+sWu`5BPKK^dT@$wK;>x%6u zw@Q1imE}D%Vz@sSwJyEx{_4uzB*%wyU1js?i{gGlhF1DwDvNsvW?#~8sx5pT3&+|x zk~;U}%W?~Em%Paf@aezP+tok+`qP-zj%7yA^A~N(FD^beK4y9|#qK`-Q-}NgQ2X0` zKA*p+PA^CGh;&us);P-M^q?Bomi1SnM6+(J+Cs1ykpymM?90s~Zw1=hyOGhj&QuBP z<3l?pZyO#kWIQ!vHfR>xH8WrEztdg?zinEn_S|L{R100Z-LxfQnm>L?m9`ez!`R!y zU(zPzZ$ZE>ejQkRN|+C94^R07RxorkyB8XFerg09nQ((bT}h8O%ZM)R0Jpr3wussi z-ZAntph!2~xFkj3hQ2r@^nSq<)9j_v#n_K$nRfX?6zjr2EgEs~@#&UhqQsIsf9zu5 z((K8Zs}87>r5MOP-I%UT3CbX;mSi}OyAT~Z3d)uKOUfiShVxkmTmqxLC(P)Tu;~@9 zHfnFqpIdC-#aP@x5A6|{%QbM5W(2$4;WOO_S0(A`39OY0ch8k~<6iWQO5Zzbq)}H= z_)v2`Lqen_-P;}0iTnVPJuHeOBL3QYzM|qyl-;wPf~F=y#VryoN;+raI!MRqeU}q6 zrv#`)q86c!A{ntCoF8OEUzI;>eG;v5c5z&+nkbc4@%ZR!Vj|Dy51eBbsRweJQ!a3I zMp3L}6>#>;N`ubn4=GuxeHNqYRfij)ho?k9R6@Bt^RaMXU*md~Z`(9N>Z?n&9ZRUOnYP6rN|CEe(J z#dB#X{#U#0{9Ndt_1qZgjmqKBL-f0va!TO?hX^yz1gvwT-MJ+KYgf@eS9z~F3UDV0 z)2$Yz+OC#84ZePB0T$&te$Hz$V$w>|Oi2gkZ9G6f%y%v@Dsssr<5fFZZmDAbo&{Uw zr*fqUqe`l$Xqesm#AceH!%D%8)d%<0FW6{5#HWL{T1Ouyz&&riyZ zD-pXO<00eFV6MNbz!gt_?ODJZ)V@47><(}1b__ccWAlBAzrUZ%a*{JbrAc zBD19mF4CM-A#t~EFsK)6?ey8l6xt0r>s&&@iqGiY^Fp2AJl0~ zvk80P0o)zbYb1Pwq)UJ1X&8GjJs~C!r_c>~6Cw7|e}ry7JCVU(i_ns=42c zOJsdg;mVszF*)0ZhUK+e1a_p+{X4gRRdaRL*1IWu;LOgQ`^VYNk1U&BdqR#q`m^JW zqk+?@eFx^w^wt&m?BddMXvb}No8`t9I5cZ;0GnG;w&Ypk$wC|nAB!;78 zuVS#Jy!4JV_2ICfc$3Wu$FB)G|MjjTE#vKh`WJRiwxqSPsV|+u7R_0F!_Q_}y^m+q z`}MUEn_v3~g9Xpag}%D@lxvGtaXWYu|Go@ifm>te_>MnxQ(vS%vi#tFAmqUb***Pl zwtO<|8`69uIeTDuu0eHfdQv$}B~EqWA)D~!#0{(~X9_>rV)2b&Ye{bkLzxei!X*+> z(!Z)9kljv80|msrt&gw{%S(~eJ9GNkT59S0Q2R-y$gID`fXqk*GrPK4e&Di$1w*>1 z;=G6m!_WQMj$1?d)yC@ayFPS})H>!x=vWos@o}Zen8uj-`M2KLen_`w>@t_C8s4N; z9_F#o*%20NtlKitUZj_JrLUe7X;~`iFUHhm$(Dy7;{jw9A1sA99Nw5$Bcc#q%tt z2HN#CJrzY?^5Q>pS}en0YK!JkxOaD30fT&{M$Z8{e0O2&9h++*rzr6cF8iyAofQ7t z!8Y%cd2Danwu)CByTu+LU)sU=v|o&+aqET^7+=5n^$bX@6jIy1x@?0vBp31^ZA7hD zqVJEw8e{|tk1BrOn=g1nPfDmMw4T$fE8Fsqih+0{xNGZ6P}HSI&zlF<)@I#>?_&Zl z!nVSeR!rF*N3rlxczDV!om7dS%i;hqQ>;W^kW zKZ~7BHWHBz9IF_a6`MHIvZ*a5`LCC1j8NM{r6nDYZo0WQST$H2eIe)6#JZ?+(;PEC>HoP(7+X^(# zzFVwa8=CjHwLBJ@By^rD1AhJ!a#N^Ji2gH1Rh&dVW7FoWkb{-uw_k>&9O*a-h5B!v zqjHJ7f|_=7!F+>jWptECHlU7OAN___Vyfh}ZSUKJJ2}voI-wlE(Sa@;A}rg@%L7JgkO*DMTE^M$r^u>ZwC=qZs-#Nml-5)&&2P1S}Dvp$<}Gs{jC0 z5(^JzQ$1*2Dr_8N16KujUKhh5;0+blNgTx1)EulsXOh5Z7#fCv>ai(4D2O@;ti~jg zRV;P&ze50TIEWjI<*5RP`}+FAd=+4HrYjtY#bV(I6dZ+u0vb>+KN<_qhSI$DtwVgn z&?R{hm=sSIg-!#nW8z)t-Ygsh0*r%y#7FfsHT@f&=JlNgfDbqu?+Hi35O69L{6 zPVin2&qx;sS@*9(q!TDam5oOiG@3-l;PFre1OW|26EPSlo}@s6qOn*c3W+3>5DM6z zpp0lR>mTMn+pMo#p20Oj0=*4RU|9AC}X}s5eX{#bS4!K zOeckkcO}6+X|5YS)(Kb9GB?6OP%y+l5_1nciwqdxAcrY5Z}vX}))XqqiiKZi6RCtz zKq8Tf7!+0sqonvP?G3zRB&HWoiR+k11We%@?)tQ-0LcKv;@9gG0QixmiVl;6XVIC~ zbh-x)vJL@Wx7;Xiu-dmtF{F3_8h+~)|Gnm|NQ`f9-mOz_J@u%KfVC>qc7V34v08B9MR+YoxLY5~ZSu zI*353AP^Av_k`i=tNKUAYViNViQ0z3Pul=s_e}?EP2U3ux3Y{(^|nrMZr!;ZJ^y%w3W!RL zbhWH)>)$80>+;Z(y<=C27BV%{Pq?CYz{NOI3drM$of&O+=odxz zoj9;`VOnixyYr4sG!Dz_@NtP|o@k2IsjAHx zGcimR`aB?i($dz-<5REE#{fHxRBh1a80ilm&)O_rg{prIZ2pSmrOY(xQ$oMcmhhfagS`R!xS;W6o-cs?^=k;~GHx97cL(x<%T~XZ{18N^rdZ diff --git a/assets-cg/Sprites/fill_circ_4.png b/assets-cg/Sprites/fill_circ_4.png deleted file mode 100644 index 7e2bdb071271528e3d71e799b8f0edbea881a902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6541 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 diff --git a/assets-cg/example.png b/assets-cg/example.png deleted file mode 100644 index 8826800383eeae92dade9545feaeb68faf0720f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3816 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 eRZ5JQiUR=bBzf^!G-(0=0000 #include -#include "pixelshader.h" +#include "MyAzurShaders.h" bool screenshot = false; @@ -41,13 +42,25 @@ bool exitToOS = false; #define NOBIAS (1-BIAS) std::vector MyParticles; +std::vector MyStars; uint8_t texttodraw=1; +void Create_Starfield( void ) +{ + srand(rtc_ticks()); + + for(int i=0; i<100; i++) + { + Star *s = new Star( ); + MyStars.push_back( s ); + } +} + void Create_Explosion( void ) { - if(MyParticles.size()>=150) return; + if(MyParticles.size()>=300) return; srand(rtc_ticks()); @@ -76,6 +89,9 @@ static void update( float dt ) MyParticles.erase( MyParticles.begin() + i ); } } + + for(auto&s : MyStars) + s->Update( dt ); } @@ -118,7 +134,9 @@ int main(void) azrp_shader_image_p8_configure(); azrp_shader_image_p4_configure(); - //extern bopti_image_t img_plane; + + Create_Starfield(); + usb_interface_t const *interfaces[] = { &usb_ff_bulk, NULL }; usb_open(interfaces, GINT_CALL_NULL); @@ -155,12 +173,6 @@ int main(void) // all the stuff to be rendered should be put here azrp_clear( C_BLACK ); - azrp_pixel( 158, 11, 0xFFFF ); - azrp_pixel( 157, 12, 0xFFFF ); - azrp_pixel( 158, 12, 0xFFFF ); - azrp_pixel( 159, 12, 0xFFFF ); - azrp_pixel( 158, 13, 0xFFFF ); - #if(BIAS) if (texttodraw>=1) Azur_draw_text(1,01, " FPS = %.0f", (float) (1000000.0f / elapsedTime) ); if (texttodraw>=1) Azur_draw_text(1,11, "Parts = %d", MyParticles.size() ); @@ -182,6 +194,9 @@ int main(void) for(auto& p : MyParticles) p->Render(); + for(auto& s : MyStars) + s->Render(); + azrp_update(); } @@ -215,8 +230,12 @@ int main(void) while (exitToOS==false); + for(auto& p : MyParticles) delete(p); MyParticles.clear(); + for(auto& s : MyStars) delete(s); + MyStars.clear(); + prof_quit(); usb_close(); diff --git a/src/particles.cpp b/src/particles.cpp index e991abb..dd78a37 100644 --- a/src/particles.cpp +++ b/src/particles.cpp @@ -17,8 +17,8 @@ Particle::Particle( uint16_t lx, uint16_t ly ) x = libnum::num( lx ); y = libnum::num( ly ); - sx = ( (libnum::num( rand() % 11 )) - libnum::num( 5.0f ) ) / libnum::num( 4.0f ); - sy = ( (libnum::num( rand() % 11 )) - libnum::num( 5.0f ) ) / libnum::num( 4.0f ); + sx = (libnum::num( rand() % 11 - 5 )) / 4 ; + sy = (libnum::num( rand() % 11 - 5 )) / 4; age = libnum::num( rand() % 3 ); maxage = libnum::num( 20 + ( rand() % 20 ) ); @@ -39,7 +39,7 @@ void Particle::Update( float dt ) libnum::num a = libnum::num( dt / 12000.0f ); x += sx * a; y += sy * a; - age += libnum::num( dt / 10000.0f ); + age += libnum::num( dt / 12000.0f ); sx *= libnum::num( 0.90 ); sy *= libnum::num( 0.90 ); @@ -57,11 +57,11 @@ void Particle::Render( ) int color; - if ( age > libnum::num( 30 ) ) color = 0x526A; // Dark Purple Gray-ish - else if ( age > libnum::num( 25 ) ) color = 0x71D6; // Red Brown -ish - else if ( age > libnum::num( 20 ) ) color = 0xF80D; // Dark Red - else if ( age > libnum::num( 15 ) ) color = 0xFB80; // Red - else if ( age > libnum::num( 10 ) ) color = 0xFFE0; // Yellow + if ( age > 30 ) color = 0x526A; // Dark Purple Gray-ish + else if ( age > 25 ) color = 0x71D6; // Red Brown -ish + else if ( age > 20 ) color = 0xF80D; // Dark Red + else if ( age > 15 ) color = 0xFB80; // Red + else if ( age > 10 ) color = 0xFFE0; // Yellow else color = 0xFFFF; // White azrp_subimage_p8_dye( px-7, py-7, diff --git a/src/pixelshader.cpp b/src/pixelshader.cpp index b11b733..2f3292d 100644 --- a/src/pixelshader.cpp +++ b/src/pixelshader.cpp @@ -1,8 +1,10 @@ #include -#include "pixelshader.h" +#include "MyAzurShaders.h" + uint8_t AZRP_SHADER_PIXEL = -1; + __attribute__((constructor)) static void register_shader(void) { @@ -10,13 +12,15 @@ static void register_shader(void) AZRP_SHADER_PIXEL = azrp_register_shader(azrp_shader_pixel); } + void azrp_shader_pixel_configure(void) { azrp_set_uniforms(AZRP_SHADER_PIXEL, (void *)azrp_width); } + struct command { - uint16_t shader_id; + uint8_t shader_id; uint16_t x; uint16_t y; uint16_t color; @@ -27,15 +31,11 @@ void azrp_pixel(int x1, int y1, int color) { prof_enter(azrp_perf_cmdgen); - /* Find a rectangle containing the triangle */ - if(x1 >= azrp_width || x1 < 0 || y1 >= azrp_height || y1 < 0) { prof_leave(azrp_perf_cmdgen); return; } - /* TODO: Have a proper way to do optimized-division by azrp_frag_height - TODO: Also account for first-fragment offset */ int frag_first = y1 >> 4; int frag_count = 1; int first_offset = y1 & 15; @@ -50,6 +50,7 @@ void azrp_pixel(int x1, int y1, int color) prof_leave(azrp_perf_cmdgen); } + void azrp_shader_pixel( void *uniforms, void *command, void *fragment ) { struct command *cmd = (struct command *) command; diff --git a/src/pixelshader.h b/src/pixelshader.h deleted file mode 100644 index 435b50c..0000000 --- a/src/pixelshader.h +++ /dev/null @@ -1,3 +0,0 @@ - - -void azrp_pixel(int x1, int y1, int color); \ No newline at end of file diff --git a/src/starfield.cpp b/src/starfield.cpp new file mode 100644 index 0000000..c29725e --- /dev/null +++ b/src/starfield.cpp @@ -0,0 +1,79 @@ +#include "starfield.h" + +#include +#include + +#include +#include + +#include + +#include "MyAzurShaders.h" + + + +Star::Star( void ) +{ + x = rand() % 396; + y = libnum::num( rand() % 224 ); + + size = 1 + ( rand() % 4 ); + + sy = libnum::num( size ); + + color = 0xFFFF; +} + +Star::~Star() +{ + + +} + +void Star::Update( float dt ) +{ + libnum::num a = libnum::num( dt / 12000.0f ); + y += sy * a; + + if (y > 224) + { + x = rand() % 396; + y = 0; + } +} + +void Star::Render( ) +{ + if (size==1) + { + azrp_pixel( x, (int) y, color ); + } + else if (size==2) + { + azrp_pixel( x-1, (int) y-1, color ); + azrp_pixel( x-1, (int) y, color ); + azrp_pixel( x, (int) y-1, color ); + azrp_pixel( x, (int) y, color ); + } + else if (size==3) + { + azrp_pixel( x, (int) y-1, color ); + azrp_pixel( x-1, (int) y, color ); + azrp_pixel( x, (int) y, color ); + azrp_pixel( x+1, (int) y, color ); + azrp_pixel( x, (int) y+1, color ); + } + else if (size==4) + { + azrp_pixel( x-1, (int) y-1, color ); + azrp_pixel( x-1, (int) y, color ); + azrp_pixel( x-1, (int) y+1, color ); + azrp_pixel( x, (int) y-1, color ); + azrp_pixel( x, (int) y, color ); + azrp_pixel( x, (int) y+1, color ); + azrp_pixel( x+1, (int) y-1, color ); + azrp_pixel( x+1, (int) y, color ); + azrp_pixel( x+1, (int) y+1, color ); + } +} + diff --git a/src/starfield.h b/src/starfield.h new file mode 100644 index 0000000..3e5abae --- /dev/null +++ b/src/starfield.h @@ -0,0 +1,22 @@ +#ifndef STARS_H +#define STARS_H + +#include +#include + +class Star +{ + public: + Star(); + ~Star(); + void Update( float dt ); + void Render(); + + uint16_t x; + libnum::num y; + libnum::num sy; + uint8_t size; + uint16_t color; +}; + +#endif //STARS_H \ No newline at end of file