From c0c55c06bbbdbb962dee6243a1187918eeadbd7b Mon Sep 17 00:00:00 2001 From: a dinosaur Date: Mon, 16 Jun 2025 00:12:59 +1000 Subject: [PATCH] shaders: Implement HLSL for lessons 2-8 --- data/shaders/lesson2.pxl.dxb | Bin 0 -> 2704 bytes data/shaders/lesson2.vtx.dxb | Bin 0 -> 3728 bytes data/shaders/lesson3.pxl.dxb | Bin 0 -> 2992 bytes data/shaders/lesson3.vtx.dxb | Bin 0 -> 4084 bytes data/shaders/lesson6.pxl.dxb | Bin 0 -> 3852 bytes data/shaders/lesson6.vtx.dxb | Bin 0 -> 4024 bytes data/shaders/lesson7.pxl.dxb | Bin 0 -> 4056 bytes data/shaders/lesson7.vtx.dxb | Bin 0 -> 5652 bytes data/shaders/lesson8.pxl.dxb | Bin 0 -> 4056 bytes data/shaders/lesson8.vtx.dxb | Bin 0 -> 4276 bytes scripts/compile_shaders.py | 2 +- src/shaders/lesson2.hlsl | 31 ++++++++++++++++++ src/shaders/lesson3.hlsl | 34 ++++++++++++++++++++ src/shaders/lesson6.hlsl | 37 ++++++++++++++++++++++ src/shaders/lesson7.hlsl | 59 +++++++++++++++++++++++++++++++++++ src/shaders/lesson8.hlsl | 40 ++++++++++++++++++++++++ 16 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 data/shaders/lesson2.pxl.dxb create mode 100644 data/shaders/lesson2.vtx.dxb create mode 100644 data/shaders/lesson3.pxl.dxb create mode 100644 data/shaders/lesson3.vtx.dxb create mode 100644 data/shaders/lesson6.pxl.dxb create mode 100644 data/shaders/lesson6.vtx.dxb create mode 100644 data/shaders/lesson7.pxl.dxb create mode 100644 data/shaders/lesson7.vtx.dxb create mode 100644 data/shaders/lesson8.pxl.dxb create mode 100644 data/shaders/lesson8.vtx.dxb create mode 100644 src/shaders/lesson2.hlsl create mode 100644 src/shaders/lesson3.hlsl create mode 100644 src/shaders/lesson6.hlsl create mode 100644 src/shaders/lesson7.hlsl create mode 100644 src/shaders/lesson8.hlsl diff --git a/data/shaders/lesson2.pxl.dxb b/data/shaders/lesson2.pxl.dxb new file mode 100644 index 0000000000000000000000000000000000000000..be827dc7088f77f987f9333b27985aeec68514c6 GIT binary patch literal 2704 zcmeH}eM}Q)9LJybO79BwI4EO9io43_Iwh zyP?bq*L3G5D1`^8i*vPXQdnPAP*>5tSETSjG1S7GB;Z0_1S{%@Z>0u! zxqL#I*2ZxQ6GE_<1-xw~b|RarY70}j31!rBOq>_0RC#iIQ6#PL90D;))npFti&)sN zqY50}3D@r}JgJ6XAfCy0tY@4JAI*Y?UGhRs#C z-xn3B^?1YFZY?2?2MM4hjjQO4&ngEkoMbvXh4As&m_<>wy^Phsq*O2s6$l*9`%;Hj z595un1>ubfw00j_N21j}+%h+)pBq>VC~GjxzwwNjEemZlpw?l2kU(uSmIfSpn6V7P zrF|&0sUF9npIHyn3cdH~!v;W82A`OY5ndu#?|}JbV_eWl#6)O)UV&`IX&${hQp}Mz zDdpQ&$$9(RRhB&nd62S8v+H3ng(BMoTz?hj5pcV;1XdnU z<%r&W-<7?lw+WO&!|YdNn~OB56uDc_r_&PrQdjS$*l5+B<2UCg{&p{g_iK|BK@7BC zZ3H0k{H5UapbQI8rAfDMZTtjY5E<)PLb{X+*P^N_TXj<9`ZAMM@7xy}vv=FtPcNptqdQ;VTe-eI$=YBpqfDk6tC9Wx z*6E#xan{4?v9*z7QESC($J)n_(oNS^1vPK%LLcl5YEn}ZFjo@XSz5EnWG$<$({qz& z^3C!k8M90JCnV)joJ}W$hTGwe220{330>5v^lZC1UeW&8i`6cCwkZChl z>=2SUKxcZ9%%OU()r@Yz(1skwY(^W+h^?M6lT6G|1b)khPbk7oitwvb_>>M$Ci>&9 zNF}4vxIW{8az%6c30L|so%S`7al)11M$(6-qHG3qO9h%*!PLUm&X|3S*?`*QsO?b* zbi3Kktiu?Kn5pe#8af?`cc$<=S_L5ODD3$a(;s%ZUpL}%M z0G-x3-F_Qb-cB#~AnEOax8R|Vo#{U!>0JR~zZCtzj5Nv_o1KXnq47uK{7DkOHqL)Y z;P-m*319eKUHE;NFAF)tXTI;?Kz5?czBF1lZ`a+7lS|Vg9IGzS`5#&?LMs4rD1A=U z^ay}Ai{dY@yU|vC;A7^sJI6O>vRv}caw;Bz;aN^upW)Pexb~7$vp9PZPR-s2*!^ct zc}nE2d*q^KrQ981=lUgQ$(c7R%c&L6(Tj3Qh9TXQSQu)q6S@7P3R19y%Go{dl#(KV z?CI-p&EYRj?z<8^fBpQGOEQe7goK*MSwfNRkWf{{9<=3PWhWLoN)&3L;gP<{bA#8R zSu!Q|3i`}dgt9uIT0_VR0&3mGCi_K2aa@@9G}=rsrU5N6$#Uz_|#b!3MDa zX`<)u7qBo9?}0>W?>z!JqGX~qMY5moYl=>%B;>G28a>o;IiWRwWa~&rzF_Cua5n^5 zZG*0+(qx5ffgc%cj$X3m|6z-focU%E@u)=hy9VL{EIpJ}$j#1LrU6dU^AP~?d;xG8 t4C?+rC8s!gR9A#ZTia_jf zcR?0#wTnVsAtAd#2(781_(AX^hvln4K!IwC5k06t)MG8xw8ykLY2PfY(VVpZw12ec zyBJvV(x0Lr1wMNix3=K+1V&c9ARgeCB)kjTSGB^l^MNPVyanOgCBp5m~J z;y4u|jvyq7&LNwt<4s~(8CTs3q#=sgc#)~juU{ok(HU=5%++Em(NdfF)|RS|-{~-z_NrTI8_Zwc zKIH*2D7!o6h7GXCDfa{sM*34q_bYv(4UL|l zsC{@}O|D;Xm)!XWnJV^P4uW`y3wsR3tRXztP?n2AUHE}Yls_&iha+$;XYfJ`UPR;h zCQ*SyDRn3XEY1at^Y1+qRuY4kvv~11f1bii79&{^L|BZRhb{{aWAbN25N8R&Zc#Qr zeGmYsisn;K&kI>b(Ey$aJ4qge#sIj{c4B7Bv`@3xA%6s6mOL?@g#G-4_?X2~wGJd!c** zO)|ytJYvJ>J};&2Na87%mQ{&JO@XaIS5RZ^whklmJeS0xEM&N@uI5+WI$d4DH45{< zdd)QTJAMWoPGEAITCIGHi(E_Bd6aI67C7GCj5b~vxSpbeKLiy zXh#Mep;nIPORC12=p9p4fNbB|Fg($4D{Oyjx106F-WSTt5BoLJ;z`VE4#)a2t0kOh zIFsQ!s3k{w$PqRIeU}_(l_q|A+xs6`Zq85MoxC|6M63^!)6GJ~Rlb*Jrf_J69MuZ> z;q*w4FdW<6k)c8(K)AR`(r-h@nXETmTAG?@iaHS56?v{(z;l~0Cr14})4xS_wB)a0 z8@iBV=qv4L)Q1($u5B;w+EtPtoVO!eU7V`7I7^!kY&$lc{%Oa)ycgE>D5 zS{u0HzUfx?sC9o`!*JNex`y8-3rrz9N`niti+2C4Fe|$#mG_>zwAp2wPx`B-rt4nY zB-uJ$B7-YP7wR@sr zcr014;MjMrj;|rK-u<_{bHvEHYGp)apHZR3%S!Pga{)OIT>nUkKG%xYkP4q(+wx0R z?;OU-9#-Ksimn?{t}~+RMoW#w8vIQHFN-&5GOw`-xH9rI8hxQ6x)O~VT@aVB_?x--+FU~+9JL0G z$)I8Jk`;K#6DJ6}M{C$l7z!kYLbIXFtb6Ic*qfzyJtKmhz)JI)GqdNMGL%#T44O&PUiZm#9 zFRVc`WZ2V=mz#CbvszbmjO*OEh+DV<8UQJje9MK{P`9H3`k-)E-(1u$R%2-?RLVV| zOps``Ukv2Gt_w~7=lf63N{eKxM04_`PC;A-DxVXQ>d(sTJt7t6 z{ii)5h`>7K64JS($OH4c#?S(pyeEL?fhn$ODVH^r65U0-CB#5<59Zqxj!j^4@Goln zCCplCukG3(qCZ4Vn}zzb`CF?;&UNe@sy=X?D*i@o50%r6LcJ%f?YB>bkR+d>gJn~c z(N<;iM_HvTB^w|=o|<~_Y5L^Q$n@PdO#Z!)=w;_ay1P%W?OKUURFanmf{kM*lhhm8 zE53b2$CNJqtB&j}_g|IOQbIiHUmGU$L zdAW7;;E#e`@4q~DP_5pmg3l(`cfYH@|J(I9g9hNI@Z5V~@|P$m;VU?Ztv&Hzqm{}5 z8&4ALV!1%&jR1eX0O(mddqA_zRxRggX^F%~pD`}WGy$664<6ki)fpuLfY9p@er=m{ zxY~xmn9%LYT`dBHX{50hK?TzoL;CY^h%;`|)mPeb6~Guo*m8SmV-VH1l#!>2ocvaY zx+gh@X{11lK*2OJM2n!G{e9p&Ztx>R&XmrxWb-PCECx_mg+VmLcJo|Bcg<&p-{=QO z3`I6aMWA^uaU=yW+l&nj)tv3&Ilc1BpFff=ro7?$iREwlC9Ee};k&ClEV@GlS+oQH zs~KU3j93CdoFXiPbO+F1T3iYGIKcNU;CsdwR{&8sYZmZ*7XI*a?wzXV+$@f8-(DR3 E6FFL-00000 literal 0 HcmV?d00001 diff --git a/data/shaders/lesson3.pxl.dxb b/data/shaders/lesson3.pxl.dxb new file mode 100644 index 0000000000000000000000000000000000000000..63b2cf730a01d83a105baa218b07b3e7cc48335b GIT binary patch literal 2992 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 literal 0 HcmV?d00001 diff --git a/data/shaders/lesson6.pxl.dxb b/data/shaders/lesson6.pxl.dxb new file mode 100644 index 0000000000000000000000000000000000000000..9db1e394c7fc0ace01397eaddd41be0e4ef49421 GIT binary patch literal 3852 zcmeHKYgAKL7Cy-h_ufEqb1_i^iFgCTh|+0z$U{P#2OyMCgHT4Nc1%zZ)_{gbDPm_< zUJ}rB8YC*h3=>2xW7X1X7smSFr4tb~QtjYl9H@wPN-d+d>P*+_oEw2fyZUEl{>%^e z%07Faz4zVwoO91P-%avLrRosp@t4;c@&ysyO9q#oKK%^?0Knk^fI%sPtcH9P@&x3Y z(5c1&D1@Aynl6Q6n$okEMQUM>33wVs{G$4 z)u2rbh7urCiReB^Ca2~&`G{B0>pF97vvU+Vg(v`8Xm5f8PF|U=rVG-wG|;Y8b={J1 z0H}vHKNIC0Hy`>iV@SQi%}PhfsD$kd3n$bE4+vsy%QFa4n9A*b%DrTiARZTH_(rX$ zO|uIqRch@%5D=vtO(X2}!F?JlM(ed}pK|xl} z=n?QRBDwF?u4JddlgVQ81!Y~<3avG^(7LG*fjajC4N>ADs$mOw)l#g?iIr1WiJd5& zQmUquQY}UYc+f9qgjLG1YAsgbLB~j}@>!&ofEk`ejzO0bgE1w;1k5v;!D~^qOdmV| zYGf!my^lGYND9Ec>m}iX7&(9&%uCWyqrrQ0=pN+*kupB(;OCLE zKSTeV8`jB?1lLJW<`AhC;W%h#n?Ny$<@CK-f_HFxwfTI@z;&`%?HruwA8P6uym?H$ z>Nkp$7xrD=chZ$f`mQ%=WFlssNh9Z5g0FXww=g&w)GQ>|0pPk8eZb;(P+V-Ba1%Daao|-$B8W)Nmu#dQgcAUFFPl8<=wyx^umAc}} z{IYD*9wMOSy!e;GRl8SzDq0nA!vVroHFtx55&JmzXK}f)aiPvd^&>9No$ehzF4xJ+ zTj+JTkjegNDV?Jz|E=_O*%i8q{A|-9m?&en=nt!duDsqP`s+;xMI47!Z6~j~F2l;1 zY#NK`_fKO}G;R?0jfe{bjHFssyrtKsG+>*mu=2)I&KTf*MG}t;L^MYk)YCohVyn17 z>f;SFiv|#Qrju+)(m<81LXU06u}x`Ky&kL9Bb8NFJ!K6T@F&LY#0WgSQr_(eVnRbi zlYR4UNyI~vc|E$I0%=|133H-Hm2ec1oiNKRNaDbRpi+x%F2v#rt!1z^SoLs=_1CZNS?b@JlZNA@U}N~;(m#^&p5AN zhkj;Wp*Bagfw`FT{6Fsxt%4gN~ zd2tTv@usDnuGe{%G(f2>i>#EVR+w%3L(c= zU(RPSuSqF(q@p8?2?1y~MfRgcee8n1o|rxld8r08QQ9l0#okyW#I-7E2^9>SVfd<# zB^_Znvx~Ke`+@CHc*KQw&O5Hoy>er9;2YPQZ?IYm!|*LfBvcrFCR(x3$@Ob3S$&rq z^bbaI`__({mX^J>VR%Z6g4)UL5!$+I@^SN5U-oH9^GJx9%M>~o4dL&q@Nw^zrWqR|6b3%{{5`nc~P=mQE^LMvi8oHxZ|#Hh3GjR{6FD=jsjp2 zJQIADB7#09K9C=!f?7upM}BU$awIF95f}|^At)P|w4i8hDk{$o zC>%YzzBtfg6D|O_$;d#l&e`W`yAc=@^EU-YsS$|Z6ST1z(k6=4#x_fvO3=W0> X)#?3b_Bwvx)3Rs!>^}5A6afAW8Nsu9 literal 0 HcmV?d00001 diff --git a/data/shaders/lesson6.vtx.dxb b/data/shaders/lesson6.vtx.dxb new file mode 100644 index 0000000000000000000000000000000000000000..780dd223768364a1dd1e081faaaf0861843c3856 GIT binary patch literal 4024 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 OTsrbCNe^GlA^I0BT=Ad) literal 0 HcmV?d00001 diff --git a/data/shaders/lesson7.vtx.dxb b/data/shaders/lesson7.vtx.dxb new file mode 100644 index 0000000000000000000000000000000000000000..005090342abc760fd320d4f682d8f3d776612b2d GIT binary patch literal 5652 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 OTsrbCNe^GlA^I0BT=Ad) literal 0 HcmV?d00001 diff --git a/data/shaders/lesson8.vtx.dxb b/data/shaders/lesson8.vtx.dxb new file mode 100644 index 0000000000000000000000000000000000000000..f7aa6959e0a55951a400419d668a202f123ac26b GIT binary patch literal 4276 zcmeHKeNaPsEd#Ar3H5L0Tcvl_}CVwI88ukYzc-BDPTKI zNJxT>HdL*tbZsJ*(rPWWtctZA0;q`4Qipc2QWq;A-JzCo?M~b6?CyObLEGK`cK_*2 z&v5TO_ndQo=iGDeyN9F~DU^S(-Lq|dGv|?*n(>zKJXsC{0MJbUfWt8rwp`dcVM~CD zEG7WsECBAoR*;!Z!C{fI3m%RugfnOY{PL_tEdYp*$7x_6(R$h+O|+io5uagUMv-#M zmi%;Dw*_LGX&r2SY%Q&T&mlz-&K~Mlf{c~Cm z!6g1UGu=C<^Wtx`iuOU$jE@Qm<%Kp305$Y{6b6xAl$}clLEGt}T%qi}5eaku3Y2l0 zNN>EfPu#e?RX&JjV}x|$OAIr2WdJKI0)3&xAjn`UUg9W@5mLbhmM|w!ns3W;2uNk7 z?R5|)RZL~^9j#FVDtVsKe$zC)2aU~%IeIVu{X%;9tga#rXbGKWryw+uPJX_hm=b-b)FHZ-@T@)7H35$KcFG6uw=?YuI z3^-2gp%iZmO!m0hkzn+K`WO+C%}2S*31!GwKmXywOF&KM<>ya|~_ z!>C}Kg6dvtt=gKTwKixG$n)M&@pYs8M%aU(MhdTX;WZ?#bMUMDOue6}QscD2DE8F@ zW_2>WQH|G*VlxC@w_vH}Lxcs(8K`pM&_*}Ohd4e2uS9ud@#6!)l8OkO1Bz zFA47^$bkPtqox`Ri>uUw%NY#s{f36JB`gpEM`?sp5Eh*4u(P8dzKANLR#HqAH$bF9 zn^oAfDkMOt5>4k38IJ{K$X{QP35Hy(Kw}AS^p6ZO6_GWp8&Ds)%^)FY13cG55Kn~U zIx?A|>4{{&SZUm!^B$*tZ4RTQ%2Q>mYH|0tFEivjI5{=(g>muq zwh7c&AI(C$- zeyK|?>hy>^Jpea}20WODH)XhT;M1jJ*Na8lK5x5@x<_HS-SW;kb-!X%F6#1##yl$A zESm6G%4DVll_}9+V(_s<8?wav2#J?u2VIr%J_CHqLyoaYeiFCdf$#3pIFa9hB!OCw zJvR>$hR1L8&CW!#%mYy)x_xwBa}#E+e)Qq^Al!aNY3$c?Pw#`mLb2obpjkyU=aJ3% zRP&mOiaK5Fj_qZYwFOPCz_24PYpD zz)eZHfRScXZZP-T6$ZSa9uUn1ReHQ>>pD|dU zU|Fk#)@rAczs%%R*ksNCrE z_GkMy98hksAt?v?*F&d2Hl>UqDP8^c!ASgBJyK0rYxD@c7qwMCXnm#=Z*&?{rwl=r zvY_cv{yfZA6$wBX95L7V^n~C;Y;rHJqJKK&#r0@m9+CGIP-Y7ahVL)v9ycZwfB3iW z6zL!|m^so#ETMRZzDfP(m%uchIySZRjE?!K{`-$^-T7IqazVMjR!#p}tA5$F zYT@|l{{K>|_z>v7)hgnG%Ec&C@u&09!c8Tpi@V1~us#N=2u_^yb^~D1m5{DYC2;&- zYZH7jPsxScz`B}HH0l~fvg72vtC^vw;+lcr#1l%Sg7qp71*yGgNX^y1E|{;%^Hx(Nhh!Aw64fDbgt{^LE8)032vxa z@j0pe+)~zg;>!D$oo9R1rqO1`p_t?AJJ0kaoa;_L!&by?CT!&<*Fle^S%|FdA5@db zmr@h&ifZf9zw`d0H+oQ`zKEL^mzJ$7f_35q=O36f%XEdC#C_6$J>8`tkR(_qLO;a_ zRrB7FlOrqlo*3R+xrr!@?5}xu?f$l$-8F3?#OA^I;<>)@xuK~JG&5Y9dT3)ebxPXP zk$g&eI!2yv;eMQPvf|F$k5rzhsN6I^Mz76T`+iPT+fi8f+d|TJ!SzEEvr~6nH?B_1 z&UB!}5!jaJQzaU~8wvapL*ZCI6ExB{@6j0~)$BV*8Kqj6QVwfYp180S*Pkj=w@ zixV_1;TKv3ut&2z+CI`AP4xQ|<@4)GslxpKndxE_B)9auGr-M9bI7;}&Dfc-M3 XLc;xtdd^5Kdh;xEGMAzL-~Imv>xUYf literal 0 HcmV?d00001 diff --git a/scripts/compile_shaders.py b/scripts/compile_shaders.py index c5436c6..b48c92c 100755 --- a/scripts/compile_shaders.py +++ b/scripts/compile_shaders.py @@ -213,7 +213,7 @@ def compile_dxbc_shader(shader: Shader, type: str, flags: list[str] | None = Non def compile_shaders() -> None: build_spirv = True build_metal = True - build_dxil = False + build_dxil = True build_dxbc = False lessons = [ "lesson2", "lesson3", "lesson6", "lesson7", "lesson8", "lesson9" ] src_dir = Path("src/shaders") diff --git a/src/shaders/lesson2.hlsl b/src/shaders/lesson2.hlsl new file mode 100644 index 0000000..bd36137 --- /dev/null +++ b/src/shaders/lesson2.hlsl @@ -0,0 +1,31 @@ +/* + * SPDX-FileCopyrightText: (C) 2025 a dinosaur + * SPDX-License-Identifier: Zlib + */ + +struct VertexInput +{ + float3 position : TEXCOORD0; +}; + +cbuffer VertexUniform : register(b0, space1) +{ + float4x4 viewproj : packoffset(c0); +}; + +struct Vertex2Pixel +{ + float4 position : SV_Position; +}; + +Vertex2Pixel VertexMain(VertexInput input) +{ + Vertex2Pixel output; + output.position = mul(viewproj, float4(input.position, 1.0)); + return output; +} + +half4 PixelMain(Vertex2Pixel input) : SV_Target0 +{ + return half4(1.0, 1.0, 1.0, 1.0); +} diff --git a/src/shaders/lesson3.hlsl b/src/shaders/lesson3.hlsl new file mode 100644 index 0000000..8f4f588 --- /dev/null +++ b/src/shaders/lesson3.hlsl @@ -0,0 +1,34 @@ +/* + * SPDX-FileCopyrightText: (C) 2025 a dinosaur + * SPDX-License-Identifier: Zlib + */ + +struct VertexInput +{ + float3 position : TEXCOORD0; + float4 color : TEXCOORD1; +}; + +cbuffer VertexUniform : register(b0, space1) +{ + float4x4 viewproj : packoffset(c0); +}; + +struct Vertex2Pixel +{ + float4 position : SV_Position; + half4 color : COLOR0; +}; + +Vertex2Pixel VertexMain(VertexInput input) +{ + Vertex2Pixel output; + output.position = mul(viewproj, float4(input.position, 1.0)); + output.color = half4(input.color); + return output; +} + +half4 PixelMain(Vertex2Pixel input) : SV_Target0 +{ + return input.color; +} diff --git a/src/shaders/lesson6.hlsl b/src/shaders/lesson6.hlsl new file mode 100644 index 0000000..59a830d --- /dev/null +++ b/src/shaders/lesson6.hlsl @@ -0,0 +1,37 @@ +/* + * SPDX-FileCopyrightText: (C) 2025 a dinosaur + * SPDX-License-Identifier: Zlib + */ + +struct VertexInput +{ + float3 position : TEXCOORD0; + float2 texcoord : TEXCOORD1; +}; + +cbuffer VertexUniform : register(b0, space1) +{ + float4x4 viewproj : packoffset(c0); +}; + +struct Vertex2Pixel +{ + float4 position : SV_Position; + float2 texcoord : TEXCOORD0; +}; + +Vertex2Pixel VertexMain(VertexInput input) +{ + Vertex2Pixel output; + output.position = mul(viewproj, float4(input.position, 1.0)); + output.texcoord = input.texcoord; + return output; +} + +Texture2D Texture : register(t0, space2); +SamplerState Sampler : register(s0, space2); + +half4 PixelMain(Vertex2Pixel input) : SV_Target0 +{ + return Texture.Sample(Sampler, input.texcoord); +} diff --git a/src/shaders/lesson7.hlsl b/src/shaders/lesson7.hlsl new file mode 100644 index 0000000..9144690 --- /dev/null +++ b/src/shaders/lesson7.hlsl @@ -0,0 +1,59 @@ +/* + * SPDX-FileCopyrightText: (C) 2025 a dinosaur + * SPDX-License-Identifier: Zlib + */ + +struct VertexInput +{ + float3 position : TEXCOORD0; + float2 texcoord : TEXCOORD1; + float3 normal : TEXCOORD2; +}; + +cbuffer VertexUniform : register(b0, space1) +{ + float4x4 modelView : packoffset(c0); + float4x4 projection : packoffset(c4); +}; + +cbuffer LightUniform : register(b1, space1) +{ + float4 lightAmbient : packoffset(c0); + float4 lightDiffuse : packoffset(c1); + float4 lightPosition : packoffset(c2); +}; + +struct Vertex2Pixel +{ + float4 position : SV_Position; + float2 texcoord : TEXCOORD0; + half4 color : COLOR0; +}; + +Vertex2Pixel VertexMain(VertexInput input) +{ + const float4 position = mul(modelView, float4(input.position, 1.0)); + const float3 normal = normalize(mul(modelView, float4(input.normal, 0.0))).xyz; + + const float3 lightVec = lightPosition.xyz - position.xyz; + const float lightDist2 = dot(lightVec, lightVec); + const float3 dir = rsqrt(lightDist2) * lightVec; + const float lambert = max(0.0, dot(normal, dir)); + + const half3 ambient = 0.04 + 0.2 * half3(lightAmbient.rgb); + const half3 diffuse = 0.8 * half3(lightDiffuse.rgb); + + Vertex2Pixel output; + output.position = mul(projection, position); + output.texcoord = input.texcoord; + output.color = half4(ambient + lambert * diffuse, 1.0); + return output; +} + +Texture2D Texture : register(t0, space2); +SamplerState Sampler : register(s0, space2); + +half4 PixelMain(Vertex2Pixel input) : SV_Target0 +{ + return input.color * Texture.Sample(Sampler, input.texcoord); +} diff --git a/src/shaders/lesson8.hlsl b/src/shaders/lesson8.hlsl new file mode 100644 index 0000000..066b817 --- /dev/null +++ b/src/shaders/lesson8.hlsl @@ -0,0 +1,40 @@ +/* + * SPDX-FileCopyrightText: (C) 2025 a dinosaur + * SPDX-License-Identifier: Zlib + */ + +struct VertexInput +{ + float3 position : TEXCOORD0; + float2 texcoord : TEXCOORD1; +}; + +cbuffer VertexUniform : register(b0, space1) +{ + float4x4 viewproj : packoffset(c0); + float4 color : packoffset(c4); +}; + +struct Vertex2Pixel +{ + float4 position : SV_Position; + float2 texcoord : TEXCOORD0; + half4 color : COLOR0; +}; + +Vertex2Pixel VertexMain(VertexInput input) +{ + Vertex2Pixel output; + output.position = mul(viewproj, float4(input.position, 1.0)); + output.texcoord = input.texcoord; + output.color = half4(color); + return output; +} + +Texture2D Texture : register(t0, space2); +SamplerState Sampler : register(s0, space2); + +half4 PixelMain(Vertex2Pixel input) : SV_Target0 +{ + return input.color * Texture.Sample(Sampler, input.texcoord); +}