From 5bc4375265b5eece93dd8b94639c2d19cbae2758 Mon Sep 17 00:00:00 2001 From: Patedam Date: Sun, 9 Aug 2026 17:59:37 -0400 Subject: [PATCH] Added way to set global light from game. + Some clean up in the mesh renderer --- Assets/compiled/Debug.vert.dxil | Bin 5156 -> 5144 bytes Assets/compiled/ImGui.frag.dxil | Bin 4664 -> 4652 bytes Assets/compiled/ImGui.vert.dxil | Bin 5120 -> 5096 bytes Assets/compiled/Skybox.vert.dxil | Bin 5504 -> 5492 bytes Assets/compiled/SolidColor.frag.dxil | Bin 5788 -> 5788 bytes Assets/compiled/Triangle.vert.dxil | Bin 6072 -> 6108 bytes Assets/source/RootConstants.hlsl | 24 +++++++++-------- Assets/source/Triangle.vert.hlsl | 2 +- Game/game.cpp | 6 +++++ Juliet/include/Graphics/MeshRenderer.h | 1 + Juliet/include/Graphics/PushConstants.h | 20 +++++++------- Juliet/src/Graphics/DebugDisplayRenderer.cpp | 4 --- Juliet/src/Graphics/MeshRenderer.cpp | 27 ++++++++++++++----- misc/build.bat | 2 +- misc/recompile_shaders.bat | 8 +++++- 15 files changed, 60 insertions(+), 34 deletions(-) diff --git a/Assets/compiled/Debug.vert.dxil b/Assets/compiled/Debug.vert.dxil index aab61ce23d25cee0a2c0dfd5d81366bf29f09f26..cb1571104fbb69cf68977b2ea40d62fb96ba72d2 100644 GIT binary patch delta 495 zcmZ3YF+)SrCBn%$>|4Q&r}v+T?OQ7K+;4WGA|nF>gTzEhY1ThnK*mPPYDQHTP6mcF z21bTJCI$wV2u~k2pc(<7G993}lkhI0Qzpx@%w>$2yqiT@l*@cU1GCrS4a{6N3qCM&1uRftZsy_SU=qklY2AA9e|@2^Oymzyl~B#i XD%_i}1pVf}JVuO+4Vw-4zOVuSjzzdx delta 506 zcmbQCu|z}CCBn(sfLSiu?5)I`jpeqdHit6KVq{=oP?;zx&C0gK}WMD{R zU}OkkVqkEI@bqB=su2JxvjB=aIUl&E$iu+kz1fkwlaaNlfJd2U@_8OYJ10(kP~&Kp$T8>$T;Xx>5eIAU#ici=s(`KL-FtQCMWE$|HxdMv z1^1*Jl9gGYN3_24frCD3J7#J38wCrY7-NV7a zkOmaiXJTM*iSYDc1F8`K@|OU`otzKcQ{-V_P}}^HF^7@0B~ijnU~&|*6bFl8MT>il zy!+-FW+_I)hy@&63wcg0RN*pMAi`z1K!KUdc!2{mm+688W-jvu4a{DPH!ySAEcn38 z6|g{ol`CZOaTZ<1_mkK1T2D4$eO50Jd`nVlZou4`kuzf^Nk>ZFV`)A!S^;Z~dn!(9*FxQ~Ndc}tWw>V@s?(J;dXt;Fl!i&6nH|{+N)R4#Q^ulo~Py8H%iiOHSD*BHZC=AQ6Mgs&E-B5aBXhpuo&!yug8(%XC2kv)AGVW-hA*2bj6+7cj7L z1ut-5(U-RE1n#>^X$f<7eJ|&ZH$VK7EEG(UB%pa5^BWEGc1ia%oJE; zLrN23^A#pqB~=S^CntMZJ1NWZ^J-bS*XQIXCFb~K zre~A{B&GeSHCtK4#BF+7_^~O9 zWo>TeU&5ZdnL8>RN@#YR;Z(|XZJT0}!8>7QV-IGthUU#$>|KnTH*?%&6lnVV+NU{o hlbBe+_Qp!9zBii}a81P;Gci2UjEo7JD|olC004P4x&8nE diff --git a/Assets/compiled/ImGui.vert.dxil b/Assets/compiled/ImGui.vert.dxil index fc0ecc41da5e2eb18b1b43386e5de4669b57d48e..91ab909e894c339a17640bfdd1aae597df0b21ea 100644 GIT binary patch delta 770 zcmZqBc%d%k65-_hxpiB>{$uAE>QC0j`6L9`GcqtRybzu!CB^E%&A`4;xUC08pI?P~6G+z&%AC1_rOq6SZ00DjgO|gQ zT~szAyk0g$XWxQDCz8}SoVOoTc(>pXbGCBHk#A~Z$Bs=YYjZRIa_pO$xue7$UXF$A zSLGtYq3TnB<^a|ITJVWEJK4}w>{uAk)B_34P7O|?T-QoF9c4XyRy;X$=h=-zFHQl? zmdFX{2wdTDaF?Fp3g%9);F~g00<$9|Z_3G zNcU~9v?JK`4M2GXgmwmy{6U0vp!Dhlc4anBhNgsuA5NMFm~@vo$tnO-E)W0!FNX}Z delta 790 zcmaE%-k>4n65-^0YR-N=wL?p0SIz$D`+eRsHbw>@5Sb_?#p=V&z>u-gayz4H1SbPS z8UrIk7!w17ON6HnNRa?gnFCPV$@#!NMIHtQ-_4>-&5SGpeTglT=P*mNw9k zypLIf(JX8M2iHQLQwvqN3>JuR87@#@<}zO3z|3X3Ac5IyaRW1#)q(@eT=okXSh<21 zIIwbsF0kQR{9&>Ts}3XUW=~dS#(JgrfW(xP%)E5r7RK8N0$BlT8@FzpA;q1nJzIh2 zCQIT4GYuE%ki3N0=@NSykFSPBZqFxxODEqi;hcAP91x3>E0bR4(IKRitiR2Vt!p; z)!cPX@b>Ho3F+Wll2WoE56E%**K%Ku9d}4kL)OZc7 zF*;y&MAS^_*h$i{GjGR8#ol8{WN7APW8@0eh!9s?w#C@QYN3_!W}}@d=9`T6a2^t1 zljcbh(F)pN=H!^HUXods>XVtCQR19mnpYy+;>ZKETr*^OLawwD+v9zP2F)f3%oZ~? zx3QmN+{`TSl5w&Pw}7R4XK;F(&J*?*CC0tW6ixL&kvD+@5}7J!ky!y0hef6|j>y#G z)nsH$*c`z(gPE~@^G88*#(Mc4HI_peO$IX#oIK9rXQ#}@&d`)#aJNZ*O`{G_>Oe-5 zK!oCf<6MkDDNdkN!=EP2D^9vQnoN@>Feq@aozS1*q^Zg1d~ znI5>=hnbDhFk%4**Fv6C3stxb7Km^eE>K|RGG5@o%w@VDftkyEK?Aeb;tkAPHVZy5 za|J9=VC4##+{~iM_-V2tul3{?EKll>Oet$~Qx8c`3sal^#4W7N+)-i;FWW-4t5Oj% z3l|vfGTCjkY>TnUu7%sJ%y)4fD#$hHFk5lwz@rS=je9#=H?nT+Tsn2FL#c%hTJZ;kz!UNAK;~+$Mt*;TFf+4Fbgh7aL2j z);k`3#I4n%lh$OABhB-OPs?V5g_C@)cku0C woNU7-AfU*)Dm_j8Wa^zO0SW1f-Hw}MxJt1_$z&hqiIY2d$`~6q@iuS(0E%P5aR2}S delta 528 zcmeyO)u1iu65-@*diBGrW@ZB(kKCw<%oi`uVPs%nXqYG|&Fa9#z!0<1vYJt~gM)z~ zje(ItiHU*1CBoB(4X8!{sH^}e?&N&no+1wegXHF$j6RI4juvf#ZIiW_r8qX^N|zTL zHwf75!_3BL7`A|eYa!36g(_SI3q-gK7bq}u882{P<}zK7!0ffSftkx{!2xD2`vnZF zT)_(*Sh+$cH?wFme%-v5MV_(#6RW73+q7q8W{whTc-a=RU6qQE>0Y_fVB03nLj}G9 zY&pzMTO6OVUHi%=B&@a5V7uiugIz$W3Aqj(7Au|{*mch#31)yp2)u-GW2RudAB7&I#7vo*f|}9ehht zN;X8|CQIT2Gl>?tkm`ik79`zm_io&KqQ>F8ol)`Ef=^(b*91WtqXT9~M9q|rog^JQ z^LC6>>^+vm4`vc98X*gT27oPYd3EN@sV9@}oH+FXX!Z7k3T_LPSi6-)Ox&iYg&&(z zrr73Y{w3_Wo4KRJfrMtq8BV2KV%rsyHu3QsJHT_Pf%iee<_Byu7&lk*?PQ#6z$GA% n6+clq{P4D*{Xg3G>|``uwK;&R6l>JH;bv!KOxXN|r-1_i7s<}N diff --git a/Assets/compiled/SolidColor.frag.dxil b/Assets/compiled/SolidColor.frag.dxil index a31cc50fe7982e021492f7219afcfdb269d7d696..72ba1d98b2f287157281dd0ad4e09e6df496289b 100644 GIT binary patch delta 1829 zcmb7De^3)=8vZuB*(?jhl`L@~2pf?|5qb$C2=!<-(3B!fBTy#&!Q3W@NA>E zY(hvmsK64chuWk%4%6CBIP@%Sb&^UEJ+*mGtf85M{ zGvCZU@B4nw`+VH|lvo{e5&MJ>#3o|2i{BJQW<56i9c+Mh8oe0qi@D-ki>tjP zuJO_^zQL=7@r_;<#`C;3xb%b{#y5KxVBFxP#dwu>Gk$s$?%+ClDJY%Or8`8*Q>Z&j zD=eg92iUp#-RIp}y8GTH+r3Tc#{}8?DFA*1{QF`(Wal4<(;zLcK;N^POP?q@A$w=T zhV}fG#?yVWIY@cS+X(Oa zXv#LVGCW|UUNj6CUpS(u=~dJm3BQzBa|f}{=h8@0)hlex&BX2k^8s0OZEd7iYAL^7 zabnAXCZW?E#A;v6O&?9FYL1kB&U|_|I-@glJEye;QO5@ke8uUm(9ise%3BGEUxpOn zf!l~3bHw64$&F;=&9mrU!_Xp!r}9T=!t4*y553>OyJ|HXz-zj{sNY6&12}0t@uxhFO#}P&J6!1S5VS}=FClAzc4rN4tZu@ z8#>?Cv)eM|Gq<-`+F!M`XC&V@C97HwzvCbJ;_S%D9?!@`c@&qiZQtW9b&XB+dm1W5 zZ$~8@|6>g`P;=yVUtqAv_4n*{xxQL;^ILuOSZd4k(NyWIva}UMNbBofeP&yw5U#5f86#vBbNY2}N*?sj>GSf^O4=V6 zifZ@lZDadWfZjwKSTyWrL^hhD zUJG3gD!fphxf{?J>Pp$y1SG#(Mq?=ln+Zw%OxG{G5YEz)MnC$u<)c0VZBk3j09|Hw zb5sag?Pn-KhczNZgV!1)d;O?cZT3glpG~&~O=SDlPKpxJ42jpU%$gKg+|qRS_>R#T zpe16mx2oZJsa_^xa~Mo7Lru%!N(20ItX{@F!c{E1i~O}LctKf+qD2QYV_b`!R3^Z- zbHNSKjo`P}X(Sbu2vbmB)+Hg^Si30YugObBdi+vONuiwhW+PQcFvO!6`fywU<)KPABR0|0c%4{7JZz*l73AIf)0ad=! z$-ClLKqkIFK3V^JIVW8I=l4Ly%@9{VaR(zmdGlJ0)CX`YOOCpOkPs+KRZ5wx>6!6M zPHmz5Gmq4U8uuURGV`j)>yNCT07im+wg3PC delta 1888 zcma)+eNYp38pn5&-OUn`us{f_39=y&6N^p~h47NYyfvm8J3*~wij12uT4)g{V5=uO~<)Sr89T;S9fM- z_V@gr{d|AV^Xzv|tUj@tZ!FUrykeMmZvMqhO#UhloqKfkLp}k|B?7>&1BG|NoQVVg z*bM+c0|NkzWv^He5CAZG9i-!WL+HMk0|3=j2ImU(6QfBi8SX%xgilY7>8Bbr#%6 z&6sW@WK)Q}6W{~XJogCI0gY5`_oM6pXEKn@R`~gBrJrE3*ZQ?gcAlSPZanQ^vWxs7 zCVRaffZ1F9TA2NsU&B5x>z5r&c4W!iDj8;f%MoQj5M(6wB95;I{^CI)Mqwwjpwo48 z8C? zvZ1EVZmY3Wzgg8}tZvv<*;HLun+h>FQuMm8#)=mAKMswyuF=%H4*fIvZf_Yb+w^~(lkWLX?H&7B zDi{~cN{?@UXzE@tz5X!2+tjVr5#uCN@6e~Qzur3!isOKyK+)PE)kwB_P<17Np+kh2 zJ&(U?OYl-+5(;pD{mjO zu%C*tq&W>iu>(%oW2>$;_8$s*KmPcPPl~?0+=8+5q8Og)wsWN@OckRm7>Dwya9Wpb9rO+ zn>!nujE^Q`pGWUsoyafv-a23?z8uN8Vt|vL5J|T*me-=uAMWh9IWc+fQ6HpBQ)$va zQ;m#VR1eF+88_#~7i-$5E?8$xGDR&61ZYdsB#A6R{l&lMnBIw=h2W zun&6Gl0&~ds<}K!sE5^~icy*|BG<3Ftj~x;FAjc|Jt(KcgK{u84wE;YroMDFZ)!Z< z+naL6kgn2n4-6NnM`?9=STi(*y$6B`lsGXB^it(1C#l&)tZ?^eKK%Kh!F@A1V0wPw z79(!F9`*|(_Whp`9d!J6Bc2?};3&X9=E9YK(1k;HxTPRS4&^4{%>O!Qpml*ZOe(Y? zH~u%^)Av|AU@hh4XpQ3QKv((gV`sJUuF^2C%koOs587(}zqGb2zSYJzhxt5iB}DuD znVO+60ddDO_BWz6z?ArMSZFO^J<;5NX`Tc@0VhcybusAePzNpoP-i%uwN=}WXVZ^u ztphCK@{4WDsw7APokzyNZlrd4&(i8g-8rPL9=Ye!F&qSrADEj0MQ3zs`w@UZk@3uy zCX7YSb-W;fY|_eV@FNeFk^>mhs9@Cq$P&xv#HYcGb{)Q?tYlYOS$kWj5xe3A50M{f z%ZP%)_OLG;m(!e5ARm;9OiDW$m-|q*uMIxfVlgjN8nXVH>|z2s#hh`T<1fKCqmCI! zjBm!>Gmsru762H;e9VvfzjMvF0emy&oN?R)j z`e2)xy}sVFJzhdG6Q)ZF-n6A1|2D}!pLV_9^{l6q^+b7^_f2Jl$P^-rJy_@(sxOg3 zv1Lj{T+z4URWaU)3cl&xh5N`cEvUsfxy?a%lipJ??fI?xDmUdxOWGAkUvX~#iQQu% zfKJIe5b}ha<`Sv#>45m?VWr@Gi@-_u<+rbcpE8F{TwR($b}7#vV;vy*W4 l1<~bco3k=WhV;1(SDNEvI diff --git a/Assets/compiled/Triangle.vert.dxil b/Assets/compiled/Triangle.vert.dxil index 98e2f65e726ba4db8c8afcf5dff39e5e87b45ab7..5c62082eef5f478c16eca94325ffee5a0da547da 100644 GIT binary patch delta 2415 zcmbtUdr%X19^Xwio7WN+5C|l4i(tg?=%N@NN82P&3mQAYB1em!3;4hq-gsy0BM)Ao z1`iBeBiLy|fT45BBqC4GHZLWmaDt;w=E^ygT8DaaWo#WeZ`$5Q9zHsA|J?quv%lZ> z^Zk5ZpZyNKGW|+Odag9BZ?WC|%{iB2Q8s#g<{iyXAOHZ<%^^J60viAjYw}}o{a={? zZ~y>-QVIa1=Vr=a5`&VkPV!!wX1f!PkoLY;kz{b)=R?Km{L%6?9ie|#pEuWi`H7{z z>3E6x!&bxby90jlh*Pe&P`5+KD6Y}}Lgmrxoc!^xQ#1R*p*O&Nxkd)dgp8RYS-5cx zE8d7vS(}YwDr<|8pt2H;D(W_~h001bE>Kx=BSvFo8&k(RlV~4SYj;Me{Zwb7G}0() z!F#IP6bORSja9JfrnL@u^7u8Z3I>4pxd1=|^(TE(eC&9XXQG&kY7AJXTJHz12gUkC zcmoCD>k0U@($(^Zx~&_s4<5)7d~|nfPFrr&@<6x~9I}fx;!#5}PEDe*2C4+W8$Z zy2g$3NaN|K9lZ)&-26nb2CoXJv45pPE9Fz_Be#^2tFvsOF6Mv+Kh8sDIl@#+lJreQ zX+ge1cIaSHRa&W{v?8DeL_}CkSoSeu&k?zGQNxPRpT&@TiyeDnd`LZ27{4XxT8>D< zbrDplN*c(zy^HQ2ARNXAlLzpTi%bU&^U#7d!kw1hl%}49)(I2M+R)m3g-lkt$zw#j zf7AN@K=VG4%#;w2zo z1UVt~QPQ-(IJa)kOl=-o|9kGW{2^L}2hHFG9rA+5O~G~LO(kmnknEikk}Kp;x~>ct z=L)N4YRfIOz1-ub5n7o?T$7f3E-gi&X!yDCE z^~m-8oLJp?S?_m^=XJ%~R4w7o%I4_yV}H@}qTAd3lUhmVxrZ}jn(65~bB;NZ<6bx8 z(;3zgFX@f3f1Po6lh~nUue}76~+~x0AT4% zaz5UsL;*8Xinrm6ME)_SHIbjErANRlk_%|1ghr`Dau4Bczrx5vY|BI!0Q$}ucrRZk zfNVt?R3|_jMU;4c`2)YvFz@TM;HX^-dSfOG5p;XVIlI;llBc76D!L>@Cs5Xac!ANI z?Avias!~)%&f-S#K=;vc%yS8 zzCFwX3SZ1a$BiPJWUt|zMmK^FjuQDopqPwl5Z8b2xoNN|tG z9@H&j#2Ac)JNfPv#2?+Xjhq$4j3l@-i4oIeEX-QFig;Sh4Qdf z#4!dv%6ElhLBcm?q%vYu#?1v~-WCMCuA&MjoiEk@v|qX5S)2K3SgFq*Opil>C*}-Y6iCd`e|)Mbq^q`6&)(1@y`}E1?zn-jmu&Nm;2w zG-zYyi0fAxGU#49VP18hm)*>MIon#a74auq2Ut&?le7D|>;tan%@$?u3-$%({#AR! z0O_9e%v|JkFL=RhA-lH19>wlQPi1lAGXNB#y5cH2Vr~}1{7gKgo@&2puUy3s j)@_)S#=2$`d8-bTSkhtO1-orF^m(&mg8(A;srUIWMAvRL delta 2251 zcmbtUeN?-XvKOVmVouFxgkWPcn;PNQeiYfDA)l7s|+nW zA&Ci4D1#Ff4!C(CexP!CE`=gEca{VW)>a&#wka~kC<5JdV{UbBr~9}WA5Q+={o|hd zzR&OZJ-_FD-rt?tI3@E zrm3pb`Qho-?`Qi1%VjtBIB5189NtaByX3sks;f3E$?KRMov}Ob*jG}SkS3R>@$OvY}FhSh_6ND zec~@1aS11?MKcEfM|i-qnE-7^NTzYfpuS9yXtl^?cN^dXUbN3+H|pW6R=mqBE9M!@ z+H8HBwB@C%TdyW0Ur)FZ)yZd>kzkHol*k$3m@};+&8x-whPNo&LE4s$ncj5|z&T!Y zjum)C-raF2<|PK-!{99<1y3u@KD>5c`XMjTC|C&5?xkebhT}Je&s6# zrALn(&wTH2>CyN1S}GPb_JxF}%#^YeDpfSi1)z7DzZZhMj@%$I6zbUJ*PD!EC8LKQ zdd}TQ`^oIsZ#Sj*9DA1Wvd_T_>l}QN*KWO|Z;}{qf=Gl1EC$AFIQ(vA111AJi9XR8@CGcFVTQDVLW)yh=wLwWF=Rd?OTg3vJsxQq zDXl6a+EC!+Ylt?2=j0EU4fpJnec*e&);0q#cQ7`k3Fj1+AtPBYsHpez7IIbcK+Mp16idgZ>+T2n87hQ3c2JWR7>k@gC zukE|Z-5SoH-5Y7obLkBV)VjL_KNra60Fvr?kZnF zm#AQ`n|74eIj zvg#)|4J>zR-4HW`{C_O@brAthK18(P94FsOw5f&5$J1o`Cp)>%^Mm!x`=(Fog1*K5 zo~`e^%-8u_=>tPss)yILZCuln!`h_Sip8q|%CSCY6{~l-w67#c9*&kU7;NbRzS_9;Zl>|lhAmz$)|8MCUZ9ANW`k%m^XbZ z`pp^m?<+ZC@#Z~(8>d)dYgy}lN^YG7r-`O$ibGiyv+!2rebG(;N)BI#c5V@kr6XRmVbU#n1ViGiA UYl4}uM{)LraFK>&{u%)M2W-IIsOpened ? "Opened" : "Closed"); printf("Rock has %d health points\n", rock->Health); + + // Summer at 2pm lighting + Vector3 sunDirection = { -0.2f, -0.9f, -0.3f }; + Vector3 sunColor = { 1.0f, 0.95f, 0.85f }; + float ambientIntensity = 0.4f; + SetGlobalLight(sunDirection, sunColor, ambientIntensity); } GameMode previousFrameMode = gGameState->Mode; diff --git a/Juliet/include/Graphics/MeshRenderer.h b/Juliet/include/Graphics/MeshRenderer.h index fb845c6..d949182 100644 --- a/Juliet/include/Graphics/MeshRenderer.h +++ b/Juliet/include/Graphics/MeshRenderer.h @@ -41,6 +41,7 @@ namespace Juliet JULIET_API void SetPointLightRadius(LightID id, float radius); JULIET_API void SetPointLightIntensity(LightID id, float intensity); JULIET_API void ClearPointLights(); + JULIET_API void SetGlobalLight(const Vector3& direction, const Vector3& color, float ambientIntensity); // Assets & Instances [[nodiscard]] JULIET_API MeshAssetID GetOrCreateMeshAsset(String name); diff --git a/Juliet/include/Graphics/PushConstants.h b/Juliet/include/Graphics/PushConstants.h index 620c0e7..1739fe8 100644 --- a/Juliet/include/Graphics/PushConstants.h +++ b/Juliet/include/Graphics/PushConstants.h @@ -14,17 +14,19 @@ namespace Juliet uint32 BufferIndex; uint32 TextureIndex; uint32 VertexOffset; - uint32 Padding; + uint32 LightBufferIndex; + uint32 ActiveLightCount; + float GlobalAmbientIntensity; + + Vector3 GlobalLightDirection; + uint32 Pad1; + + Vector3 GlobalLightColor; + uint32 Pad2; + float Scale[2]; float Translate[2]; - float Padding2[2]; - Vector3 GlobalLightDirection; - float GlobalLightPad; - Vector3 GlobalLightColor; - float GlobalAmbientIntensity; - - uint32 LightBufferIndex; - uint32 ActiveLightCount; + Vector4 MeshAlbedo; }; } // namespace Juliet diff --git a/Juliet/src/Graphics/DebugDisplayRenderer.cpp b/Juliet/src/Graphics/DebugDisplayRenderer.cpp index 865ad1d..147bce2 100644 --- a/Juliet/src/Graphics/DebugDisplayRenderer.cpp +++ b/Juliet/src/Graphics/DebugDisplayRenderer.cpp @@ -310,13 +310,11 @@ namespace Juliet pushData.BufferIndex = bufferIndex; pushData.TextureIndex = 0; pushData.VertexOffset = 0; // Depth-tested vertices start at 0 - pushData.Padding = 0; pushData.Scale[0] = 1.0f; pushData.Scale[1] = 1.0f; pushData.Translate[0] = 0.0f; pushData.Translate[1] = 0.0f; // Dummy light data as we don't light debug primitives pushData.GlobalLightDirection = {0,0,-1}; - pushData.GlobalLightPad = 0; pushData.GlobalLightColor = {1,1,1}; pushData.GlobalAmbientIntensity = 1.0f; @@ -338,13 +336,11 @@ namespace Juliet pushData.BufferIndex = bufferIndex; pushData.TextureIndex = 0; pushData.VertexOffset = kMaxDebugVertices / 2; // Overlay vertices start at half - pushData.Padding = 0; pushData.Scale[0] = 1.0f; pushData.Scale[1] = 1.0f; pushData.Translate[0] = 0.0f; pushData.Translate[1] = 0.0f; // Dummy light data as we don't light debug primitives pushData.GlobalLightDirection = {0,0,-1}; - pushData.GlobalLightPad = 0; pushData.GlobalLightColor = {1,1,1}; pushData.GlobalAmbientIntensity = 1.0f; diff --git a/Juliet/src/Graphics/MeshRenderer.cpp b/Juliet/src/Graphics/MeshRenderer.cpp index 8863ec7..c0ca3dc 100644 --- a/Juliet/src/Graphics/MeshRenderer.cpp +++ b/Juliet/src/Graphics/MeshRenderer.cpp @@ -33,6 +33,10 @@ namespace Juliet PointLight* MappedLights = nullptr; Matrix* MappedTransforms = nullptr; + + Vector3 GlobalLightDirection = { 0.0f, -1.0f, 0.0f }; + Vector3 GlobalLightColor = { 0.0f, 0.0f, 0.0f }; + float GlobalAmbientIntensity = 0.0f; }; MeshRendererState g_MeshRenderer; @@ -59,6 +63,10 @@ namespace Juliet CubePrimitiveMeshAssetID = CreateCubePrimitive(); QuadPrimitiveMeshAssetID = CreateQuadPrimitive(); // SpherePrimitiveMeshAssetID = CreateSpherePrimitive(); // Will implement later + + // Create default material asset (ID = 0) + MaterialAsset defaultMaterial = {}; + g_MeshRenderer.MaterialAssets.PushBack(defaultMaterial); } bool InitializeMeshRendererGraphics(NonNullPtr device, NonNullPtr window) @@ -282,9 +290,9 @@ namespace Juliet pushData.LightBufferIndex = lightDescriptorIndex; pushData.TransformsBufferIndex = transformsDescriptorIndex; pushData.ActiveLightCount = static_cast(g_MeshRenderer.PointLights.Count); - pushData.GlobalLightDirection = { 0.0f, -1.0f, 0.0f }; - pushData.GlobalLightColor = { 0.0f, 0.0f, 0.0f }; - pushData.GlobalAmbientIntensity = 0.0f; + pushData.GlobalLightDirection = g_MeshRenderer.GlobalLightDirection; + pushData.GlobalLightColor = g_MeshRenderer.GlobalLightColor; + pushData.GlobalAmbientIntensity = g_MeshRenderer.GlobalAmbientIntensity; SetIndexBuffer(cmdList, g_MeshRenderer.IndexBuffer, IndexFormat::UInt16, g_MeshRenderer.Indices.Count, 0); @@ -297,18 +305,16 @@ namespace Juliet } MeshAsset& meshAsset = g_MeshRenderer.MeshAssets.Data[instance.MeshAsset]; - // If we used MaterialAsset, we would pass properties here. - // For now, the shader doesn't read material color, or maybe we can pass it if PushData supports it. - // pushData has GlobalLightColor, but no individual mesh color yet. We can just keep it simple. + MaterialAsset& materialAsset = g_MeshRenderer.MaterialAssets.Data[instance.MaterialAsset]; pushData.MeshIndex = meshIndex; pushData.TextureIndex = 0; // Would be instance.MaterialAsset.BaseColorTexture later pushData.VertexOffset = static_cast(meshAsset.VertexOffset); - pushData.Padding = 0; pushData.Scale[0] = 1.0f; pushData.Scale[1] = 1.0f; pushData.Translate[0] = 0.0f; pushData.Translate[1] = 0.0f; + pushData.MeshAlbedo = materialAsset.AlbedoColor; SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData); DrawIndexedPrimitives(pass, static_cast(meshAsset.IndexCount), 1, static_cast(meshAsset.IndexOffset), static_cast(meshAsset.VertexOffset), 0); @@ -373,6 +379,13 @@ namespace Juliet g_MeshRenderer.PointLights.Clear(); } + void SetGlobalLight(const Vector3& direction, const Vector3& color, float ambientIntensity) + { + g_MeshRenderer.GlobalLightDirection = direction; + g_MeshRenderer.GlobalLightColor = color; + g_MeshRenderer.GlobalAmbientIntensity = ambientIntensity; + } + MeshAssetID GetCubePrimitiveMeshAssetID() { Assert(CubePrimitiveMeshAssetID != static_cast(-1)); diff --git a/misc/build.bat b/misc/build.bat index 0a61764..b206acc 100644 --- a/misc/build.bat +++ b/misc/build.bat @@ -175,7 +175,7 @@ if /i "!CFG!"=="Debug" ( set IMGUI_UNITY_SRCS= ) -set COMMON_LIBS=kernel32.lib user32.lib gdi32.lib dxguid.lib Ws2_32.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib shell32.lib winhttp.lib delayimp.lib +set COMMON_LIBS=kernel32.lib user32.lib gdi32.lib dxguid.lib Ws2_32.lib dxgi.lib imm32.lib dwmapi.lib d3dcompiler.lib dxcompiler.lib shell32.lib winhttp.lib delayimp.lib if defined IMGUI_UNITY_SRCS ( echo STEP Compiling ImGui Shared Objs [!CFG!]>>"!PLAN_FILE!" diff --git a/misc/recompile_shaders.bat b/misc/recompile_shaders.bat index 123e49d..dbb96c1 100644 --- a/misc/recompile_shaders.bat +++ b/misc/recompile_shaders.bat @@ -1,7 +1,13 @@ @echo off setlocal enabledelayedexpansion -set TARGET=x64-Release +set TARGET=x64-Debug +if not exist "bin\%TARGET%\JulietShaderCompiler.exe" ( + set TARGET=x64-Release +) +if not exist "bin\%TARGET%\JulietShaderCompiler.exe" ( + set TARGET=x64-Profile +) REM Chemin relatif vers JulietShaderCompiler.exe set COMPILER_PATH=bin\%TARGET%\JulietShaderCompiler.exe