From a781facd485aaf90148e36f1b1c6cfbc5063e822 Mon Sep 17 00:00:00 2001 From: Patedam Date: Sun, 22 Feb 2026 15:54:09 -0500 Subject: [PATCH] Factorized Push Data --- Assets/compiled/Debug.vert.dxil | Bin 4832 -> 4964 bytes Assets/compiled/ImGui.frag.dxil | Bin 4348 -> 4472 bytes Assets/compiled/ImGui.vert.dxil | Bin 4776 -> 4912 bytes Assets/compiled/SolidColor.frag.dxil | Bin 2812 -> 4420 bytes Assets/compiled/Triangle.vert.dxil | Bin 5312 -> 5532 bytes Assets/source/RootConstants.hlsl | 5 ++ Assets/source/SolidColor.frag.hlsl | 10 +++- Assets/source/Triangle.vert.hlsl | 7 ++- Juliet/include/Graphics/MeshRenderer.h | 8 +-- Juliet/include/Graphics/PushConstants.h | 25 ++++++++ Juliet/src/Graphics/DebugDisplayRenderer.cpp | 57 +++++++++++-------- Juliet/src/Graphics/MeshRenderer.cpp | 5 ++ JulietApp/main.cpp | 4 ++ 13 files changed, 85 insertions(+), 36 deletions(-) create mode 100644 Juliet/include/Graphics/PushConstants.h diff --git a/Assets/compiled/Debug.vert.dxil b/Assets/compiled/Debug.vert.dxil index add627d3df9b04709fd5a74916793723fbd50a74..3e160f5d86badc2e8ba469350bd626319cb306de 100644 GIT binary patch delta 985 zcmaE$`b162CBn%$>a&2}?z>apPVM=9zfjC)0V4wgLyGW3DJix9E(V4iu8mejjH(Mb z7#PwR7#TE}7#Lh4Jbl=Jssw-vJAmR&&Ij%(@-Q&SPrk@Fo6&7@E|UV|lF5Bc=d^f~ zd5$NxEBkUcSYCOuzR$SOPubVO*t0|MXre@0p$h+}1xD;`mP`Q*44dnig%}y7CQoFM zWGtAxnnl{0D`LS0R<4)@A6QQN6p zHin=4TIoR7Ffdd~Ffd%2EX!*>*?^UsdB#Dh$#$&DOsN+pC$nk*jqhPyT>rvg>D+}E z1(%+j+Iw;7-krVzZMn^k2OLG&uer8pzUArV)9T4-GANMdN#fJ8+MuW9lbN1T;+&t8 zUnJbJ@OFYgS-{=KQbDdPVQ=l?#ok4WwTowaFFrk6f#)7u^ND6J{x#Xohf`!EdKx8{ zFiP)fl)1tv_vT>R!G<3RO$rRs4fVXuAKB|SC^EG29)7^S(7@4x+3bcu4^!v14JPJ# z!C~=XsYNBJ6`n4_EKWRX97iN_IC?ml9NDB>vTkgUSXRKbVglDHg9S|sxmIsbOkh1UOC+8snHkC_vUOdYduS4oK0FO6?$cvC#Ig=d-Y`R)U&>vbG(3h zODYRe9rNOF@X~L2WY~#K}+~IkP^Nz z1qpw09drNWP@Z`T4D6>C*mP*L3P~_(bSi1I7%6OFU}R(zd?Ay~G2y>L@nm7%V9A3# nCQQOD2X8iLa4*(yX3pW5!^^^8bAaXHjNU}WHAVqkEI@bqB=suBPyFY zLJy~!`!N=0DX#?*ZVX%z3pltI@|;?z!ey|4fz@lF04rC}0s~gAkOc{>rxq)488vhS zX*3EpOwwp_(qK-?YBQw~Z_4q{biN|`XZoK=HSa`FP!#r0+?KF1mlO3ZMS+Hg=hM}migPmP0V1LF+? ziDCnGX(p>120TRp?7}R@4$Zs=WhZ2Cdlx@8O8uG|s^%WvHr>Uy27@yA`<>KVYwQ;BwZKs4L)#S+-{1f_u*{y|{Gmjv5DxWKKj|hy-isi{>B+ufz|{ z!8a5Z9MZ~>aB387;5;Nb;~?9?f>z#EnJ13gHtQV@_q^5Z$;)dpDA2id=h=&AY8=k) zN@siX`i{lix+yL#*}HSg=Jl3VN+qck@j3a4DfQAbA||v(E@+Kfk(0QCHSz%KN-pWy zv9rCUB4db9z|W zbQd#MO>wtyGu0iFii4ZNUjS`3`WE)w4QRW$>H*fxoczBTC;M;- zSe~E$|Kr|L%{hJRiw~tot&akw&==4YYlW6#FCe8@Lo!nAW-lIHMui5}QwwZ5G+Kou z7&SVTG+K-nY-V6&WE4Chlg%;V|AL~)(|Lm>7xI`e3AY@)*`UF_Si_k)hhq*e3xmx8 SmV=X-`8pX3Huv&fX8{0E>_5Q( diff --git a/Assets/compiled/ImGui.frag.dxil b/Assets/compiled/ImGui.frag.dxil index d602062243753d95059e81d41e6f2127e298cde9..5b0eb5fd3aeca1d5ac7fd01fa4895edd8fd3334a 100644 GIT binary patch delta 1147 zcmbW$ZA?>F7zgls%Wb*6ZP`UC^ipKEMH?iHwSX|3*?MUOC1o-xP+U8UK!L0U!pp`I zmcBP2FoA+Ys^oSs?Hpk+bcSRuybLlbIzTc@DX4^Lqs!v>FflR9E?lQ=_^bCcs7<{1rKmx0MJqA zbQ%E2RmT+!stKj`FGB$!Q#QFFU{kg8A?O0%bACa?!A|D@Z7iOb#dFMrW%ow{^`80D z`zkgsX7!tN-RRv$h(HIPbM8yELbM(to%JCvK+I`?u>4vQM%-+#dp{y30eX%br6VUv zF&$BoS~{X4N9l-~d`9;U)_USw!%f0?8%=PTQJE;E78|Jmj>WJfEmFMmv7nYgjrTbZ z0Op-bP*#Y|j5(v}aYn6)(J;L1{fpe%SnXq2 z-~VB6i6*gs<5#aw1k101g5=h#sZTeB$_ibf=&P-)LPt7*4>4&HgBTupl6a0?fW>Mq zsf)Y$#n=X9CPgqC(@SBoXL@owNrIOah_Z_u#^+_aw4yBP=2Z@ZU=(1g*sixd;^ZGv zZ;Uf(B?fUzif3_hTczl*kM-uFEuUBk4{@FG`>ZV|X~FR2TkRuyi&V>Jf6YlqA5A)} zsH&)JkXO}}mo`+@R7XIcm&UX0Q+}q^*ew2Emc4;scOd8uJX#KJQ$KQJ3g0G|L!SB<#lC+!%-9gf|H&M) z0>=J1<(M+x&8sT$uYX52!AM2R7HvWCaVPQjg)9LD(Is?B) z)7RvVYBulKnK6z8z5Y`}QdL=bbwj>|M6iK2&4qy4?^^3IRc1OKpNX2&6^YUhh@W&m zoLF$%yL#sj-R$Ze%Vl;Zmo+8TmDkra)|Hmm=hLq2!3J2GSaoryYmKkry|1A%0$lSO zneMRN&{M0LJ*!*|PqW&i{Of1d+LEQXif|{0D=VoC8w|pO6;#02&dVm;Uye)Jc z%!rdI*3V0ZUo6Yd@#$AynO5(222b9d$g;u^M^xpp#I-bJff^Pz$Uh>E*cKt|k zhBTn~bD*S4gr^T1kQM;)TY%zD&Ij%(@-Q&moBWV*Hlyw2S|$a?p2_o=HmX>>DOi%p zXwW|E&(%V;bD2vxGt@X0W8DQ<9#(!)WioVU;9_8yyq>#nGAm0qqxj@P7D>j4$=xi{ z`ll8btkCEbY*5l@VNzVi=Aq*N1UyXX3>q@rh8+$H6P_>3X9HT#z)&f{z_4!eT^2Xy zhDM3WYOKoj@{$)edTH-&o>U#IExp*gx_GvNz!{dt3^Sg~CO!fj=}itc!YoX;8U!Y~ zgtnD#%&1bEe92LtlDg26p~s| zQd*SinU|7UAv-7~vR##m5Es_kX|UaLo58M4 zoJ@_m1|4QA?i|=OpcQaqgGAK^ z_L>Xqbq0SL53(=ZpeSL+5xO-|@=F5$j|7oF2_Kpp`8^Vw6}XljNICVYTg&I&nx4F- zfEsDB$0FYtM1M8#x7i!~P!KU=SqXF#Ybb*nN0I=WG)uFnnMl!udiK>HwlMJ;Z`*FL z%Tg>euehXGn8j(a;qp2r z1uVb4b9nvqx9+3dSW(-v*H>QwWrZ4O*0_(BHBykW#x=6C#^&|hB8>74tfv;(AacV- z21Z6kLwG(=ocxFZ#HOfFV=8o&f%ED%feuDfJJe#KW{Ok!sf%gTbTis CC~}wp diff --git a/Assets/compiled/ImGui.vert.dxil b/Assets/compiled/ImGui.vert.dxil index d980a68867a3ada6d1bc7d104a51f4beb008a35e..b87161a9c81c496c13cd37cbe53d56ed9d31943a 100644 GIT binary patch delta 1058 zcmZ3Xx^*Y1N$a@yvV&{H6sH9gMsiwDJj+oTnr3rHd?M{R9(Ws zz>vnk$e_u@z~B<$>B9z8Bmh*`0~B|1K5$Qwhk-$1GB49?MwiJSxfB@ZOg_bQLNl@D zp~ahmC7Fx{?X&(|EmS*~xr8%Ajnh!Ug6FV6+apCelV=AE+!?qSCjaK{o9xI^UM~eS z(@1WHgruO)gdR>c_hT&1QeF!r+!(kD7I1JaU=j1{MTe%8wYiyp zIrdG>+)-i&FIyt}RoMvfg$v9!ZZR_7rDDFzX!}l+U3)kWUC1@)uvzitz%DZro^6c> zC1yBEZ8#`>!cq3YLAe|Wo(_IB4yFx^^*0P8>OZhcGX>l*;HeYf5^ga{Xy!erF(HH7 zyZEtD>etjzHTUqg=`JRY3P%!}9C{A69hjjYkg~yXMH_E-BG>W;u9XY8n6)HUZQzn- z3R7?jZ881wMa31U{1j06jDswV7R{W89^?vWMc&vTvF-!cstH^h430D{}Uc_my? zJX}1}nOj+Va(0!ncJgc?h13%tVxF9OcJI}bW2c@iWARf3>fL3tW0QjUcJo~ZyMRXQ z)U;%hZ*h_Z8MHyLj>J*+M^@#EopGZ`^JLjNqL+ zH65)OHXr4C%{ZBdOTf}cIGJ~=$`l8=lCKgBdje*H@=*;mU&*88s}!VsB}RU}+Weba zfl-lx{nP@Ru7-{vjYh$SNg7Q~8q7xA0zlAsYGYf&Ph+LYHoQTMjg$L%#Tge)Ue3Fi LF>SLqUn~m%lUIn6 delta 811 zcmdm>wnA0PCBn)1#g20+kxTBUnx~wLkh*xvoRNWnVTI5{DJfO~E(Qjjjh5>fRaH0` z7}6LR891337+fMeeb|7C1c2&zfZ|Th2kt5I06CL+nPxLOO)lhCV4N}e6w?XC!+h?u z#2AWKoQ#)Ee>BH!Rzun(0j8$I20V!#NqjuTEDJX8W@cq%6rX&MMUpXM@@*FBNvxt$ zD|8%yfJG{up+hE{V}`wQAsYijr33@R!O4cKZp=LgB_~(0Dl;Wbm^_~~gwbg77uJgU zeCI<6(h@z5l1mt+_Z)0H*zh2sNr6GSfw$R^y?BG-f@a>s3hbo@jta~sHw5l5c5d5X zVy+h)79W;cRFYcZ=_1T>XtsjD{k8)$6a*4BIId{p?Ow=UeSp380Xwt2MBN8=X{G=L zr_dJDFJDw#O&k>tB{Vs79As&fXy!b$AXlJXEBM9+iA4rnbr;x|7))t;$i94oqJ$Yo z=+;C@mqd|23Zfo~3atnELmE#{xhj6;c8pZ)t=YF(8Woy(yN_@!zQ9!*z~!vzQCGkv z%@z{D8h*o|<&ZXmaEp;aGjEe1w=|dK3Fe53l*Ts6+tCtt@317^h*+}o?8URb0&IOQ zv!w5u$@K2rvRU8ENUAt9J-)a^xMiWTQ+V6=qu<2bjxEwV+nbly?99D2fqQ!ccd#DM zt_|FK0=_Z@PJY1W;rAd!>2UGF)6Lr4Ma9*Nxfgp^7tfxpbih&eisIqojo#Y3y_IG! z;$EyhTj-9XtdY%hBXg^rHY>K9nD5%D*{D+jR3urwx_GhnFeFV=8o a&f%ED%feuDfTeM=KHp--)XkUqVp#xAuN5c& diff --git a/Assets/compiled/SolidColor.frag.dxil b/Assets/compiled/SolidColor.frag.dxil index 8920976a73ee942d460e86a1b44fe147238d85e0..3ac12c8000c2944b434b589fb086a2823e62ab04 100644 GIT binary patch literal 4420 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 BYTp0= delta 1475 zcmX@2^hea!CBn&>uStF-@89Pd)$vs&$JhS-&d9*P@P~_mfgMQO0I?4ccL4DbAPxXZ zvam5QC;)M=o2LN>Pz(kVtW$2P@uw*irq3qCQ=n~=*#-p%E>QG~Yi2}pqXy#28Czu$y zLB`0<5Rnx0nb5HM*k!YmQ|A^7&V%lGz4yKIMh0qK^;843bN*$x_L95|aRA<#5Kf#U#M!r=s+(`^km4S2ka9V6!P9&}!$ zt8=!OBUJF(h0BvgF0w2PP~$kdNzp)!gVoqkV-_b1nlG8L zNKe*Wt-s1(=Vqf_oK6pOB6{*ZX=Ux;@wzQgBhAKF&(px$D%8rzu)(8v_Tt&I6$ChX zcW&9NZ?=h(Y2t+$-qycoExw)5!zekWQF2bBWJqH2=ImlmW$og{vxQhfPke}ZbLz>n zOZV<9V{s8SvJu~HV7A+6r)FbdJJ0!4KHZ)*KI>lguIb73Y6wv}T)gmfvo?28arI*E z#opD$vu6vLl$wH!xOD2>q!Y_t9C~qT8H>NHkm7P}o|Jt)w{40xx%xB2&oq4|c*l_%ocbD6Fd{5<#Ad$O>ghN&%B zgn@-wffuM03_KizJw%}FMEm=)x?gU_Uh!jUOVr=_1(f`*K$D{>T5{ZjlpJ+{a@@nwGMa=ncq*(mj^tEgIen438;&GL3HcAPE3J4HBFnknz_gwg|TO_??fD-Iot zNxS}Rl3Um_H*-~vRTCcWyfO9U*`<4T`f_%trBvvZCFYc+76mgc=98RvS|&;&a%RkB z=}5`jQy5k{w>?jq9#%Hp#mrUQE!<2s;1y8!l${q(K6Tu?bmzshzMM8>rk_Lw1_n7` z+7V`P)BzPy%s}kYYQP-86`~pdEF6{DI2oD}5`0=8YaHotWNJ{5keKq(#@R4w0)qkv zn_H>Fg`^${6$Xx`#ze(H7a3EC`i6*h6-%gkg=>nQ#|$9qJ4!u*lp*RFlVm4_ut3UP E0D5M|F8}}l diff --git a/Assets/compiled/Triangle.vert.dxil b/Assets/compiled/Triangle.vert.dxil index 49c09b17bcbc11bfdb2372a882b694ae84714907..7b20223137087a2324404317000711a8996a106e 100644 GIT binary patch delta 1327 zcmbtUeN0nV9KG-Ly?(sDmRFdgEyk2j`RJNAU=@@s{Q!c1lc96Ok*zp!j#Vt6X6z$v zUnv5D1K-TtirXti;}oT(n_Ce~TVSwG6c)17sZ5+<{DBEGOQx7Cd)=7K{k!|$`JIz< z?!CF^`qR2I2n0Lionc0h%+M5usz=@5K19Z$r^s}3h_5n6I*?)D$e zs(T@EizaJxi)5@y+FX|ub)U)PHRr-*0C)#E(GVo3ClT4pCWenW@sKkKBN>1eI|&pk zXGj#=&KOXvf^nl*C9{NvTn{)Qs--;DDzO|(rF5yBT{V^|7(tMHMFZDz)zfTw_`5YE zV>byJr2vHKM$snPgbLvk0s4J339g=^UFdqaR8C((UFHSy)Jf;G-AIw9IDD5leWP2IUi#)6dk^UM8~4}8G&ye=h(l$!tOq4n zO-xBfgR7+8mC@iRaee1d;ImxYgsnKL?=Ahv?zPf(tE?A_8?vsQfz~Ysngf;x21)_q zEM}4ISDx7&5A33m+dL4(W zwcNO-ny_1X+Jv3y#Lkio<;2dp;|*xS_JRui)~)5NyoZ%H$x4ZqtP=|SC$96DU36p) z>u0dffl#lMo+X8GR25~`FafS}K&`Z83{mMbuoAyWo(Vo<`gmZOdWStp$-50V+(o`6 z>|!V8AxEiR%~=2M%5U4pWA~o$4BMwCJw*);mxH|q zgC=3JqxR@Gl|NpOjgxiwzVPg_yiH%fBn26B6vQ zt~~xLbe-r$SpZkVF-?K%mQotoTVVDnjmkBY)98Q~| z-YdijfCPZ6)tqDB$zMU|1f3Do_moNdd?J?*D1+rzQ_+X83RyvOqkkbac1iJ>go6Mr z=|9kuR9F>Dt)N4}zmYA%X@bEdV=(2_o~H}(=t!DCNV^4Qhefbc`fL#(5KfY^G?-%S zN#0X6s(>^E-svU<4tMMEPP^o>Lp|$oXH}oD-Uz3(JVEbFSfzC-#yiPaQ6N8%0l?L$t4z($t?nbGHrv%t&sAgruO) zgdR>c_hT&1QeF!r+!(kbCckHqHa@l3z{_@lPKQRTkOZSfr;z7dj3=z@nAT za6%@VV@ADv#~hIB87hIs?Vs$*>c%vMadI!K3RB90$(vc#nR+BA-(g)`Z>HjNtnr}4 z3`eOA2c>f)csTgfIG8pt-Y}3THei=#vbtfwQxw21%wp`(%zIFFLI$^Y@nfUZuc@JG z?%{3IT}&Jm_Hi;XvPm-~H#xK%WLqd@rqd?(hEe`YqdZSd!jFUUIUEj+9HD~OE?k~0 za*?G`pqZ1&kWHASiARm&@HWT#6+VfFlR6G*{BV??a43MQO@7XywuBi90;wAuSFGVZ zt-!VT0sBe^u4XNsx(!@0%hv2$aPQfr7nkncG1Cds?rGBc;;6~9RN?1A%^ZnW6paMQ`rc%s0c@NgolR9a4cVo9-ZOJnlHXJ+o^=8h6pLYa9b^~EO7 zE}h$V<3z@prE_b~Ui1}U>*t7-yeED;TH+>Kn^@LCu{=icRWTAJiQ*LtR~doIlzPqO0Kifl4}T19F|-sk&#?C&*RZ$RBB*7wZNvUp(9A6 zQLtf>Mw62UvlX`h5Hz0I*w*m#d*i9eZ+Qb57f!b46K6a)Ih=1XWBTUbe3eX09~d^5 z3Gy-5_eiKPa5OPC3IDwyq?;(T#vo||g8~N|hu;@x?=43>*Bt6_WNJ{5P_VejuX|BQ zWg(X`8z)0kLc;?W`z?S1x0>>iy^Xfiw6rZn}Y!W-(7jt diff --git a/Assets/source/RootConstants.hlsl b/Assets/source/RootConstants.hlsl index e0fcf7e..9945f39 100644 --- a/Assets/source/RootConstants.hlsl +++ b/Assets/source/RootConstants.hlsl @@ -11,6 +11,11 @@ cbuffer RootConstants : register(b0, space0) uint _Padding; // Padding for alignment float2 Scale; // 2D scale factor float2 Translate; // 2D translation + + float3 LightDirection; // Normalized, world-space + float LightPad; + float3 LightColor; + float AmbientIntensity; }; diff --git a/Assets/source/SolidColor.frag.hlsl b/Assets/source/SolidColor.frag.hlsl index a8e6d9f..cb18e2d 100644 --- a/Assets/source/SolidColor.frag.hlsl +++ b/Assets/source/SolidColor.frag.hlsl @@ -1,4 +1,10 @@ -float4 main(float4 Color : TEXCOORD0) : SV_Target0 +#include "RootConstants.hlsl" + +float4 main(float4 Color : TEXCOORD0, float3 WorldNormal : TEXCOORD1) : SV_Target0 { - return Color; + float3 N = normalize(WorldNormal); + float NdotL = saturate(dot(N, -LightDirection)); + float3 diffuse = Color.rgb * LightColor * NdotL; + float3 ambient = Color.rgb * AmbientIntensity; + return float4(diffuse + ambient, Color.a); } diff --git a/Assets/source/Triangle.vert.hlsl b/Assets/source/Triangle.vert.hlsl index 5569b7d..664651e 100644 --- a/Assets/source/Triangle.vert.hlsl +++ b/Assets/source/Triangle.vert.hlsl @@ -1,7 +1,7 @@ struct Output { float4 Color : TEXCOORD0; - float3 Normal : TEXCOORD1; + float3 WorldNormal : TEXCOORD1; float4 Position : SV_Position; }; @@ -20,9 +20,10 @@ Output main(uint vertexIndex : SV_VertexID) float3 normal = asfloat(buffer.Load3(offset + 12)); float4 col = asfloat(buffer.Load4(offset + 24)); - //output.Position = float4(pos, 1.0f); output.Position = mul(ViewProjection, mul(Model, float4(pos, 1.0f))); output.Color = col; - output.Normal = normal; + + float3 worldNormal = mul((float3x3)Model, normal); + output.WorldNormal = worldNormal; return output; } diff --git a/Juliet/include/Graphics/MeshRenderer.h b/Juliet/include/Graphics/MeshRenderer.h index 9ead3d3..a8df0b6 100644 --- a/Juliet/include/Graphics/MeshRenderer.h +++ b/Juliet/include/Graphics/MeshRenderer.h @@ -3,6 +3,7 @@ #include #include #include +#include #include namespace Juliet @@ -40,13 +41,6 @@ namespace Juliet GraphicsPipeline* Pipeline; }; - struct PushData - { - Matrix ViewProjection; - Matrix Model; - uint32 BufferIndex; - }; - [[nodiscard]] JULIET_API bool InitializeMeshRenderer(NonNullPtr arena, NonNullPtr device, NonNullPtr window); JULIET_API void ShutdownMeshRenderer(); diff --git a/Juliet/include/Graphics/PushConstants.h b/Juliet/include/Graphics/PushConstants.h new file mode 100644 index 0000000..37a53bd --- /dev/null +++ b/Juliet/include/Graphics/PushConstants.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include +#include + +namespace Juliet +{ + struct PushData + { + Matrix ViewProjection; + Matrix Model; + uint32 BufferIndex; + uint32 TextureIndex; + uint32 VertexOffset; + uint32 Padding; + float Scale[2]; + float Translate[2]; + + Vector3 LightDirection; + float LightPad; + Vector3 LightColor; + float AmbientIntensity; + }; +} // namespace Juliet diff --git a/Juliet/src/Graphics/DebugDisplayRenderer.cpp b/Juliet/src/Graphics/DebugDisplayRenderer.cpp index ee4a5db..6484971 100644 --- a/Juliet/src/Graphics/DebugDisplayRenderer.cpp +++ b/Juliet/src/Graphics/DebugDisplayRenderer.cpp @@ -5,6 +5,7 @@ #include #include #include +#include namespace Juliet { @@ -302,18 +303,22 @@ namespace Juliet BindGraphicsPipeline(renderPass, g_DebugState.DepthTestedPipeline); // Pack VP matrix + Model (identity for debug) + buffer index into push constants - struct - { - Matrix vp; - Matrix model; - uint32 bufferIndex; - uint32 vertexOffset; // Offset in vertices (not bytes) - uint32 padding[2]; - } pushData; - pushData.vp = Camera_GetViewProjectionMatrix(camera); - pushData.model = MatrixIdentity(); - pushData.bufferIndex = bufferIndex; - pushData.vertexOffset = 0; // Depth-tested vertices start at 0 + PushData pushData = {}; + pushData.ViewProjection = Camera_GetViewProjectionMatrix(camera); + pushData.Model = MatrixIdentity(); + 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.LightDirection = {0,0,-1}; + pushData.LightPad = 0; + pushData.LightColor = {1,1,1}; + pushData.AmbientIntensity = 1.0f; + SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); DrawPrimitives(renderPass, g_DebugState.DepthTestedVertexCount, 1, 0, 0); @@ -325,18 +330,22 @@ namespace Juliet BindGraphicsPipeline(renderPass, g_DebugState.OverlayPipeline); // Pack VP matrix + Model (identity for debug) + buffer index into push constants - struct - { - Matrix vp; - Matrix model; - uint32 bufferIndex; - uint32 vertexOffset; // Offset in vertices (not bytes) - uint32 padding[2]; - } pushData; - pushData.vp = Camera_GetViewProjectionMatrix(camera); - pushData.model = MatrixIdentity(); - pushData.bufferIndex = bufferIndex; - pushData.vertexOffset = kMaxDebugVertices / 2; // Overlay vertices start at half + PushData pushData = {}; + pushData.ViewProjection = Camera_GetViewProjectionMatrix(camera); + pushData.Model = MatrixIdentity(); + 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.LightDirection = {0,0,-1}; + pushData.LightPad = 0; + pushData.LightColor = {1,1,1}; + pushData.AmbientIntensity = 1.0f; + SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); DrawPrimitives(renderPass, g_DebugState.OverlayVertexCount, 1, 0, 0); diff --git a/Juliet/src/Graphics/MeshRenderer.cpp b/Juliet/src/Graphics/MeshRenderer.cpp index 6de922d..383c90e 100644 --- a/Juliet/src/Graphics/MeshRenderer.cpp +++ b/Juliet/src/Graphics/MeshRenderer.cpp @@ -178,6 +178,11 @@ namespace Juliet for (Mesh& mesh : g_MeshRenderer.Meshes) { pushData.Model = mesh.Transform; + pushData.TextureIndex = 0; + pushData.VertexOffset = static_cast(mesh.VertexOffset); + pushData.Padding = 0; + pushData.Scale[0] = 1.0f; pushData.Scale[1] = 1.0f; + pushData.Translate[0] = 0.0f; pushData.Translate[1] = 0.0f; SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / 4, &pushData); DrawIndexedPrimitives(pass, static_cast(mesh.IndexCount), 1, static_cast(mesh.IndexOffset), static_cast(mesh.VertexOffset), 0); diff --git a/JulietApp/main.cpp b/JulietApp/main.cpp index 6706ca6..325ea2c 100644 --- a/JulietApp/main.cpp +++ b/JulietApp/main.cpp @@ -320,6 +320,10 @@ void JulietApplication::OnRender(RenderPass* pass, CommandList* cmd) PushData pushData = {}; pushData.ViewProjection = Camera_GetViewProjectionMatrix(GetDebugCamera()); + pushData.LightDirection = Normalize({ 0.5f, -1.0f, -0.5f }); + pushData.LightColor = { 1.0f, 0.95f, 0.8f }; + pushData.AmbientIntensity = 0.2f; + RenderMeshes(pass, cmd, pushData); }