From bbb3b8f8a34ccffb23f2a0b5267c21f8dc1d26d9 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sun, 27 Apr 2025 05:20:30 -0500 Subject: [PATCH] 20kdm2: add flame animation --- bsp/20kdm2/texture.inc | 78 +- bsp/20kdm2/textures.txt | 12 +- bsp/20kdm2/textures/sfx/flame1.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame1.data.h | 15 + bsp/20kdm2/textures/sfx/flame2.data | Bin 65536 -> 65536 bytes bsp/20kdm2/textures/sfx/flame3.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame3.data.h | 15 + bsp/20kdm2/textures/sfx/flame4.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame4.data.h | 15 + bsp/20kdm2/textures/sfx/flame5.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame5.data.h | 15 + bsp/20kdm2/textures/sfx/flame6.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame6.data.h | 15 + bsp/20kdm2/textures/sfx/flame7.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame7.data.h | 15 + bsp/20kdm2/textures/sfx/flame8.data | Bin 0 -> 65536 bytes bsp/20kdm2/textures/sfx/flame8.data.h | 15 + bsp/baseq3/textures/sfx/flame1.data | Bin 174768 -> 0 bytes bsp/baseq3/textures/sfx/flame1.data.h | 15 - bsp/baseq3/textures/sfx/flame1.jpg | Bin 14770 -> 0 bytes bsp/data_gen.sh | 5 +- example/bsp/20kdm2.cpp | 157 +++- example/bsp/bsp.mk | 8 + example/modifier_volume_cube_aa.cpp | 1129 +++++++++++++++++++++++++ q3bsp/debug.c | 10 +- 25 files changed, 1474 insertions(+), 45 deletions(-) create mode 100644 bsp/20kdm2/textures/sfx/flame1.data create mode 100644 bsp/20kdm2/textures/sfx/flame1.data.h create mode 100644 bsp/20kdm2/textures/sfx/flame3.data create mode 100644 bsp/20kdm2/textures/sfx/flame3.data.h create mode 100644 bsp/20kdm2/textures/sfx/flame4.data create mode 100644 bsp/20kdm2/textures/sfx/flame4.data.h create mode 100644 bsp/20kdm2/textures/sfx/flame5.data create mode 100644 bsp/20kdm2/textures/sfx/flame5.data.h create mode 100644 bsp/20kdm2/textures/sfx/flame6.data create mode 100644 bsp/20kdm2/textures/sfx/flame6.data.h create mode 100644 bsp/20kdm2/textures/sfx/flame7.data create mode 100644 bsp/20kdm2/textures/sfx/flame7.data.h create mode 100644 bsp/20kdm2/textures/sfx/flame8.data create mode 100644 bsp/20kdm2/textures/sfx/flame8.data.h delete mode 100644 bsp/baseq3/textures/sfx/flame1.data delete mode 100644 bsp/baseq3/textures/sfx/flame1.data.h delete mode 100644 bsp/baseq3/textures/sfx/flame1.jpg create mode 100644 example/modifier_volume_cube_aa.cpp diff --git a/bsp/20kdm2/texture.inc b/bsp/20kdm2/texture.inc index 31f4a1c..de25435 100644 --- a/bsp/20kdm2/texture.inc +++ b/bsp/20kdm2/texture.inc @@ -191,17 +191,17 @@ .v_mul = 0, // 0 }, { - .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame2_data_start, - .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame2_data_size, + .start = (void *)0, + .size = (uint32_t)0, .offset = 1876992, - .width = 128, - .height = 256, - .v_mul = 1.0, // 256 + .width = 0, + .height = 0, + .v_mul = 0, // 0 }, { .start = (void *)&_binary_bsp_20kdm2_models_mapobjects_gratelamp_gratetorch2_data_start, .size = (uint32_t)&_binary_bsp_20kdm2_models_mapobjects_gratelamp_gratetorch2_data_size, - .offset = 1942528, + .offset = 1876992, .width = 32, .height = 64, .v_mul = 1.0, // 64 @@ -209,8 +209,72 @@ { .start = (void *)&_binary_bsp_20kdm2_models_mapobjects_gratelamp_gratetorch2b_data_start, .size = (uint32_t)&_binary_bsp_20kdm2_models_mapobjects_gratelamp_gratetorch2b_data_size, - .offset = 1946624, + .offset = 1881088, .width = 32, .height = 64, .v_mul = 1.0, // 64 }, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame1_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame1_data_size, + .offset = 1885184, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame2_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame2_data_size, + .offset = 1950720, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame3_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame3_data_size, + .offset = 2016256, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame4_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame4_data_size, + .offset = 2081792, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame5_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame5_data_size, + .offset = 2147328, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame6_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame6_data_size, + .offset = 2212864, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame7_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame7_data_size, + .offset = 2278400, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, +{ + .start = (void *)&_binary_bsp_20kdm2_textures_sfx_flame8_data_start, + .size = (uint32_t)&_binary_bsp_20kdm2_textures_sfx_flame8_data_size, + .offset = 2343936, + .width = 128, + .height = 256, + .v_mul = 1.0, // 256 +}, diff --git a/bsp/20kdm2/textures.txt b/bsp/20kdm2/textures.txt index de84c63..bdbe8e3 100644 --- a/bsp/20kdm2/textures.txt +++ b/bsp/20kdm2/textures.txt @@ -21,7 +21,15 @@ textures/stone/pjrock1 textures/skies/tim_hell textures/common/hint models/mapobjects/timlamp/timlamp -textures/sfx/flame1side -textures/sfx/flame2 +flame1side +flame2 models/mapobjects/gratelamp/gratetorch2 models/mapobjects/gratelamp/gratetorch2b +textures/sfx/flame1 +textures/sfx/flame2 +textures/sfx/flame3 +textures/sfx/flame4 +textures/sfx/flame5 +textures/sfx/flame6 +textures/sfx/flame7 +textures/sfx/flame8 diff --git a/bsp/20kdm2/textures/sfx/flame1.data b/bsp/20kdm2/textures/sfx/flame1.data new file mode 100644 index 0000000000000000000000000000000000000000..c70846830d3eda083ae3d263f260cb0bd4bc29fd GIT binary patch literal 65536 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 + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame1_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame1_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame1_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame1_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame1_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame1_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/20kdm2/textures/sfx/flame2.data b/bsp/20kdm2/textures/sfx/flame2.data index 24343bf03b8e35cc6c00b4013d0958c1b0837cd7..b7e97d6135f4a3215f38d164306ebb9068d71672 100644 GIT binary patch literal 65536 zcmeI5%XiyGp6@~VC8y7v5*PG7EEexdSNMxn$-p#9g=oK|j)D z&n8@Q1B$erY4P3_m()3wMB47@*3!$KLp_|>x${Td&$mEGvh3WXA9s2t0qX!L6birk z)wdof{OXIMWhK7^fdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjB zfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqjBfdqlS z4FdM8)qTWK{&Ci22WK*@l%_w0dub<4yjlDw$H!C6;uMj^$hr!OY)iI{ z)UvskqB#JGy=x^VsKH zMiwzlNF+CoZ_omPsa%fopUhtj!TXM;ER5z+y_%v;PJZ|o*Ga`a!a2UpzT~Pj?5gd8 zy1!_FKTFS4>>Av58ClUW#>e?Dmp% z*-g7nxZ<-}IV-1oww%xjm$oP|$)$v*KbxXD^^5Wx1xoKI&uC_JWA7k?P=#OCp7hi1 zV(3g(?7W@x^3~#YkyxaoTA_XDR6W;g7k&1wH!RLoj^vu!Yb0HA($uDDO;sK&@bMNY zed?I}q|Z-#ixzFui_@;T0#<1^?|VV8ULO|s*0$^Gb;51rsV2&$+eIf|2vQZHxwp1o zlxFgS#AR}04{r}wv=L5Dkb6{Ll~dXtnz1Rr%J=NV#0^cIr<@ik2VK2nv?FbobAM5J zkbbr_q)c6d31#Y-Hi0aMdTL}!ZtRe6M=eI^9%~|B?2KIBNN>Axq&>At#ADUXXWk zPM(_TP_}v1Ri6^JsdpB-2q$p8J;7}i!=jF1aR~m389DiVHc2MLncTK=A!V!brF?8* zYxJi^+l%(1ix$f3U?sVAdn!CAdn!CAdn!CAdn!CAdn!CAdn!CAdn!CAdn!CAdn!CAdn!C zAdn!CAdn!CAdn!CAdn!CAdn!CAdn#N(?lR*+lVD&SU+&<(!(Xkh9~o5f3w{C9{!i% z@ra=#h7W8e3l5E!-(Pb*-&+or1M#Oq$AZ(7$=inGGF;2lGxc!IEm{@7D8>(*sI=#` z*I>ikj`f2rvq*||DwwM~#p+rr7=96cG5o?`nf!N{Gmhw8|8_N&y7D$~wr;H0PUJ^(~I6W~Pz}9Q5$OS#@Bm zz8>t=_v$c8D{V@oO34hVAMJWbIXI@gLu!oeIi62BSQV>m!YdxJDMe&h#2Xf^G7^LR zuU0#IU#+%A8;7{7{r&oCYrj6bGb!eYo~LzceZzLaI=5d+38&A9ddrNf6zJDxYkW z3tB;I2gjZm2OVlpFj=#ZJ>POFTXmcIGX%SkoKPCYnPwYgs^mra4U3r|qk6OEPzQ&! z64y(W;oE|xRjz_(yW(=JmL0-8d}>LcR2C1{Di4e8U_aOn_UrpWwXzkoNpZd@X|-0j z(}uBYl`YDLmbhk@RgaZ}8hN`)K9uijuoZ|`yazsZ8OgLy)fMrJRX66!oUw^_?Bwhm z^#Il{SA;*cN;P?MTeTT|v_<0pjm{#D^yzN!XuJXA7$&*KBt+rc2*wiPPXE~7_l!^M zxV@=O7!E&rM4WAnb8Ohqw7H?PRh$Qps)rWly8s`SJ@tPn*5@c6$NEI$AqGs+GafgY zagub2#GyCjn23CADdrmaMNNNXwo$Zr)#d&an^2p~vBpcpQ4{`|&BgFXpkFzts0WsXzBHVX0qyJdH;j{+D7N+301V ze|P@uw9NOVeLBw3`Ly0ew*N>z*KE!Gm?L{ash`m`?UP@EK!QMmK!QMoz)@eysr>Kz zoeVee?c@D%-x|-vnrlYZ`+V<{e;oF{^xr4tFAqCTEAa_|(@361<@EKx_WXzB|Iqcn zGJTB&B4?Q+>!fO}RI_TR%Q~XRcxcR^m~g)pj?XdY3d2vB_BMBFi(QqKJ$;7mDBTmODrLvWaERsG zp;m|`M4OABz1iHOJQ#_RW8zCL{-eFCRap&hTgRzCMn&PmMfo_oM{z9pBMLF$vA!lm zxr^mTe&24VrDr=GrbCX$*CT(Nu4^<$Vx$H7+lJo}heucJV;zll(Ks;D39TsGC{=c}Ncl-CLAzvN%~hmaX(9 zRdUhZFo>c&#Nj%cE7NQEg_`OWY0K}Bs^q5rn~teprGBM24&f%}#PZWV;X_s=b!z+lE0zT3pXAbE(HgSw!aUE7O z1qnj6*DrIVZ=^N*_}wJ#SEBrw_XZOu4v&wzjwA~{5ptEPQX$RgXu=8Ay^czOYcQ!y ziEwR-)`?>*H$I+@5r;>|=&Izz8op0vEFK}dDzz@k$=%su94{L_2TM>+BhZ*$_by~$Flq`Pf2w6mSceBs;Hsnm~j zI}W#x!<367eGt#j#5;kxLzv2*gVy^+AA72uauuIPq0&2cu)nmulu^0CH+5m; z!825uXSec_5Xlgd@FL+j9#)>U+^nDbsQY0rRkq9f@Q=O9L2$n{YCUeA?|#{P(f_RX zW$#V@&0yU6taq+^tNW;bvv;+3mTO=4e?NFJc+{7>*Y{a#7f5 zReWtY#nSvtX&&yqm1SQn1P5O^aF*|Px*J0{z=xefSj-2VQK#0rLJD{LS9<4g+pSDv z)LCxq)$Q_X%Pzyg4#e-Az~fBSLKxYwonhRo{7#gxdRWuP9)-W%-s0Xt?aj0}hw^Z6 zl$`069n-66uW*H)l0WU)6>i*V`BS;Ed~Rly+oa3ry@2bzIUskBuPZ>S2Y~k1MdcPNTHJz7X~e>OY`jk^54cb?nRHW{eN5+jz+Jy_fd}G{q$NCm-umb zd_1mEZ%a9S7T1f@;U~^b8dJHp>K9D@T&`aZ!sxO;5ECj zkFA{eybf!%Q=(|0Eh<~}Mf=75qWY_u@^Xa>JX3snCSuViDXmVhQ@65w&k;G1KgHR{83IuP)3N5;yx#M^6Uy*5nx3 zLV%z0udiUFlS5ujC`hXAI;y|?ly{$z$#6-vZE`zfzCW*?fo5u5Z^}81h!hD)|)$R=ri8Q0_bR zPMt58f?5#prPIFR!gU`Ot9&V9m)x>+mGc?#Nn7DEbcT*Y{-}jHhGw%j^R)R^ zBq%gHEk95Hfn<30^aw7fSlOYI;z^T%^S@R1sgFLPq4?XKC(|r6o$?U9 zI(*@C$oD!|dfnE|zMhjec!I6Bsz|xYmpdK4f?4kbdNVF*J=V89hdlT6>x` zmDQHMDmvU)M@E$=p+_=f*+)mDav#?tn{+&GI=ZeDEo0wx zlpf*iH3umZB|llxLPxQTAG@Xr!IqUVt4GY`EY>0-qOp5A9Ca_2&ouKw#-?v0VH#>; z$ySFfZ69&G6O)*#vWEGxgHJF>N z4(sP=)tHb~9ohl2iIRq-IaY7U2uU~U(3K~805Vc*S^J=WSe>{QF` z%H96i?mOwna!u-vJ-u#ffz9kawe50<^%jdMcG)Q1;SzHkOYQtTw%2W}iCFwtOJ}<- zTP|ylet@OqG8 z?Vht(5+C7z&h{Fc+r!?y-V^5O9%2z?T_3ETqt^M}N6Ztx8Jz20?LO*V+x&h1AIBeW ze%=43bEWa!==Xy&jZFDmw;lZJ;9my+qxa?Du(Mb1bll3d@wLr|%q`yQy}}~d!8)30 zp6woDD?Pv#c(!+|e;ylTs&O5Qb{JH_W)9nHr-O|+7;;{11sxCTz_ zGI&THUXL!0ZLGYbjZw$Py4=Ce`g-(`@O#)@mBM;Uw#+-^EYvTFkTcG!01wef0$dq&qOkuG|7TIYJp zScP{wh33P--M-bB1jNP8e5Lnn@Ble?aZmay*oB`BZuB1apA8neSFp^2gR#lp#e(|n zXm$`PqxsP!Vu;|W?pL6d=o1kgb8^Fs4M-MP`|9HO z=|JvE@1T?2#TtxFIEx)PJ^psEf`#|v@x{&0cR$BA{Jj4;He%+3yAP-zPy5%#_n3Qr z+W&U&30E&D{_ce_v(nw2)iL+ZW$)$UUe*lArGzaG5768h41W9aQxKiq91k9Yc4LmT`h-#EA+r!!YLeR2Q?8urFLTFy(+}VhFmHp-{q*kZKL)KZ zxYFON)01CPA8iIV^zkmUXFQM8@2bD&XHPfz-~H)%=`t&5o(S~P!xcMSV0M(=es(J5 z-JAXsg|xjP%oyg|G!x9mGuLrhEzeSp^c>XB;4oEM&nLNQxZ)3s%+wLz<>{2-Svy%{ zt_%d&qUU6MM}+A~2~(lTAwl5pgh08v0skqwwVz`njs~4a>u}xdcQF}2VZ-@S!G9D%C^H1#a6+1_JzwE&BgISTAt5~eb zW?hC&5WRn#Xuq~}kMtKFvwo3rB-@@7#n(!7lQqJ)S2Etoug1&8YZXcb(N##j#*TRo=cj8mA$5)Va&Mhjwv*wm0frC-(K`7Ax9Lij2PcdZQCtMWd`?J!Iu!hmjKR+N^syf-|+nJ7ua7 zGD;M`%7*djl>N#cAd%U;qGkU$= zn5kWF>;+zVKd?&e$_yOOy@*24{1DHJ4G6Ph(IS1i`-xJG9k@*% zQZ@9g%{1m4sT#F|y4VIi@S~R0nzFHIoneK|@E)c#LNFdymK#HAf$r%x$6$BA`KOc$(&nAMT$lX_81>?tqOaKYTO!EUv4jdgblP^=7KJ4@y>M z;<>r&C95#ZXV|C6lU?x3tBpI2{mOpD2knU$=2KjscoVOk9|bU@OJ|XC2r?7LLAsO6 zl+QHaqEUBjtU^{v?7Mblq0uJf47J0ijj;N1)HZ2Hp(#DJSF1Ev8d7sZT4x(f#0(T? zF_Tjc9L}q7<|fX>spkD$75kF7z%IUFyuNDOSJHP@VdxH*;QmrW>}=K8!E8naVs+B@ zUG}&ioniLb^uluTyTqMF-cr%Ub&3S6(_2wS@!uf{UkNO>2 z5_r0K)%NY6fIZI1r%J4Lj{Nz?9b%rT-Dn1+d8T1g|965dZ;Mr|DeEQlKC;J7V3ATc zc{LG3J9C`)ps0Trz zjO}*O&r=W4#Lx32q2v#OE%lJppeh)^xaIo+f06b{+H>$ml@>^pw!E2AC)o4mOHOu< z+JFX^K~;KQ9<^#P7CTr-+{$uutG?68U^ytzH#@K*_v(|i5Ju;EK#$D-0eJM97OV9; zTwOQMz7(8GJsFp=+{w;IOA6HgVn?M+XN=9TgN=x1Y-1fuL;>65Ok zJ<3B*fLilhcL7G}EBKn&Xt7A~L?jQjW`=fCqyEe_=BYu;rA}GpeHfgr*|d7uH`NDs z;HMT~r(U71`#c+J;N>vBx!Zeyh46`S-(n}a%Nf>Ow0n&W_FnHfR?qbK+W5sl7Q8gp zuh~tW#=UD;2A>e?Cblr_UF7!`Jknd(I17wyT$s5v<^b%H;_B&r4_w%z?`l)^xdtkF z<}LKDW4oO1)dt!VQ*d2?;Fa5^4aKigO+TkUc;_YcRE`Ym3OMf{7XyYCA(H=+{Kz$W3;3(&wcpGt887$KzV@2yZH&$ z;PkjiinE(hnrTwKKt47=p)~&O?&oYh{E9uh`7vi7k3UC`ZwIoWf-vYl8K^FIXuq=l zi~B1rWzYSD5_>dwF%s*VHm>%_d_~CkS{6Ss(2dW`Z!r|N=_JfP4iA@jQt`ZZjCD|Z zJG#rvn<=ioh;!tjSFts7XZFO5oh*w{Z2G0hZ`%tcm!8d~FQ#Yb7-@k<^rOUq|4(1d zdxn#3)B8>6#dSqaF-;t$iM+^93i^>kl!o*~&h)x#LZw|4=5TJ}PW6p!06w#R(q5Zf z4Ba zoT;35VobEEyv7AQ$tQWQ>=GkozIQOs zx8MQes9O0dPy6}C4V-F%uyLXy`Qf2{>Y`bc7Yd|Uc)`1f6ptdht2p4R8Iywlfz?&mSC@$ocXQMmSz zJAM81d5ovR^*eq2WVo)zQgzhX>G*NF@$vNa_np5#)sr#f`VwoK91{c*1QG;(eh9?< zYJ5D|OUkeC1y{D*Pq9m4 zr+oRz?o)WCPq1FU7<|q46x%GZut7hBS-Q>qy!H#dKf;K_l8Ys?w0m)U5qs>--a>b~ zC3#oig~FPJ@p`i-Tl5`Rr_Zs9zb2&z*pnZ?*S)a$5PQDd3*^5U+#yW%|JN{KA7SnN z0Qc$m)7>|me=vSC`eZD35&N^Tq+(gEj~nc>aA#%D-bJ6^vX!v1mUdqc4m#E5h4GDE z8xH6KY~c%7XP+CJFlbzsCXl*u6^<(6Sf9WEQh|teJ)^9N}wNy&o`dpxKER{oczL*w!hHJ~&bWrQLhXEnLJBFFx@L zV!XjdUV_ss{xi0HIJ_4(#pC^eoP7?K;_hC=(k-rm%HU(lC9-Q{^QZhj0mILCKi$>p zSPuQ{C4z9uiSc|uz87yW8VZpApuD9%pU%cKq(+ZgH3Coi}cFs9w*I}lJJrC1BZ1h8B zd!7#VSWDzNI%y6_tBYv85zR_zHIg}Ok<5RArEHY7&akfkuXYHTh;LA-bw(Sb4XwH( zOXsb=)-D+`L#A&BR-5MyFZ$QLaSN73zY7cHRp(J3eg*j+!DV>_$Gz4fk4SlpuN|y1 zM|TeHv-lzF!B%kx4X#oLYRyOeRpt{u+5KQwoaGUz%)@fHMQE+L&gwH-qlm9iSOu)g zY#uYFxZw)g!isRQrW`&(aEB(4t&7Udw%pO}0Ty3GSP;d!fXVoIzk405BRqb*1JNDHRA@5w%yU(4* zPGzBBXPC)_Phl~O5lNcv#i5Msyyk9ODMh2?_+2PU|9eKswy~(O|9;26w-5OqNgN}U z8STScE^on#3}N8Fcqk6_595yJsfQ~rOiyOfnMa2s!v8Xh3lZc&GCiMb6AA+~);2=q zl7s$^!uUFfEiLWI1^FN@SKG{aJIt?IWrr;Vzr$xeGge~a3n`cXDPQMnsY0-~HWUW~ zedhSuDTR)c73Th7qJ-!mK0uYYn*HBf@mXtXh{i5@SG_&B*jwa`)WpZUw7+Jv3Sj6^ zcEU1x?~KtCO7fpT%f_!wy0Y0Pu0?mBh) zmkRj!FK^b(n%s84+Gs18mQOz1w9(0&Yt=fK_Lozvsl_^VX~fPV)go^uA1+$j(HogU z-}%kKNGk+RZkjvz>+lH-x|EYJit`uW8J|aQcb16@TT5|G{JgW&E>bg;{@Zoc=zAnD zk`qh)yB%j(VX^J0cAzi06%#sRY74ljgkvY|qdXsnpmi$iq~X^bAw_*OHG3NO@0PD5 z;RJyng+Sa!<32(y{?GYWkZC_~lvXU~C?N492qXynr$rzh@5IOW=@uW4M*wliUw;%B zaX<0rNIQ973}|%!vAj4uIVK1s2qXw32qXw32qXw32qXw32qXw32qXw32pl2se*uR% BJ;(q6 literal 65536 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 diff --git a/bsp/20kdm2/textures/sfx/flame3.data b/bsp/20kdm2/textures/sfx/flame3.data new file mode 100644 index 0000000000000000000000000000000000000000..bee0b4ff444308d58632cb5bc83c26ced51c7e64 GIT binary patch literal 65536 zcmeI5zjxb6mhVB?ZritA}+U`AP-`}vGTOdSPmbdMmU;TC=9H0t?s#~|d zb*lj0`U29lyyt5(i29K&CY6-~kffdqjBfxij@(L5)!-n%oR zRB(3cSyi8vQ>4bvHSruwnmqj&v#L&&Ls!o~#;iWe9zF5I&pz?<5BWkv%a?4|PUZcq zYcCe(3NjZP*>o{ov~s?|jDKZp7#Ss(^66q|r1E2fdHITyk*gZBxuG)?&yqG9u7;~x z(YBqOo;7Xaq>HwbXR}Mp*Rxj6%19bQVttjaq{Zj7P*>WL|3!B!8skFV!~2<3not_&kxlC<_4#o;~8~k}yFa zK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdOK_EdO zK_EdOLEwK30>a0LcHydAN$Vfb@`%F`b1zO8fEfb|1?CE&@KNA9rZdQm;=RBr{`qHPgZ@@>* zN}pTVDAY5WUdtJhrWi~<94rk!mSU?KWB63$5atT9MHdHdR=BF-!fm?3dCr1+rDruX z;5g;Th$V=9QP!d?%&3fx?N}LMQtjsYhLvs69(2(yT1TDaa|{bDquPC#Up08M7T07a zM-GV*2Tj;mBLCE%U|{PlTC5d(WAvr4#>h82GK`|1H4Ed_@#l1t#s{ShT9P^u+Z<$3cW;tdQW;u?`m7FmL z88Wv|<{yKZ1v07ZI%&+C%&O|d&eWK#baLvd|g!H^OX)j-rC>n#}st<76bAy0hb4%H$fet&YZ_VF(hOrOXlaT1X1f&yiUBH zT11Lwrt>D7kuT-#e5=qe8m3cd6u-ou zC&Nx{Mn<^O)XyfpG!aF)qt| zC3BJDeM>2+U*)78X*aC}fk@L@rk}O2>~U^PYM50yRok?9=Gh1Xc~XwAozP{f z)ybID6k@3∓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 literal 0 HcmV?d00001 diff --git a/bsp/20kdm2/textures/sfx/flame3.data.h b/bsp/20kdm2/textures/sfx/flame3.data.h new file mode 100644 index 0000000..75c2be7 --- /dev/null +++ b/bsp/20kdm2/textures/sfx/flame3.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame3_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame3_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame3_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame3_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame3_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame3_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/20kdm2/textures/sfx/flame4.data b/bsp/20kdm2/textures/sfx/flame4.data new file mode 100644 index 0000000000000000000000000000000000000000..fb4cadf3a7db8620d611162e9d44087144d0e4be GIT binary patch literal 65536 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 r)i1**W1F50Yk literal 0 HcmV?d00001 diff --git a/bsp/20kdm2/textures/sfx/flame4.data.h b/bsp/20kdm2/textures/sfx/flame4.data.h new file mode 100644 index 0000000..e0582f0 --- /dev/null +++ b/bsp/20kdm2/textures/sfx/flame4.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame4_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame4_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame4_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame4_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame4_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame4_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/20kdm2/textures/sfx/flame5.data b/bsp/20kdm2/textures/sfx/flame5.data new file mode 100644 index 0000000000000000000000000000000000000000..a2326a5634a886f32503a88a5cb00409211d144f GIT binary patch literal 65536 zcmeHwOLN;uwk9aaF1aV>j+a`3dbs7DxYP1Z-T{>C61yYjHhafj0hA>V*%1?C?gq0V zAzM{V&PrIK7a&2~6(!6LODcj-yCQCDcJ5tQkfQwP8&mf;%=aY#lA`Uleam&Lx(dob zB9V`iC%-(INS-`MNmBe5BM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7H zBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7HBM>7H zBM>7HBM>7HBM>9-@eoiKB`LY63;*L$jVb+21c0`@C|^~tA{WBaqPkR;<*WMAR4K;K z{w*T+Rb24ptI}14`9VitQm&Te@{+bhYRXkPD2sf`l8ju)%Q7KF)GR`>B+t^9bmZkF z@}h*s@}e$LKBVwkvF{>+bxqe7JcD<^f7G7fKArEo;3cLRBM>9-V?rR94ZqF25zRmW zD&L+SXS?^|C&(jemnZo-r_YuTVm`nR=GKtXJIXQFbk1;I{xQkOPpK_YZ@<0GL4QZ- zQU2L`l>X-Xl)MUQ<#Rw+_|x(frq9wBGB=ekS|c!DFoIqy@peiP9U;3|rAxo{UN&o-0SJ zAkk8^ZAp{Ma!J;faLEosva{~2m*f&Jga;eE-naR2z8HZRff#`pff#`pff#`pfu9@# z!FpXZn``J`CH>wgu*94G-W2<$xYx@fm*C^|lsCm-#gAxS!C$a$o;*kKKh%4qM~?Ul z_(Bj(l<(ciI*pZfV+;WLhF9qJ$ij z4bn*=pc2sim}q~1R#aYMYj8!5VYW7MVLb971@UZ2=tS9wd(j%CPyPZfgf*`YTMT`v zwqBMcKEuja2PUur7WNyUJmEOPWkTm~hEP`Yji32>- zF+%W>+7#djnVpvHk3<_};{Nz}SjLoM1b(Op1nu8Eujgj(y;4e7>UBY{i0k-V9_ zDcz87$|x<5xzf1GLu<(a<4HN97f>W^UZE{5)^ia$$RF4v2Yp03z)rL*q(UykJXirT zEMFy^z>&k&dI?Vf_btJHYhwUM&cW+VMP-;5!^%xnC3obM91$1N6i#5GEio_Y$~UB& zf<7@M|8Vrj^7j1)f^jg*2jwpu_iUGtN92icoX!4@=Qod$cNF?jCkuQ9sv?Bnd$b=H zk__3Ou`eh7v@S0p1@Z%V12&?Za#audhEKtt=uh$c5&frxav9ac{$s2dVW2}fE`@SQ z*^I_S7%RpI<(H!)lw&bogsg)$=*S$epeP*T#rPsk)&W^x*Tmcrj6sB%`+eqr(H`*1 zc`|BS*u-yt6S$Bv&0uz1h+gtsy^szx*tVd8BYmo!3@ofDQ z&L-t%^Tf|YU{<#dyr4rDj(6g$T+B00XRa_kyhr;I3imw3{z?!NYVJf7Zt0Y`n=#+6vkVnMB zrX{>H6kM?XpbPk!_^fNng$M~=$CQIQIKtqV8!3Swr382Q!8i=>s85{77+A2-5-oW% zDj|o|L#k0-Q~W9+$K-nAIL2u`BT_+~wlOMf+h`|4OSehRAjG^#qbRgxjCH(^V7Q=o)Y+Fu4XRa5xN;1b^gvBg@z&kngR zZM1d3hEYKW7vQbx|; zo*5v9zLW`^oNaBia1JVbVh0pCIuv0o2ENe_@(oOtl3vS8X(h`rv1U73z?c}c#96AP z^&x1ly=|9G z1%0T2QztK@Ct1^+)vjo!X4cG-sTd0STrmgtR6MmR!=s#=C=TucGtgf)*p8ZB*VRle ztActelSn6uvY}-)y%G?t6Y#iWr0!fY4NMmrT< z6Rk=bbH$cI85rykN2Voo#l*_1|I2lUe6|q!@QEwvO~~e-vQUmS^mJl*hLE=69J994t@vs z26@#`iV~b+=*C&4Y^p`QD8s46L_scUMj7a_|A?WAC-P7;9mEbR;k+7*d(O8P=1Xm2 zPdOFOc>&`*bU`?X3&Qe}9L=wsKRK6RUR6XX&XS6(z%H9U9OC6MEk3=)@jWz^hC0Si zQ(>8Z%DTJ`UxqK}PnBb>%tHQxJ9sEzJd+oWXW*SFXA_0Co-$0MQ^Dxn?C58C_R$di zZJN5#u0R$|r_wr7?E!kBY@Su-sw>u(y=)DSmMx@I=HNS!++{0ixA2^EbMD~CsZfSB z^aEwu;rxq!u2)7!8b;};k}{HZ%I+SU$IG^9CNUzMO>INZItuucl?{2lCS(v?B3#*EqGU^smf;1rwlnglFtZe|@KsuR&F(^5} zI~Q+&b!CH>vpL);;a!kOV_wKA8TJK7u#9mCTpU&yP>yfVz+A=tbQEoKh&NPg$Dvbrkw>Nl&B5CglImbC0uN$+(ZU?+=tItzm^UO) z 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 BHpu`0 literal 0 HcmV?d00001 diff --git a/bsp/20kdm2/textures/sfx/flame5.data.h b/bsp/20kdm2/textures/sfx/flame5.data.h new file mode 100644 index 0000000..c4635a8 --- /dev/null +++ b/bsp/20kdm2/textures/sfx/flame5.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame5_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame5_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame5_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame5_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame5_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame5_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/20kdm2/textures/sfx/flame6.data b/bsp/20kdm2/textures/sfx/flame6.data new file mode 100644 index 0000000000000000000000000000000000000000..8e80a97462b46ac02ad3a79726b914d16560ff99 GIT binary patch literal 65536 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 N5Xcb75V(TC{{=jprWybM literal 0 HcmV?d00001 diff --git a/bsp/20kdm2/textures/sfx/flame6.data.h b/bsp/20kdm2/textures/sfx/flame6.data.h new file mode 100644 index 0000000..5d984c2 --- /dev/null +++ b/bsp/20kdm2/textures/sfx/flame6.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame6_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame6_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame6_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame6_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame6_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame6_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/20kdm2/textures/sfx/flame7.data b/bsp/20kdm2/textures/sfx/flame7.data new file mode 100644 index 0000000000000000000000000000000000000000..55632b282fc5234a11256cd5ec616b43f546d84e GIT binary patch literal 65536 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 KQUv~F1pYtL5uLRF literal 0 HcmV?d00001 diff --git a/bsp/20kdm2/textures/sfx/flame7.data.h b/bsp/20kdm2/textures/sfx/flame7.data.h new file mode 100644 index 0000000..3a3ba27 --- /dev/null +++ b/bsp/20kdm2/textures/sfx/flame7.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame7_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame7_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame7_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame7_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame7_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame7_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/20kdm2/textures/sfx/flame8.data b/bsp/20kdm2/textures/sfx/flame8.data new file mode 100644 index 0000000000000000000000000000000000000000..ab91699a55b5e3e0d151e08ba1a188b31cbf27f9 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/bsp/20kdm2/textures/sfx/flame8.data.h b/bsp/20kdm2/textures/sfx/flame8.data.h new file mode 100644 index 0000000..af8d822 --- /dev/null +++ b/bsp/20kdm2/textures/sfx/flame8.data.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame8_data_start __asm("_binary_bsp_20kdm2_textures_sfx_flame8_data_start"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame8_data_end __asm("_binary_bsp_20kdm2_textures_sfx_flame8_data_end"); +extern uint32_t _binary_bsp_20kdm2_textures_sfx_flame8_data_size __asm("_binary_bsp_20kdm2_textures_sfx_flame8_data_size"); + +#ifdef __cplusplus +} +#endif diff --git a/bsp/baseq3/textures/sfx/flame1.data b/bsp/baseq3/textures/sfx/flame1.data deleted file mode 100644 index f8904866dc1e25748559ec9985fe0f5d384bca38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174768 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 diff --git a/bsp/baseq3/textures/sfx/flame1.data.h b/bsp/baseq3/textures/sfx/flame1.data.h deleted file mode 100644 index 0f5b3e0..0000000 --- a/bsp/baseq3/textures/sfx/flame1.data.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t _binary_bsp_baseq3_textures_sfx_flame1_data_start __asm("_binary_bsp_baseq3_textures_sfx_flame1_data_start"); -extern uint32_t _binary_bsp_baseq3_textures_sfx_flame1_data_end __asm("_binary_bsp_baseq3_textures_sfx_flame1_data_end"); -extern uint32_t _binary_bsp_baseq3_textures_sfx_flame1_data_size __asm("_binary_bsp_baseq3_textures_sfx_flame1_data_size"); - -#ifdef __cplusplus -} -#endif diff --git a/bsp/baseq3/textures/sfx/flame1.jpg b/bsp/baseq3/textures/sfx/flame1.jpg deleted file mode 100644 index ddc233303923b459162cfec3daf944aafcdd6902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14770 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 diff --git a/bsp/data_gen.sh b/bsp/data_gen.sh index 1b930e8..97e0480 100644 --- a/bsp/data_gen.sh +++ b/bsp/data_gen.sh @@ -1,11 +1,12 @@ while read line; do + echo $line filename=$(ls */"$line".{tga,jpg} 2>/dev/null) - if [ -z $filename ]; then + if [ -z "$filename" ]; then continue; fi name="${filename%.*}" data_name="${name}.data" - echo $data_name + echo "data name $data_name" python ~/model_generator/color_convert.py $filename argb1555 twiddled non_mipmapped $data_name (cd .. ; make bsp/${data_name}.h) done diff --git a/example/bsp/20kdm2.cpp b/example/bsp/20kdm2.cpp index 7906079..aa69f54 100644 --- a/example/bsp/20kdm2.cpp +++ b/example/bsp/20kdm2.cpp @@ -58,10 +58,18 @@ #include "bsp/20kdm2/textures/gothic_trim/metalblackwave01.data.h" #include "bsp/20kdm2/textures/stone/pjrock1.data.h" #include "bsp/20kdm2/models/mapobjects/timlamp/timlamp.data.h" -#include "bsp/20kdm2/textures/sfx/flame2.data.h" #include "bsp/20kdm2/models/mapobjects/gratelamp/gratetorch2.data.h" #include "bsp/20kdm2/models/mapobjects/gratelamp/gratetorch2b.data.h" +#include "bsp/20kdm2/textures/sfx/flame1.data.h" +#include "bsp/20kdm2/textures/sfx/flame2.data.h" +#include "bsp/20kdm2/textures/sfx/flame3.data.h" +#include "bsp/20kdm2/textures/sfx/flame4.data.h" +#include "bsp/20kdm2/textures/sfx/flame5.data.h" +#include "bsp/20kdm2/textures/sfx/flame6.data.h" +#include "bsp/20kdm2/textures/sfx/flame7.data.h" +#include "bsp/20kdm2/textures/sfx/flame8.data.h" + #include "q3bsp/q3bsp.h" #include "bsp/20kdm2/maps/20kdm2.bsp.h" #include "bsp/20kdm2/texture.h" @@ -170,7 +178,6 @@ void global_polygon_type_0(ta_parameter_writer& writer) const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog | tsp_instruction_word::src_alpha_instr::src_alpha | tsp_instruction_word::dst_alpha_instr::inverse_src_alpha - | tsp_instruction_word::use_alpha ; const uint32_t texture_control_word = 0; @@ -196,19 +203,19 @@ void global_polygon_type_1(ta_parameter_writer& writer, ) { const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume - | para_control::list_type::opaque + | para_control::list_type::translucent | obj_control::col_type::intensity_mode_1 | obj_control::gouraud | obj_control_texture ; const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater - | isp_tsp_instruction_word::culling_mode::cull_if_negative + | isp_tsp_instruction_word::culling_mode::no_culling ; const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog | tsp_instruction_word::filter_mode::bilinear_filter - | tsp_instruction_word::texture_shading_instruction::modulate + | tsp_instruction_word::texture_shading_instruction::decal | texture_u_v_size ; @@ -250,7 +257,7 @@ void global_polygon_type_4(ta_parameter_writer& writer, const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog | tsp_instruction_word::filter_mode::bilinear_filter - | tsp_instruction_word::texture_shading_instruction::decal + | tsp_instruction_word::texture_shading_instruction::modulate ; writer.append() = @@ -273,12 +280,12 @@ void global_polygon_type_4(ta_parameter_writer& writer, ); } -void global_texture(ta_parameter_writer& writer, int ix) +void global_texture(ta_parameter_writer& writer, int texture_ix) { - struct pk_texture * texture = &textures[ix]; + struct pk_texture * texture = &textures[texture_ix]; uint32_t texture_u_v_size = tsp_instruction_word::src_alpha_instr::one - | tsp_instruction_word::dst_alpha_instr::zero + | tsp_instruction_word::dst_alpha_instr::one | tsp_instruction_word::texture_u_size::from_int(texture->width) | tsp_instruction_word::texture_v_size::from_int(texture->height) ; @@ -741,6 +748,114 @@ int count_face_triangles() return sum; } +const int flame1_ix = 27; + +const vec3 billboard_p[] = { + (vec3){-1, -2, 0} * 10.f, + (vec3){ 1, -2, 0} * 10.f, + (vec3){ 1, 2, 0} * 10.f, + (vec3){-1, 2, 0} * 10.f, +}; + +const vec2 billboard_t[] = { + {0, 0}, + {1, 0}, + {1, 1}, + {0, 1}, +}; + +int anim_count = 0; +int flame_ix = 0; + +static inline void transfer_face_billboard(ta_parameter_writer& writer, q3bsp_face_t * face) +{ + uint8_t * buf = reinterpret_cast(bsp_start); + q3bsp_header_t * header = reinterpret_cast(buf); + + q3bsp_direntry * ve = &header->direntries[LUMP_VERTEXES]; + q3bsp_vertex_t * vert = reinterpret_cast(&buf[ve->offset]); + + q3bsp_direntry * me = &header->direntries[LUMP_MESHVERTS]; + q3bsp_meshvert_t * meshvert = reinterpret_cast(&buf[me->offset]); + + int meshvert_ix = face->meshvert; + q3bsp_meshvert_t * mv = &meshvert[meshvert_ix]; + + int triangles = face->n_meshverts / 3; + + assert(face->texture == 23 || face->texture == 24); + + float li = 1; + + for (int j = 0; j < triangles; j++) { + + int aix = mv[j * 3 + 0].offset + face->vertex; + int bix = mv[j * 3 + 1].offset + face->vertex; + int cix = mv[j * 3 + 2].offset + face->vertex; + + vec3 ap = vertex_cache[aix].position; + vec3 bp = vertex_cache[bix].position; + vec3 cp = vertex_cache[cix].position; + + vis_tri_count += 1; + + if (ap.z < 0 || bp.z < 0 || cp.z < 0) { + continue; + } + + vec2 at = {vert[aix].texcoord[0], vert[aix].texcoord[1]}; + vec2 bt = {vert[bix].texcoord[0], vert[bix].texcoord[1]}; + vec2 ct = {vert[cix].texcoord[0], vert[cix].texcoord[1]}; + + render_tri_type_7(writer, + screen_transform(ap), + screen_transform(bp), + screen_transform(cp), + at, + bt, + ct, + li); + } +} + +void transfer_billboard(ta_parameter_writer& writer, const mat4x4& screen_trans) +{ + global_texture(writer, flame1_ix + flame_ix); + + /* + const vec2& at = billboard_t[0]; + const vec2& bt = billboard_t[1]; + const vec2& ct = billboard_t[2]; + const vec2& dt = billboard_t[3]; + */ + + uint8_t * buf = reinterpret_cast(bsp_start); + q3bsp_header_t * header = reinterpret_cast(buf); + + q3bsp_direntry * fe = &header->direntries[LUMP_FACES]; + q3bsp_face_t * faces = reinterpret_cast(&buf[fe->offset]); + + int face_count = fe->length / (sizeof (struct q3bsp_face)); + + for (int i = 0; i < face_count; i++) { + q3bsp_face_t * face = &faces[i]; + if (!(face->texture == 23 || face->texture == 24)) + continue; + + if (!face_cache[i]) + continue; + + transfer_face_billboard(writer, face); + } + + if (anim_count++ > 3) { + flame_ix += 1; + if (flame_ix >= 8) + flame_ix = 0; + anim_count = 0; + } +} + void transfer_icosphere(ta_parameter_writer& writer, const mat4x4& screen_trans) { const struct model * model = &icosphere_model; @@ -1301,6 +1416,13 @@ void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen_trans, con writer.append() = ta_global_parameter::end_of_list(para_control::para_type::end_of_list); + // translucent list + transfer_billboard(writer, trans); + + writer.append() = + ta_global_parameter::end_of_list(para_control::para_type::end_of_list); + + // modifier volume list transfer_modifier_volume(writer); writer.append() = @@ -1565,20 +1687,20 @@ const int tile_width = framebuffer_width / 32; const int tile_height = framebuffer_height / 32; constexpr uint32_t ta_alloc = 0 - | ta_alloc_ctrl::pt_opb::_16x4byte + | ta_alloc_ctrl::pt_opb::_32x4byte | ta_alloc_ctrl::tm_opb::no_list - | ta_alloc_ctrl::t_opb::no_list - | ta_alloc_ctrl::om_opb::_16x4byte + | ta_alloc_ctrl::t_opb::_8x4byte + | ta_alloc_ctrl::om_opb::_8x4byte | ta_alloc_ctrl::o_opb::no_list; constexpr int ta_cont_count = 1; constexpr struct opb_size opb_size[ta_cont_count] = { { .opaque = 0, - .opaque_modifier = 16 * 4, - .translucent = 0, + .opaque_modifier = 8 * 4, + .translucent = 8 * 4, .translucent_modifier = 0, - .punch_through = 16 * 4 + .punch_through = 32 * 4 } }; @@ -1678,6 +1800,11 @@ int main() core_init(); + holly.ISP_FEED_CFG = isp_feed_cfg::cache_size_for_translucency(0x200) + | isp_feed_cfg::punch_through_chunk_size(0x040) + | isp_feed_cfg::pre_sort_mode + ; + system.IML6NRM = istnrm::end_of_render_tsp | istnrm::v_blank_in | istnrm::end_of_transferring_opaque_modifier_volume_list; diff --git a/example/bsp/bsp.mk b/example/bsp/bsp.mk index caea799..a99582e 100644 --- a/example/bsp/bsp.mk +++ b/example/bsp/bsp.mk @@ -35,6 +35,14 @@ BSP_20KDM2_OBJ = \ bsp/20kdm2/textures/sfx/flame2.data.o \ bsp/20kdm2/models/mapobjects/gratelamp/gratetorch2.data.o \ bsp/20kdm2/models/mapobjects/gratelamp/gratetorch2b.data.o \ + bsp/20kdm2/textures/sfx/flame1.data.o \ + bsp/20kdm2/textures/sfx/flame2.data.o \ + bsp/20kdm2/textures/sfx/flame3.data.o \ + bsp/20kdm2/textures/sfx/flame4.data.o \ + bsp/20kdm2/textures/sfx/flame5.data.o \ + bsp/20kdm2/textures/sfx/flame6.data.o \ + bsp/20kdm2/textures/sfx/flame7.data.o \ + bsp/20kdm2/textures/sfx/flame8.data.o \ $(LIBGCC) example/bsp/20kdm2.elf: LDSCRIPT = $(LIB)/main.lds diff --git a/example/modifier_volume_cube_aa.cpp b/example/modifier_volume_cube_aa.cpp new file mode 100644 index 0000000..dac4e24 --- /dev/null +++ b/example/modifier_volume_cube_aa.cpp @@ -0,0 +1,1129 @@ +#include + +#include "holly/background.hpp" +#include "holly/core.hpp" +#include "holly/core_bits.hpp" +#include "holly/holly.hpp" +#include "holly/isp_tsp.hpp" +#include "holly/region_array.hpp" +#include "holly/ta_bits.hpp" +#include "holly/ta_fifo_polygon_converter.hpp" +#include "holly/ta_global_parameter.hpp" +#include "holly/ta_parameter.hpp" +#include "holly/ta_vertex_parameter.hpp" +#include "holly/texture_memory_alloc3.hpp" +#include "holly/video_output.hpp" + +#include "sh7091/sh7091.hpp" +#include "sh7091/sh7091_bits.hpp" +#include "sh7091/serial.hpp" +#include "sh7091/vbr.hpp" + +#include "systembus.hpp" +#include "systembus_bits.hpp" + +#include "memorymap.hpp" + +#include "model/model.h" +#include "model/cube/model.h" +#include "model/plane/model.h" + +#include "font/terminus/ter_u32n.data.h" + +#include "math/vec2.hpp" +#include "math/vec3.hpp" +#include "math/vec4.hpp" +#include "math/mat3x3.hpp" +#include "math/mat4x4.hpp" +#include "math/math.hpp" + +#define assert(b) \ + do { \ + if (!(b)) { \ + serial::string(__FILE__); \ + serial::character(':'); \ + serial::integer(__LINE__, ' '); \ + serial::string(__func__); \ + serial::string(": assertion failed: "); \ + serial::string(#b); \ + serial::character('\n'); \ + while (1); \ + } \ + } while (0); + +using vec2 = vec<2, float>; +using vec3 = vec<3, float>; +using vec4 = vec<4, float>; +using mat3x3 = mat<3, 3, float>; +using mat4x4 = mat<4, 4, float>; + +void vbr100() +{ + serial::string("vbr100\n"); + serial::string("expevt "); + serial::integer(sh7091.CCN.EXPEVT); + serial::string("intevt "); + serial::integer(sh7091.CCN.INTEVT); + serial::string("tra "); + serial::integer(sh7091.CCN.TRA); + while (1); +} + +void vbr400() +{ + serial::string("vbr400"); + serial::string("expevt "); + serial::integer(sh7091.CCN.EXPEVT); + serial::string("intevt "); + serial::integer(sh7091.CCN.INTEVT); + serial::string("tra "); + serial::integer(sh7091.CCN.TRA); + while (1); +} + +static int render_done = 0; + +void vbr600() +{ + if (sh7091.CCN.EXPEVT == 0 && sh7091.CCN.INTEVT == 0x320) { + uint32_t istnrm = system.ISTNRM; + uint32_t isterr = system.ISTERR; + + if (isterr) { + serial::string("isterr: "); + serial::integer(system.ISTERR); + } + + if (istnrm & istnrm::end_of_render_tsp) { + system.ISTNRM = istnrm::end_of_render_tsp + | istnrm::end_of_render_isp + | istnrm::end_of_render_video; + render_done = 1; + return; + } + } + + serial::string("vbr600"); + serial::string("expevt "); + serial::integer(sh7091.CCN.EXPEVT); + serial::string("intevt "); + serial::integer(sh7091.CCN.INTEVT); + serial::string("tra "); + serial::integer(sh7091.CCN.TRA); + + serial::string("istnrm: "); + serial::integer(system.ISTNRM); + serial::string("isterr: "); + serial::integer(system.ISTERR); + + + serial::string("halt\n"); + while (1); +} + +void interrupt_init() +{ + system.IML2NRM = 0; + system.IML2ERR = 0; + system.IML2EXT = 0; + + system.IML4NRM = 0; + system.IML4ERR = 0; + system.IML4EXT = 0; + + system.IML6NRM = 0; + system.IML6ERR = 0; + system.IML6EXT = 0; + + system.ISTERR = 0xffffffff; + system.ISTNRM = 0xffffffff; + + sh7091.CCN.INTEVT = 0; + sh7091.CCN.EXPEVT = 0; + + uint32_t vbr = reinterpret_cast(&__vbr_link_start) - 0x100; + serial::string("vbr "); + serial::integer(vbr); + serial::string("vbr100 "); + serial::integer(reinterpret_cast(&vbr100)); + + asm volatile ("ldc %0,vbr" + : + : "r" (vbr)); + + uint32_t sr; + asm volatile ("stc sr,%0" + : "=r" (sr)); + serial::string("sr "); + serial::integer(sr); + + sr &= ~sh::sr::bl; // BL + sr &= ~sh::sr::imask(15); // imask + + serial::string("sr "); + serial::integer(sr); + + asm volatile ("ldc %0,sr" + : + : "r" (sr)); +} + +const float deg = 0.017453292519943295; + +#define _fsrra(n) \ + ({ \ + float v = (n); \ + asm("fsrra %0" \ + : "=f" (v) \ + : "0" (v)); \ + v; \ + }) + +static inline float inverse_length(vec3 v) +{ + float f = dot(v, v); + return _fsrra(f); +} + +static inline int max(int a, int b) +{ + return (a > b) ? a : b; +} + +static inline int min(int a, int b) +{ + return (a > b) ? b : a; +} + +void global_polygon_type_0(ta_parameter_writer& writer, bool shadow) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque + | obj_control::col_type::packed_color + | (shadow ? obj_control::shadow : 0) + ; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::no_culling; + + const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog + | tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + ; + + const uint32_t texture_control_word = 0; + + writer.append() = + ta_global_parameter::polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + texture_control_word, + 0, // data_size_for_sort_dma + 0 // next_address_for_sort_dma + ); +} + +void global_polygon_type_1(ta_parameter_writer& writer, bool shadow, float r, float g, float b) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque + | obj_control::col_type::intensity_mode_1 + | (shadow ? obj_control::shadow : 0) + ; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::no_culling; + + const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog + | tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + ; + + const uint32_t texture_control_word = 0; + + const float alpha = 1.0f; + + writer.append() = + ta_global_parameter::polygon_type_1(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + texture_control_word, + alpha, + r, + g, + b + ); +} + +void global_modifier_volume(ta_parameter_writer& writer) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque_modifier_volume + ; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::volume_instruction::normal_polygon + | isp_tsp_instruction_word::culling_mode::no_culling; + + writer.append() = + ta_global_parameter::modifier_volume(parameter_control_word, + isp_tsp_instruction_word + ); +} + +void transfer_line(ta_parameter_writer& writer, vec3 p1, vec3 p2, uint32_t base_color) +{ + float dy = p2.y - p1.y; + float dx = p2.x - p1.x; + float d = _fsrra(dx * dx + dy * dy) * 0.7f; + float dy1 = dy * d; + float dx1 = dx * d; + + assert(p1.z < 1); + assert(p2.z < 1); + + const vec3 v[4] = { + { p1.x + dy1, p1.y + -dx1, p1.z }, + { p1.x + -dy1, p1.y + dx1, p1.z }, + { p2.x + -dy1, p2.y + dx1, p2.z }, + { p2.x + dy1, p2.y + -dx1, p2.z }, + }; + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + v[0].x, v[0].y, v[0].z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + v[1].x, v[1].y, v[1].z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + v[3].x, v[3].y, v[3].z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true), + v[2].x, v[2].y, v[2].z, + base_color); +} + +void transfer_glyph(ta_parameter_writer& writer, float x, float y, int c) +{ + constexpr int width = 16; + constexpr int height = 32; + + const uint32_t parameter_control_word = para_control::para_type::sprite + | para_control::list_type::punch_through + | obj_control::col_type::packed_color + | obj_control::texture; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::no_culling; + + const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog + | tsp_instruction_word::src_alpha_instr::src_alpha + | tsp_instruction_word::dst_alpha_instr::inverse_src_alpha + | tsp_instruction_word::texture_u_size::from_int(width) + | tsp_instruction_word::texture_v_size::from_int(height); + + const int ix = c - ' '; + const int offset = (width * height * ix) / 2; + const uint32_t texture_address = texture_memory_alloc.texture.start + offset; + const uint32_t texture_control_word = texture_control_word::pixel_format::_4bpp_palette + | texture_control_word::scan_order::twiddled + | texture_control_word::texture_address(texture_address / 8); + + constexpr vec2 v[4] = { + { 0.f, 0.f }, + { 1.f, 0.f }, + { 1.f, 1.f }, + { 0.f, 1.f }, + }; + + constexpr uint32_t base_color = 0; + writer.append() = + ta_global_parameter::sprite(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + texture_control_word, + base_color, + 0, // offset_color + 0, // data_size_for_sort_dma + 0); // next_address_for_sort_dma + + writer.append() = + ta_vertex_parameter::sprite_type_1(para_control::para_type::vertex_parameter, + v[0].x * width + x, + v[0].y * height + y, + 0.1f, + v[1].x * width + x, + v[1].y * height + y, + 0.1f, + v[2].x * width + x, + v[2].y * height + y, + 0.1f, + v[3].x * width + x, + v[3].y * height + y, + uv_16bit(v[0].x, v[0].y), + uv_16bit(v[1].x, v[1].y), + uv_16bit(v[2].x, v[2].y)); +} + +vec3 screen_transform(const mat4x4& screen, vec3 v) +{ + v = screen * v; + + float dim = 480 / 2.0 * 1.5; + + return { + v.x / v.z * dim + 640 / 2.0f, + v.y / v.z * dim + 480 / 2.0f, + 1 / v.z, + }; +} + +void render_basis(ta_parameter_writer& writer, const mat4x4& screen) +{ + global_polygon_type_0(writer, false); + + vec3 origin = screen_transform(screen, {0, 0, 0}); + vec3 z = screen_transform(screen, {0, 0, 1}); + vec3 y = screen_transform(screen, {0, 1, 0}); + vec3 x = screen_transform(screen, {1, 0, 0}); + + uint32_t base_color = 0xffffff; + + // magenta: Z + transfer_line(writer, origin, z, base_color); + + // yellow: Y + transfer_line(writer, origin, y, base_color); + + // cyan: X + transfer_line(writer, origin, x, base_color); +} + +void render_basis_text(ta_parameter_writer& writer, const mat4x4& screen) +{ + vec3 z = screen_transform(screen, (vec3){0, 0, 1} * 1.2f); + vec3 y = screen_transform(screen, (vec3){0, 1, 0} * 1.2f); + vec3 x = screen_transform(screen, (vec3){1, 0, 0} * 1.2f); + + transfer_glyph(writer, z.x - 5, z.y - 10, 'z'); + transfer_glyph(writer, y.x - 5, y.y - 10, 'y'); + transfer_glyph(writer, x.x - 5, x.y - 10, 'x'); +} + +//#define LINE_DRAWING 1 + +static inline void render_quad(ta_parameter_writer& writer, + uint32_t base_color, + vec3 ap, + vec3 bp, + vec3 cp, + vec3 dp) +{ +#ifdef LINE_DRAWING + transfer_line(writer, ap, bp, base_color); + transfer_line(writer, bp, cp, base_color); + transfer_line(writer, cp, dp, base_color); + transfer_line(writer, dp, ap, base_color); +#else + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + ap.x, ap.y, ap.z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + bp.x, bp.y, bp.z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false), + dp.x, dp.y, dp.z, + base_color); + + writer.append() = + ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true), + cp.x, cp.y, cp.z, + base_color); +#endif +} + +static inline void render_quad_type2(ta_parameter_writer& writer, + float intensity, + vec3 ap, + vec3 bp, + vec3 cp, + vec3 dp) +{ +#ifdef LINE_DRAWING +#else + writer.append() = + ta_vertex_parameter::polygon_type_2(polygon_vertex_parameter_control_word(false), + ap.x, ap.y, ap.z, + intensity); + + writer.append() = + ta_vertex_parameter::polygon_type_2(polygon_vertex_parameter_control_word(false), + bp.x, bp.y, bp.z, + intensity); + + writer.append() = + ta_vertex_parameter::polygon_type_2(polygon_vertex_parameter_control_word(false), + dp.x, dp.y, dp.z, + intensity); + + writer.append() = + ta_vertex_parameter::polygon_type_2(polygon_vertex_parameter_control_word(true), + cp.x, cp.y, cp.z, + intensity); +#endif +} + +static inline void render_tri(ta_parameter_writer& writer, + uint32_t base_color, + vec3 ap, + vec3 bp, + vec3 cp) +{ +#ifdef LINE_DRAWING + transfer_line(writer, ap, bp, base_color); + transfer_line(writer, bp, cp, base_color); + transfer_line(writer, cp, ap, base_color); +#else +#endif +} + +static inline void render_last_tri_mod(ta_parameter_writer& writer) +{ +#ifdef LINE_DRAWING +#else + const uint32_t last_parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque_modifier_volume + | obj_control::volume::modifier_volume::last_in_volume; + + const uint32_t last_isp_tsp_instruction_word = isp_tsp_instruction_word::volume_instruction::inside_last_polygon + | isp_tsp_instruction_word::culling_mode::no_culling; + + writer.append() = + ta_global_parameter::modifier_volume(last_parameter_control_word, + last_isp_tsp_instruction_word); +#endif +} + +static inline void render_tri_mod(ta_parameter_writer& writer, + vec3 ap, + vec3 bp, + vec3 cp) +{ +#ifdef LINE_DRAWING + transfer_line(writer, ap, bp, base_color); + transfer_line(writer, bp, cp, base_color); + transfer_line(writer, cp, ap, base_color); +#else + writer.append() = + ta_vertex_parameter::modifier_volume(modifier_volume_vertex_parameter_control_word(), + ap.x, ap.y, ap.z, + bp.x, bp.y, bp.z, + cp.x, cp.y, cp.z); +#endif +} + +void set_edge_coloring(uint8_t * edge_coloring, + const int edge_stride, + bool l_dot_n_b, int a, int b) +{ + int ma = min(a, b); + int mb = max(a, b); + + int bit = 1 << ((int)l_dot_n_b); + + edge_coloring[ma * edge_stride + mb] |= bit; +} + +struct edge { + int a; + int b; +}; + +static uint32_t random; + +uint32_t xorshift() +{ + uint32_t x = random; + x ^= x << 13; + x ^= x >> 17; + x ^= x << 5; + return random = x; +} + +static inline void render_extension_mesh(ta_parameter_writer& writer, + vec3 ap, + vec3 bp, + vec3 cp, + vec3 dp, + vec3 ep, + vec3 fp, + vec3 apo, + vec3 bpo, + vec3 cpo, + vec3 dpo, + vec3 epo, + vec3 fpo) +{ + render_tri_mod(writer, ap, bp, apo); + render_tri_mod(writer, bpo, apo, bp); + + render_tri_mod(writer, bp, cp, bpo); + render_tri_mod(writer, cpo, bpo, cp); + + render_tri_mod(writer, cp, dp, cpo); + render_tri_mod(writer, dpo, cpo, dp); + + render_tri_mod(writer, dp, ep, dpo); + render_tri_mod(writer, epo, dpo, ep); + + render_tri_mod(writer, ep, fp, epo); + render_tri_mod(writer, fpo, epo, fp); + + render_tri_mod(writer, fp, ap, fpo); + render_last_tri_mod(writer); + render_tri_mod(writer, apo, fpo, ap); + + /* + random = 0x12345789; + + render_quad(writer, xorshift(), ap, bp, bpo, apo); + + render_quad(writer, xorshift(), bp, cp, cpo, bpo); + + render_quad(writer, xorshift(), cp, dp, dpo, cpo); + + render_quad(writer, xorshift(), dp, ep, epo, dpo); + + render_quad(writer, xorshift(), ep, fp, fpo, epo); + + render_quad(writer, xorshift(), fp, ap, apo, fpo); + */ +} + +void render_silhouette(ta_parameter_writer& writer, + const mat4x4& screen, + const mat4x4& model, + const vec3 light_vec, + const uint8_t * edge_coloring, + const int edge_stride) +{ + struct edge silhouette[6]; + int ix = 0; + + for (int a = 0; a < edge_stride; a++) { + for (int b = 0; b < edge_stride; b++) { + uint8_t coloring = edge_coloring[a * edge_stride + b]; + if (coloring == 0b11) { + silhouette[ix++] = {a, b}; + } + } + } + assert(ix == 6); + + int last_ix = 0; + int order_ix = 0; + int order_vtx[6]; + order_vtx[order_ix++] = silhouette[0].a; + + // calculate vertex ordering + while (order_ix < 6) { + for (int i = 1; i < 6; i++) { + if (i == last_ix) + continue; + + int last_vtx = order_vtx[order_ix - 1]; + if (last_vtx == silhouette[i].a) { + last_ix = i; + order_vtx[order_ix++] = silhouette[i].b; + break; + } + if (last_vtx == silhouette[i].b) { + last_ix = i; + order_vtx[order_ix++] = silhouette[i].a; + break; + } + } + } + + const vec3 * position = cube_position; + + vec3 ap = screen_transform(screen, model * position[order_vtx[0]]); + vec3 bp = screen_transform(screen, model * position[order_vtx[1]]); + vec3 cp = screen_transform(screen, model * position[order_vtx[2]]); + vec3 dp = screen_transform(screen, model * position[order_vtx[3]]); + vec3 ep = screen_transform(screen, model * position[order_vtx[4]]); + vec3 fp = screen_transform(screen, model * position[order_vtx[5]]); + + float scale = 5; + mat4x4 translate = { + 1, 0, 0, -light_vec.x * scale, + 0, 1, 0, -light_vec.y * scale, + 0, 0, 1, -light_vec.z * scale, + 0, 0, 0, 1, + }; + + mat4x4 model2 = model * translate; + + vec3 apo = screen_transform(screen, model2 * position[order_vtx[0]]); + vec3 bpo = screen_transform(screen, model2 * position[order_vtx[1]]); + vec3 cpo = screen_transform(screen, model2 * position[order_vtx[2]]); + vec3 dpo = screen_transform(screen, model2 * position[order_vtx[3]]); + vec3 epo = screen_transform(screen, model2 * position[order_vtx[4]]); + vec3 fpo = screen_transform(screen, model2 * position[order_vtx[5]]); + + if (0) { // perimeter + uint32_t base_color = 0xff0080; + + transfer_line(writer, ap, bp, base_color); + transfer_line(writer, bp, cp, base_color); + transfer_line(writer, cp, dp, base_color); + transfer_line(writer, dp, ep, base_color); + transfer_line(writer, ep, fp, base_color); + transfer_line(writer, fp, ap, base_color); + } + + if (1) { // near end cap + render_tri_mod(writer, ap, bp, cp); + render_tri_mod(writer, cp, dp, ep); + render_tri_mod(writer, ep, fp, ap); + render_tri_mod(writer, ap, cp, ep); + } + + if (1) { // far end cap + render_tri_mod(writer, apo, bpo, cpo); + render_tri_mod(writer, cpo, dpo, epo); + render_tri_mod(writer, epo, fpo, apo); + render_tri_mod(writer, apo, cpo, epo); + } + + if (1) { + render_extension_mesh(writer, + ap, + bp, + cp, + dp, + ep, + fp, + apo, + bpo, + cpo, + dpo, + epo, + fpo); + } +} + +void render_cube(ta_parameter_writer& writer, + const mat4x4& screen, + const vec3 light_vec, + float theta) +{ + //float ct = cos(theta); + //float st = sin(theta); + float scale = 0.3f; + const mat4x4 s = { + scale, 0, 0, 0, + 0, scale, 0, 0, + 0, 0, scale, 0, + 0, 0, 0, 1, + }; + /* + const mat4x4 rz = { + ct, -st, 0, 0, + st, ct, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + }; + */ + mat4x4 model = s; + + const vec3 * normal = cube_normal; + const vec3 * position = cube_position; + const union quadrilateral * quadrilateral = cube_Cube_quadrilateral; + + const int edge_stride = 8; + const int edge_coloring_length = edge_stride * edge_stride; + uint8_t __attribute__((aligned(4))) edge_coloring[edge_coloring_length]; + for (int i = 0; i < edge_coloring_length / 4; i++) + reinterpret_cast(edge_coloring)[i] = 0; + + //uint32_t base_color = l_dot_n_b ? 0xff8000 : 0x0080ff; + const float red = 0.0f; + const float green = 0.5f; + const float blue = 1.0f; + + global_polygon_type_1(writer, false, red, green, blue); // no self-shadow + + for (int i = 0; i < 6; i++) { + const union quadrilateral& q = quadrilateral[i]; + vec3 n3 = normal[q.a.normal]; + vec4 n4 = model * (vec4){n3.x, n3.y, n3.z, 0.f}; // no translation component + vec3 n = {n4.x, n4.y, n4.z}; + float n_dot_l = dot(n, light_vec); + bool n_dot_l_b = n_dot_l > 0; + + set_edge_coloring(edge_coloring, edge_stride, n_dot_l_b, q.a.position, q.b.position); + set_edge_coloring(edge_coloring, edge_stride, n_dot_l_b, q.b.position, q.c.position); + set_edge_coloring(edge_coloring, edge_stride, n_dot_l_b, q.c.position, q.d.position); + set_edge_coloring(edge_coloring, edge_stride, n_dot_l_b, q.d.position, q.a.position); + + vec3 ap = model * position[q.a.position]; + vec3 bp = model * position[q.b.position]; + vec3 cp = model * position[q.c.position]; + vec3 dp = model * position[q.d.position]; + + vec3 sap = screen_transform(screen, ap); + vec3 sbp = screen_transform(screen, bp); + vec3 scp = screen_transform(screen, cp); + vec3 sdp = screen_transform(screen, dp); + + float intensity = 0.2f; + + if (n_dot_l > 0) { + intensity += 0.5f * n_dot_l * (inverse_length(n) * inverse_length(light_vec)); + if (intensity > 1.0f) + intensity = 1.0f; + } + + render_quad_type2(writer, + intensity, + sap, + sbp, + scp, + sdp); + } + + if (1) { + // end of opaque list + writer.append() = + ta_global_parameter::end_of_list(para_control::para_type::end_of_list); + + global_modifier_volume(writer); + + render_silhouette(writer, + screen, + model, + light_vec, + edge_coloring, + edge_stride); + } +} + +void render_plane(ta_parameter_writer& writer, + const mat4x4& screen, + const vec3 light_vec) +{ + const vec3 * normal = plane_normal; + const vec3 * position = plane_position; + const union quadrilateral * quadrilateral = plane_Plane.quadrilateral; + int count = plane_Plane.quadrilateral_count; + + float scale = 3; + float translate = 1; + const mat4x4 model = { + scale, 0, 0, 0, + 0, scale, 0, 0, + 0, 0, scale, translate, + 0, 0, 0, 1, + }; + + //uint32_t base_color = 0xffff80; + const float red = 1.0f; + const float green = 1.0f; + const float blue = 0.5f; + + global_polygon_type_1(writer, true, red, green, blue); // with shadow + + for (int i = 0; i < count; i++) { + const union quadrilateral& q = quadrilateral[i]; + + vec3 ap = model * position[q.a.position]; + vec3 bp = model * position[q.b.position]; + vec3 cp = model * position[q.c.position]; + vec3 dp = model * position[q.d.position]; + + float intensity = 0.2f; + + vec4 _n = normal[q.a.normal]; + vec4 n4 = model * (vec4){_n.x, _n.y, _n.z, 0}; // no translation component + vec3 n = {n4.x, n4.y, n4.z}; + float n_dot_l = -dot(n, light_vec); + + if (n_dot_l > 0) { + intensity += 0.5f * n_dot_l * (inverse_length(n) * inverse_length(light_vec)); + if (intensity > 1.0f) + intensity = 1.0f; + } + + vec3 sap = screen_transform(screen, ap); + vec3 sbp = screen_transform(screen, bp); + vec3 scp = screen_transform(screen, cp); + vec3 sdp = screen_transform(screen, dp); + + render_quad_type2(writer, + intensity, + sap, + sbp, + scp, + sdp); + } +} + +constexpr inline mat4x4 screen_rotation(float theta) +{ + float zt = -0.7853981633974483 / 1 + theta / 5; + float xt = -0.7853981633974483 * 0.7 + 0.3 * sin(theta / 3); + + mat4x4 rx = { + 1, 0, 0, 0, + 0, cos(xt), -sin(xt), 0, + 0, sin(xt), cos(xt), 0, + 0, 0, 0, 1, + }; + + mat4x4 rz = { + cos(zt), -sin(zt), 0, 0, + sin(zt), cos(zt), 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + }; + + mat4x4 t = { + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 2.5, + 0, 0, 0, 1, + }; + + return t * rx * rz; +} + +void render_light_vec(ta_parameter_writer& writer, const mat4x4& screen, vec3 l) +{ + vec3 a = screen_transform(screen, {0, 0, 0}); + vec3 b = screen_transform(screen, l * 0.5f); + + transfer_line(writer, a, b, 0x00ff00); +} + +void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen, vec3 light_vec) +{ + // opaque + render_basis(writer, screen); + + render_light_vec(writer, screen, light_vec); + + if (1) { + render_plane(writer, + screen, + light_vec); + } + + static float cube_theta = 0; + render_cube(writer, + screen, + light_vec, + cube_theta); + cube_theta += deg; + + writer.append() = + ta_global_parameter::end_of_list(para_control::para_type::end_of_list); + + // punch_through + /* + render_basis_text(writer, screen); + + writer.append() = + ta_global_parameter::end_of_list(para_control::para_type::end_of_list); + */ +} + +vec3 update_light() +{ + static float ltheta = 2; + + vec3 light_origin = {0, 0, 0}; + vec3 light_pos = {1, 1, 2}; + + mat3x3 rot = { + cos(ltheta), -sin(ltheta), 0, + sin(ltheta), cos(ltheta), 0, + 0, 0, 1, + }; + + light_pos = rot * light_pos; + ltheta += deg / 8; + + vec3 light_vec = light_origin - light_pos; + + return light_vec; +} + +void transfer_ta_fifo_texture_memory_32byte(void * dst, void * src, int length) +{ + uint32_t out_addr = (uint32_t)dst; + sh7091.CCN.QACR0 = ((reinterpret_cast(out_addr) >> 24) & 0b11100); + sh7091.CCN.QACR1 = ((reinterpret_cast(out_addr) >> 24) & 0b11100); + + volatile uint32_t * base = &store_queue[(out_addr & 0x03ffffc0) / 4]; + uint32_t * src32 = reinterpret_cast(src); + + length = (length + 31) & ~31; // round up to nearest multiple of 32 + while (length > 0) { + base[0] = src32[0]; + base[1] = src32[1]; + base[2] = src32[2]; + base[3] = src32[3]; + base[4] = src32[4]; + base[5] = src32[5]; + base[6] = src32[6]; + base[7] = src32[7]; + asm volatile ("pref @%0" + : // output + : "r" (&base[0]) // input + : "memory"); + length -= 32; + base += 8; + src32 += 8; + } +} + +void transfer_textures() +{ + system.LMMODE0 = 0; // 64-bit address space + system.LMMODE1 = 0; // 64-bit address space + + uint32_t offset = texture_memory_alloc.texture.start; + void * dst = reinterpret_cast(&ta_fifo_texture_memory[offset / 4]); + void * src = reinterpret_cast(&_binary_font_terminus_ter_u32n_data_start); + uint32_t size = reinterpret_cast(&_binary_font_terminus_ter_u32n_data_size); + transfer_ta_fifo_texture_memory_32byte(dst, src, size); +} + +static inline uint16_t argb1555(int a, int r, int g, int b) +{ + return ((a & 1) << 15) | ((r & 31) << 10) | ((g & 31) << 5) | ((b & 31) << 0); +} + +void transfer_palette() +{ + holly.PAL_RAM_CTRL = pal_ram_ctrl::pixel_format::argb1555; + + holly.PALETTE_RAM[ 0 + 0] = argb1555(0, 0, 0, 0); + holly.PALETTE_RAM[ 0 + 1] = argb1555(1, 31, 31, 31); +} + +uint8_t __attribute__((aligned(32))) ta_parameter_buf[1024 * 1024]; + +void main() +{ + serial::init(0); + + interrupt_init(); + //asm volatile ("trapa #0"); + + transfer_textures(); + transfer_palette(); + + constexpr uint32_t ta_alloc = 0 + //ta_alloc_ctrl::pt_opb::_16x4byte + | ta_alloc_ctrl::tm_opb::no_list + | ta_alloc_ctrl::t_opb::no_list + | ta_alloc_ctrl::om_opb::_16x4byte + | ta_alloc_ctrl::o_opb::_16x4byte; + + constexpr int render_passes = 1; + constexpr struct opb_size opb_size[render_passes] = { + { + .opaque = 16 * 4, + .opaque_modifier = 16 * 4, + .translucent = 0, + .translucent_modifier = 0, + //.punch_through = 16 * 4 + } + }; + + holly.SOFTRESET = softreset::pipeline_soft_reset + | softreset::ta_soft_reset; + holly.SOFTRESET = 0; + + core_init(); + + system.IML6NRM = istnrm::end_of_render_tsp; + + holly.FPU_SHAD_SCALE = fpu_shad_scale::simple_shadow_enable::intensity_volume_mode + | fpu_shad_scale::scale_factor_for_shadows(128); + video_output::set_mode_vga(); + + const int framebuffer_width = 640; + const int framebuffer_height = 480; + const int tile_width = framebuffer_width / 32; + const int tile_height = framebuffer_height / 32; + + for (int i = 0; i < 2; i++) { + region_array_multipass(tile_width, + tile_height, + opb_size, + render_passes, + texture_memory_alloc.region_array[i].start, + texture_memory_alloc.object_list[i].start); + + background_parameter2(texture_memory_alloc.background[i].start, + 0xff202040); + } + + ta_parameter_writer writer = ta_parameter_writer(ta_parameter_buf); + + int ta = 0; + int core = 0; + + const float degree = 0.017453292519943295 / 5; + float theta = 0; + + while (1) { + const mat4x4 screen = screen_rotation(theta); + + vec3 light_vec = update_light(); + + ta_polygon_converter_init2(texture_memory_alloc.isp_tsp_parameters[ta].start, + texture_memory_alloc.isp_tsp_parameters[ta].end, + texture_memory_alloc.object_list[ta].start, + texture_memory_alloc.object_list[ta].end, + opb_size[0].total(), + ta_alloc, + tile_width, + tile_height); + writer.offset = 0; + transfer_scene(writer, screen, light_vec); + ta_polygon_converter_writeback(writer.buf, writer.offset); + ta_polygon_converter_transfer(writer.buf, writer.offset); + ta_wait_opaque_modifier_volume_list(); + + render_done = 0; + core_start_render2(texture_memory_alloc.region_array[core].start, + texture_memory_alloc.isp_tsp_parameters[core].start, + texture_memory_alloc.background[core].start, + texture_memory_alloc.framebuffer[core].start, + framebuffer_width); + //serial::string("wait render_done"); + while (render_done == 0) { + asm volatile ("nop"); + }; + + holly.FB_R_SOF1 = texture_memory_alloc.framebuffer[ta].start; + + theta += degree; + } + serial::string("return\nreturn\nreturn\nreturn\n"); +} diff --git a/q3bsp/debug.c b/q3bsp/debug.c index e1cbe0c..561bf0f 100644 --- a/q3bsp/debug.c +++ b/q3bsp/debug.c @@ -110,8 +110,10 @@ void print_faces(uint8_t * buf, struct q3bsp_header * header) printf("faces count: %d\n", count); for (int i = 0; i < count; i++) { q3bsp_face_t * face = &faces[i]; - printf("face [%d]\n", i); - printf(" type=%d n_vertexes=%d n_meshverts=%d texture=%d lightmap=%d\n", face->type, face->n_vertexes, face->n_meshverts, face->texture, face->lm_index); + if (face->texture == 23 || face->texture == 24 || face->type == 4){ + printf("face [%d]\n", i); + printf(" type=%d n_vertexes=%d n_meshverts=%d texture=%d lightmap=%d\n", face->type, face->n_vertexes, face->n_meshverts, face->texture, face->lm_index); + } } } @@ -128,7 +130,7 @@ void debug_print_q3bsp(uint8_t * buf, q3bsp_header_t * header) // header //print_header(header); - if (1) { + if (0) { print_textures(buf, header); } @@ -140,7 +142,7 @@ void debug_print_q3bsp(uint8_t * buf, q3bsp_header_t * header) print_vertexes(buf, header); } - if (0) { + if (1) { print_faces(buf, header); }