From b9eda67a2ab2059621b1a839d1178c9b8c70e066 Mon Sep 17 00:00:00 2001 From: tleety Date: Mon, 14 Sep 2015 16:53:14 +0200 Subject: [PATCH 1/2] Added depth buffer to fix transparency, still a bug that transparency goes wrong at when you press a button. --- assets/Textures/Ball.png | Bin 17248 -> 4198757 bytes include/Core/Engine.h | 75 +++++++++------ include/Core/Renderer.h | 2 + src/game/Core/Renderer.cpp | 12 ++- .../Core/Shaders/Deferred/3/Fragment.glsl | 4 +- src/game/Core/Shaders/Forward/Fragment.glsl | 6 +- .../Core/Shaders/PureForward/Fragment.glsl | 89 ++++++++++++++++++ src/game/Core/Shaders/PureForward/Vertex.glsl | 83 ++++++++++++++++ 8 files changed, 235 insertions(+), 36 deletions(-) create mode 100755 src/game/Core/Shaders/PureForward/Fragment.glsl create mode 100755 src/game/Core/Shaders/PureForward/Vertex.glsl diff --git a/assets/Textures/Ball.png b/assets/Textures/Ball.png index f43f7f873ad8ef19536af7d15b275a11f20c00d7..6c82961e0a604dfb72c06ed4b75eefb13b9049bf 100644 GIT binary patch literal 4198757 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

H!Z$Fn8s26P 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ĬS@p134M+ z^Bi-X4rBO2#}_%{j(zL-xzE_U?lrF;>-lLde}9e^A{vriHq48Q;klxLuyPX@|s3(sf{1Nj&rcZF!H-DD9T zAwIm`2A`JTh6Ml?0NhU~T?ZeJ(F6uy00we1K!Fcqxfx^sFa`rKu*ASHyc`cp8}M4Y z0I>={2h1u!a}2PA%B0oqq}85piPt3~(A(dY_|ddQInYQ!@(y z@z78}%t68PY!<3jjc@0~Nl&7cc+=wi%!> zEa|_~0zSHz)VA?0cY76a z`VJwj-_`A_%UfElbBqQ5>H8>$-`OXAFVBFz`M11AaEa!`NlpeTE&$-zoQ`GRJxm_N zP%h5bn?bbSr#<@Z)31m8R(p&v3Zq{Pp5_CXfQj09iR1UnVA}jsaRI;v#HYl+*WR>_ z>o)-Q`hoYi$xff~l`cOK7y09&Pe$|W3cF~$hXLZ!7C-pQmcRDIChwi{b*j3L1%Sd| z0Z8SzDJa@|jzr&{Pf6(b6b4`b24DaNU;qZR7@+3X@<-nIU;$ut0f2z$DIgeY-h|Vx zzT}B^ecO6WOtCxlT59@gpmSE|`Bntq4764A707wcg zN+g;R$4H?C`yi&)7=UFMS!0CPVMK`mauz%)@rW((2m_Z4Eazwz09XLvX8@aIU^(zF zlLSc*9*Z`^WH^&(6|0r&{onlpz7bWvHr8SeQ5I+x*ai}p8-C z;Bt_xN80lH>w#utHnpqorQcf_M?GFI^~4VJXpsT(1YEbsHDiKn7=Qs42AF5BS!4lV z(*l4B(AaSewDRM+i!UTUWj3&lTm}Ps7zodAb@T9^G4kG)Vk94j;jz$?o{S}3e#pmW zIvex(yPxa{eK%%W2I#VpnV8#IEm%yLNm>9Jb?2;<6`S zHoO2pQtAn0#!BLb0T_S*7=VF37_hUT+lN1hJN#Ua0s6fy+PejSH+LJ}w!E455b&)t zK#>9CtuwALKH`ixQ{WIAN^+=Hw6EE-_IgR}I2N%A12C|U0oVIK`vrjK{6dmE^J}~h z2JCBDzt-Zfwehsf9%D)UMfPqT}+MahV$BOS&^caSh<6)aID!{7PVGru1g6L)yU}@uR z0NE3aapE%=fB_g#V1S7q4iz{Ivw`|4Os5d0(K4NuA$qe-3cVHQD@B`9Xw5$M#_Y`k zz}_A5exPiF0g|SMAMt~RAINL?0R~`Ti2-sod@S*i_B9rW(&`Dj{pra9z^{IsZaZO8 zT#%sqiPdFa|L15smj5|i(ronQb4>M%gjSVwnwA9de1*`9PvwV%;0{+_f&3$%a%7>H$n zoD4Iu%#__eNB!%1{|CPS@PPBnI@7Y=IY3OM#}?bRyyw#1RFlWlex{y-)l2=+e>%; zz3ZQUVza@RH65(k+k2dC9Y21ykw3hD@s%B4g~lU3ZONxo_4?FvHO9;W01E(a5(!OA zx7(?Jyk`vC-%Fz2uH7w5Q~T+T0T?(jK)rI(Vu}m&nb!wx=Czq( z$;NXm0PJXfTLgkJ=>#s#uZ}N>3w)u?K#v7lk7Hhn!`ynr>_2APr7`hZY~CqVHP1<#HMVdLJ|V`bsQ5L%qH*vl2~pVo3*02p!#1jy6k=hVF2eN!N`>)WL` zS@Zka>r4CAdQB@|wxesGaihgHKENL^00S@p129mZfg%e4IJ&;0t@=Q#8N!cNIVxv& z4-InBlc-E9t764cPFtY%l7C_k3@8pN? z@jVQLGO&H2Aa60Z-7b5+AICcW4fP${+4D6%>(ggBV>{=*;k5>@uK9oevjE^9)G)%% zF)asxW!p&(c4FkxS9y!~%VSy92)oH6C+~C)a*0v4XASE*OA;zmN1LigCakH5Z#E z7Xao4!}E&4x6h`26RMS@Rm;v=$KA(sy&Sbyuf6ZLs@rIH@8chJsPz~9>*bDGKIgdj z+zJDl`Dqwljt3yJ0@1adWuS7a0MG9B=O5n#NODntGR`BouY-oiFkzVi@&^1`<`>)H z7Y1Me29_DvI?r!?Us`{Z{$#H7@s@p;R?FJQa-ILh0>E=^gE)R$fZO00uk*Hs%x8^FN#~06dm+o`OIMHjpsNF&C@#G9P@h6ssrO>#@Gf zxSqW*gim^AfOv)fp7}31c4CcKi{;H0GuI0M50?(lIhdULj&WLUJ96(oW~}^H$tB-$ z+I_uO%b)wlvqb~mgYGaeGQdJ$Uo7D7zWhDLIe)kKoq7pwws6CHN^s*A0DhdG0dTbd z(1R05P$fX)7(K+2_82MLwf#emxbzRaUg`lK=m7&Tpu<4By#sSkA8~fx{QLX&%fZzy z@XO=w0|qp}&oBT3FaQHE00S^!n*o|Q+y2`Vf5Y%{JnY#)p7+u~=FxQ@=+~FT;n^tzDvzQU;A^-{|5^I{1%|Q zY-L~IGu|(M(`>>$u>b=waAKgJoLHmri8`P z&HwM41pvP)P}XTAz_NPl0@80ME*~wC9#%AOEpH-?18&H+@UMF!T=0R zF|dCQaJ~MszyiS3;97oezvBpqmicILY%rfYW?5)zF>V-B?zmz9Fm_^qdFrHv1uicA z#T;nCXV{oB#`Z8jw*c^#(m=g^T_z1Z`v?$x0t5355Wn-=1MM^5762Zn&H#AE`BToPAcl)6E_eDE{9d#g!LoZ$a*{zvPaT66Zo_PjL=FUP~^ zoOK~nft+eT+Xp_5S?8|}P3Bes9(06E1%(ZVq|x2_SgqTiidpuPCLYic9bo_lU;qYS zpj`&28*}(}eIbFE%AtGuecr~$)F}Y|xw8d;+c%{*41mxS2J$fw7Q-ZZ7@TJ?jG_7W zqisEH@LfIa;U4W_00v+H2Gkh%&v9-6;0|YfIg6%94O$I*;6lR>IR-JM=U^&jpt6m-Jc5V_EhIwx^2sxcr6gsdNwDPmP@5n*Yza1%Lqv!kvd! zXaxf>00S`4E&~*i?fRCuwd&g%je}LK%GgbwETc0yYp>3(`G02tpvYAKfpsgaOmN}s z1w>>-Oy|;mJy#R3i z7|m`qLlZQCfszcwOsX;4hKwQg{z8t)HZ|j`l{v7Lanxj?%(2NaWppO5mezR~UXF*a zgQ`GY)((-zT>5xG6Aw*kA8|Zc@jhVUQEwZt=HX^UrD`HA|9_-iZvO89fB`S-8gmoS2304@x`01UtY48Q;k zz(8*ds5RSa_VmUB<1Lv3mlltfUMp#1`ePjqfBmzz05AaJlJMo=AR#aLf!Byr7=Qtb z43wKgw(`N;W05Ot-pYH~_pQbM+UsrmncUO1f6K<2o|ZNFcFq6$>H>gYCFtErHpbug zL}9~6dI`v?ZZ#8US|7YyN+)E&%vd0-$Ui zO2!A{r5Vskg!sO+?>QdK!2k@v01UtY48TAQ23&9d9I^oLyM}Qbb8k@OXs~kZbMH9I zy`RT6`Vy6~faUHzBi((Y`xJT7I;v8`|4rH;AO`-9Jve3qa8;31{|*cbT#24J9N z23+(15V8R9*s=(Wt@R+MFoN+A#^IzqCum+?^N?7uv<(cwkR@KR6<$vahL0|NR0T_S*7=Qs7fB_f?W#GJ^4}A~Y!B-jvSP)2~ zV;vqtnt#8|o#jDddmXsY9o?rG*jKPH;Y?}DbHrMC28hM-n!`Do!@v{+`|1ibozj%& z+U3Ia^`D^&00SVj140{#vghKn=drgFhvZaz2?H&%R9`y5|2q zcmcq#7PR3gl0h4Ov>9}0pU!V>EM%qA1GcPc$(#hcR@udFMRu7R;Zl*yIySXAzwV83 z*VDhnEC9UMaUOx(zV7(~bZ?NfuYJDw>O=c{?B-)H#O9D~^0AX|?AVO9Fwi>#eauZE zoRjD4#RA&b(>^3N)V4{>i);R$V-^5j;JGa}+Z<_F3Qe#2-F@ zfpiSCmrK)WlZrDm*7Hd!-?ATkyPtt!csU*ra=(y0YUow~e#WcM92GJ2L@ok z5(7Er=p6gBq$#$N17M&81AO{>;;bz#m_tg$&)hLwKOg=(fa6NR+|GFZ6r^ZTS_=|M zJacFkuUToXPsh`m_+jV74qBYFIPsePIdo31X-U@RwzloVs`kB% zy_a!X<*+}yT|*!BGXUcP!0)~iRDWP7`S-Tax=f_Euj4Nz|821apTh7KZg`IZH<$Uj z2cM9y6u85N9%79#!Z{42VZb%?Ph(Rb^YQCeSGANubAoG&%KYob{u@^Pk~+A4;;UI4T0wRnlnG> z`>5YIat-~ap8*&b0zPz|OW^7H#s?h!(e{r{Qf#fbZ*4qqtP?B!`GR?*KcBD18##7e zBe+r1$aXFx=G1svx5qW|uVXX6<*%`y1F#)nBI0Cze+i3APi7@z=#jX5@W9yVYA24EnL0p`>= zz2FPIU|@;?*T`@B1%Pn@Aj2;Kkldym)z))u`?$;}OC+?mVxqi1d*-y~u@g7tV-3yG z90p(j26|;cujkqI3jpH^06_N&G~|$MP^Y z3@^vSHgSP+n{Ig=S<4pJ$nW|YfN>$Xi`;`=EiynJXoqXpz(0>o{GPvWnxLmFfK%?P9e_0bj=uN>24DaNU;qYS z00v+H26P!{rMI#-4%hTQ?rHqT_de;uMd0Hb7=Qs7fB_ijnE^hzg8!cRXY8^3+iU3X zajcK~-rhCv_hS>k=kG&)@Ce5I8uuLx`SgX|eA>b++QL8^43y84F^d8*+qU5kYjIVc zAN*{Mk$HQG?|E(DyiINPH2vrA{Q)3t0)k(A_A3Py{P)a1V~2kjfPq>JF#p0{E%q!O zmpIuHC$542IB(+j-v8WU#PWOQ9m{H+r2tKB>pU0BJf*h7!v4?-CM<9|Wh3mu?i3eF z&%r2+Uh@bOFmcTUk6}WK0oU-q?QQzc-~YQ;2d7(%VB+YNA;w)IITBxRR)RB*0cWZV zkOQ}|iEi6;+ZzX4b>I5Fz4r3{I-H>UweD+uscYV!&Kvl>_n)r~;4x6b01UtY46HLi z!M3gu9HCL)46GHk@X2O zdfzqdNv{GpE&x2K4j8-i1Jh3Oq;V#m^y8_fkL<)Ueyqt!iDScJ3dWi9O0dc?mRTj1 zm-Q*bkEL9&)z+==Q}EBa4X$CoADi}+e>=Vq;JWB#f)hJh(3y!&iQ~2>gBIe2F(}0g zw)D;;^A|DDdkipsVnCIFluiHnzPJz|7Xm!0LXTY}WSb1I0I}>h^jX%2xS!SsZl-mC zms+~8Z~}X^*yFf0*egE=xrRN<1pvo|fDb^b0TRcAI~ah0k%96P3)+v`|9zy8KWPCM zXmMhIymZn6F3=*Lfnj(#9`*>w0T_S*3k*;rS>u%Y$wFLVqqVr&Z?9|mA9FPR<31mOYQK}v z5Dj4f1{4{f7>CQ;T(-hkE91!R@A~_vVXg0j*u09*%KHq>%WEDR7t7nbM*VJV)^q&5 zzZD2*ZZ%nU65FHCG6TfavOe&GJ}>|SFkq1Z7Ea*SBDdJA%q=zZ;qcc#Ihy{9efon~ z4+JJ4+yyCFbo4Q&?*BV^+U)ut?H9{TxdxyNzGK7`=beN)30Ii?;7>r7tMO6 z2k$+L{OcD%me>F2n^)hkWP%Oo1OqSt126ysY7D5>NUCNp8sOE z&p0o=^U$a!o6YdKM9rVB zOMkfN)H6MJP#buCd+b6}UppoOe4x*O{-j6_DicTOTt;X8oPZAaD4qfGN4#cmR#!8a zt*d_+|C##zo8A7fAO<#uL4!`{6vKdiBRuU-t9HluhHa;Pud54%m9B5Bv4p*_1OrwX z7>1YQ!K(4ttr2*xRsXnY*E2rxf#WqCk00;@3|L}-&aY2i@q3?sx0IW(6-HqI24El! z1Lfv?*XzG#?DubW{hCG~Kto4e2KeY$*EhrszJUQ4=$nCZ1!ns?qhZTOKm!;dfk1Em>Y z{z$=`>-B$R?DubWeV4*$_E9?6I3CQwz!w8;Pdqg3a89m+0gDWfyWrL$x9!>7c8%1E zzg&0zdDEd6c;d4a0T~Aq4h+Bm48Q;kzyJ)?XMjb3Ts{bE>d=3S{$biK=a&@wIJZ6Z z{?7N!{bgU4(Z}`rZw31On?t-Q3?3WGK-QPeBux!};|C2tkYn%z48TAy3^4Dgv(5rV zFR{ot*J9Ci=8resd4VUM)(qoy;7!8-6LK0I;jslBtrtJm?a#*$c`l!}{p3F4s~=z2 zi5K!z9o^v?-ESFiz5acHe*fkW_c-I$8EAqgFp!>sbVV)23w);MGh9>n3)iZqpK=}> z24Em3U+g=MuX^z~3@^t+oUu5!SH0$n;KSjse{S0If=_TU0QWl#JwZ7KqJjp>wkhb7 z!v-{0i2r(3Ob({lrvg(`HozHdPI00A+}1g2>-$<@r021>;6KKoos-u66E@enUcbsk z0LC>2E(Xxq0>C=B)&sAG{b9lGwP#|k;UA8fF7CrwPj^g3|5?+)n!SoX$ELPpy0m{& z$7JgLmDZz$E&?zv06ezjEXLA80?jps>%@HhIM;Fe-EZ#X*=xL` zYriqoEAxyS=Jgn$hRETQZSxzxnD+(R%xhCOuewJ3ZfwSD{Jm2Z2D|EliT>yh126ys zB^aPUgEJ)tlx!&xe|wH$Q>$%F_8y&huSSlu$*YETX&H76|7VS+|N59*2Y{~ubafqs z7Ly5MN}HU~Gl!lOAIn^!&$2!_m}H;nG*{tQ#SYj?$CfQE%Pg>1;@pz0Wmt2Kc-8O! zj|%~d*8wO4av8xDl2O}wt_Atp>-}(`z@nxNwi$_!@0{b!xo={%Ui{$KdfLN%yV?_1 z?fRCu#kX1vxCXrH_y5NQ0ImbT830+%0Elmfwg+g*W06R=`zc1d@;>dM0PJCmW%!I? znQie248Q;kzyJ)ufM>up;8nl>KP~`p9RL;pvMd0cC%W>@97*O}f9}Hr48XvN0TzNz zTEGQbzyJ({GcXJ<$HSCh6uRLePU+XvbFKrIxCp?w67W${d;*0)Dajkh>Ww!#9GLHo z`CQ`-izVjtT>AU{hWUV)&*=m9U5_vL-={tL?b9!P?7PPMb!@&B{=TXSggxn@LsK*j zWq^VnRzg{^z8$Q?dU=NT7v*pZx8=D-b2Nv6y$raf|EEIZKicqf?|?$y&xA$bd~veB z_zB_7{x;}j--pC}SsxNJW%Y({^o9W#fB_hQflvlq$HK6d!1`uF;fkJcn*D00S@p0~Q$AI?r!?Us_F;7i!ZU3!dlo zbdC4(b@Q$8_!+0oI}L5n1_sJ8z+_cU>v*m;3L0-WoG5dGZSk=+rI}8=r5VrE7cmkT~7aM;Sl7W;**b{L?cujxzXDRN0o{x~-L!9dFl^gh2I z4uAb~-FPcK{%jdO#7i{;`8_F>LC1Iz(1Y@J~}`(3jy^&5cK zix2!Jpu4)%df<~B*EI^!k!{cs24Fy)0rEYJsxyjxFbV_u3~ZT8!r#Lpr)~_mW?S+% z0IwGT_)Wl|MF3sU^phak;UgG;0T_S*7=Qs7IA?$+4j#^V;C@OT!WUCg>+Txu=j&!$ z@$pmYfwRAq0Qa*mCc=JvZ7)aEn@H?w6~{4gAE#H_JP>DX`?n_RuvL;R`*|H+O7aqZ zEE|4t&HlY&!+&iPzX`}000Ccvs5xR^eLNm`K9MgYVI*4+iWv7p?edE{D!N z-^#dijRW1t;knpizopnx{|&(FMF4&ikVSyZivUb)rIHWF37hC>BEocnCv<`V80eb; z>X*L#PyFNma0Xn1E&cO<*9!oz>&_(su4@zy2>Y_Hm5m0nr?{OO>-gOG*FJZ3atHeD z*BuSxG>p|Nboam@seVPYQxZB(B7G=QNw{g`uLV~!1;Ke0iaoU~BpV)WDaSJ_r< zv%!=NKe=XK`ZoY?79;!@7jghV!MhA>Tl$dbbHot)T#h01K_3`^0T_S*7zky6S`Ai0 zSz)^vR$O!a`=-G*@WflpAa%DTvFZATM1pTr7$8r;q6&-H0gEXZh{uh&z;Dx8y0kb_p0s}Ar1G)^bc&h80-r`1uMHM?r z`(J6?+ibD2$Z5q+a%1TjoIW1BOzUEcPuJt$8|d?AO}w++wy02Vh*I;JX0s5}g2!1~32vFaQHE z00S*Ca9Utu5vC=-G8S8T>J*2z?1r;xf4K(Q^mhQp1ppJ@1;_;Q$W=D{l$L+SjGiz61M>{H#`$4vo?H0a z_16FZeI9hQK^quI#Q=@fK9tvP9VR$(ntQwEq^;ZpD z$KTX<0LB%Jgx>|I?<4|+836`TGeBJ1WD398^jqrqWq)u01IrAQ&y}n=z~nNM=%b>K zYnDI9hPlPR$-fKGZ*nU?k?akUetkuPg`H3a?8Wt7-}3%YHrVdO3UPAM0xr;^76Zf~ z?A2ngz2my3zp0-9xL(94^j!dw(sEKlpJjd8ODv2RpI$S-f?N$I$i3Gb^0)?v^T#AF z%xeRyXafTQxJy^J&7Z>~XZ@+Sbs#((@<=xYG+4j|#Spcx4Ujzc(x z6F3Rsgl*DsLd-2`$(b*$#o83_Q_rCzl%=Qv_;numIE0xvK*%_O>@3k<*j43uTSHOF0?{y#1Pya8A! zV2Z_>qD`TCvYnmSgEKq6BChZi48Q;kz(9Tm>Mfowk8K!Ujt2l(772Z(^>N+t^VlKx z@b@PmOoMxn86da8uyuy}vR}0WEf+`Rta4iS6YDz$9vc5Y zV>}%G`lnZC*Bdv9yPozW@;%y9bivOae)hjNRqjl+A9&dB(=-~Ao6_j0;?HF}h~H&> zVpu@SbXvyf&bCUryQcW#Ph;HCo!4+DkSNZzqTrZLU|V$A@}6^Fr29=H7{AnY+Q+SK zv!BDh^lFs@#s$YPkajL4w-Qst6bz^`;ClYYj{5#TL%mmZ2zHSyR2iU{flXC5v8!b^ z(>7(WqRI+>hE2~V9H4<}j%v#;*Af5t(-n7i=aXb>7iOB#y}o0TU5bDB+RGR3U*e0` z;3G8y-jH+`!o+-4)NLNUcD)B$}oh^ zWpv&f54!KaoM?3I#LsQ|CO3b%_YaqsT*l}fvu$fS_dNF2e93q&bAZ-Q&z``eP!;%sGdiqmT?=+QH+o@;vZdTG72CVt|rwEsCCIR^${ zpe6%abC3-dhT-LSsOhxZV>5Z*YN7{|Yl+_`+v3iie6-*!Y}5-Ne1cE37+~Vn@(1yO zKVYCP1LVZI`osUV{&`n9df+|J81wo?FAiLvf8SZJKRsN3KE!p9@>mbpnm)0S9P%W_ zn!0mr;t&R4;Ff{@a^2oJXz%-PeE^qeqQ?N7>-mH@sp*s3xzcsQpVQrNpU=M51@zWI zb?vDME62w7FaQHE00Su)*gm(?NTkr8eGtd3F|a+Sz`_<5&^t9ZuFZeyv(=v-^?hoA z)9#M|NUP_TB*c5Pe6So76z}k=#cMu)!1|oF%Q+%9ANXa?FFc={J@yY{Ru~{pmS@$q z!FSWGaKF!fSP2;HybhSUg&zL6_6Lt)0tU7*KrY*+8@!<#48TC24A4X?`dxD_cP;+! ze%t){k#jM?Uy4D5O-$-j4E*QFq&KBY-sj3|t~rU8i^<-{pO@!#KcfG-Mzwv!@$pfw z3|!`?^7C`Ay4xMMYk?o<+u)90;bMSxp=JWacQ610FaQHE00S@p12AySz~y3rHGN7i zZsa>&JwLeio{Rr2tZ`Jn7~pll^4MCEs$p-wL3w#z(5TK zXqw=z26r5DnmgigT9SN0ku4iPzyJ)u01U7Imy?0GW^39Par+>qbNaLXzNZ<$(+r}#XHZvFDrPHu5M?1yT9?d_6n{{JD7uFt-KmF}^njq~cc-%uc+G=Rnrd;Gw} z2tRxH;k{e=p)rD;t?ckV*nxqR3{VHbQ%at6_vL$6-@r=u*wV&%^}hbS?+F?TK;0l& z_v_SzG4-6~F=G2V2ca6lMmjA+HD|lJn!|iu{o!9(|6c09UdE}+8n%%OJp-<7eH)us z=^k6!xKTm5-vy-LBGIWNy53kUJ>KQxQFN)q0d|m+>oPztsH;ExqdyF6Wnj6^LDx84 zUF-Vqr~kf%mF}^njXNy>_##$Mj)_GiJe*OJr#-XIChApmbeK>DjrF(2?GH2 z?K9xo)Q{`7Rl3KPHtt$U_uC3SNbD8#_Q57O;X@dJfwmc-;BVW%rQ;W#^74efdG#$F zFB}hl+GfDDtdG}it8|YoZQQkz!|>y9`0F2n#CDK``;Q4eT&ox+TG6$Yam4tJZS%y0 zhOR7bYxtpM#!h1+f1b2}JG6iS7}(B$Yga#STUM?FxcO3uQ)0U3UV(Hwq-ckBFp!%8 z3Tqh4&Diz+VJv6K5eW%p|-=@_QKG72fV4y4mu2p@WYgeUvY-!`>6deZ60^rvGivJn_NwsWJ zMQ`+m0d)pwU}039QS3WsG=9+%{f6P?csLhv`+XATt#c>= z^S^IlN|CMX1DQvc6xy;6ZQsDYwttA9TK=JOhP_(swR>FVn|6ImzQDJN45ZIFt{t5{ z1;Dqe(ml4cabJ!8-2V>*m|}oo6I{YT>kQBk!+7hATN@uSc^#AKi+yWMVDB{(Jcfz1 z47djMZmvo7&rA2%(#9>R`t{m}9hjMn?D%RfLEuBXKE!u+eK!}6Vb8bG7{PC^{4(ya zI7g>&o!ZEW;o~jM2KuJ)jk=Dm4Sic{Q>A-sY2((Eb-%rkKCmqmS{7_flK{91Rw^CY zPx@SerrMg`=1KK}LR(LGZ`VJ!vC{5X+vJ$s)}~*H!!N%o^6gsG#ZUiz3oG4YOB=Vo z0N}T%a25cQrD8DlnJ8hgPrp;_;CC2+0T_S*7=VFW2B^_*HA%^d>pfRL{r3&3bdN1< zoL6uCAJ+nC@@D~PY*QvH_LX-sKwtEQ0T_S*7=Qs7NY4QEaC%Mmaq3#r)ldI@`zqaI zOB=V|{Eu6Fs=Meyp0>^jj@nmXEt<(%$o4e7Niv^g*Az3^0%6)faxz*A@fU z^ZE7TTYoO+koEW5(#MbgKgZ=U-)dBAjIQwv`t;v7sM0;Qv~gp5zy3GFwE%Qrs|7j7 zU1Ffc1iUm}UMm+5uvJcLxZbXHZccOWf64bXkG*6UuWjcQ?a(fcfnj(#9uO@~v|jXb zeQD4s0KR{fZnUM1TkrnQx8PKOCch6r0@6&XRLPotX)Rvh49?OsZRO)8e4pO;XlhN< zQgcA5<5<%ld(U%*YdV8Z0q_l~bdN1<+#(e$yK6zCKK=JCt8|Yo zZQOdpKea^{X92`D->oEH#*sexY9!Y5&^b$7CX)YAepTv zGc;P)=r)1qzX!kS`^X|!*bG-N00Y+yFyFw$H4{9Bi8>4{oi*Va%}t;F`vz6I$Cfs3 zuDxG>zT>k1>I4r-3*BJ=24EnR0h%9J31x-twz0AnV{5OYd%W&7G(A7&`Tgzw8-|zT zA%5`N56H3fwR3&vrc(fXzbf5mOB=V|?JsSy<5U2BAW0hd2nJvP2G$u^THZ&$b^Xu? zjbH!o>QR$Tj*TzsFuqa&h?g@%z*N zAM0)A@)puPwzP4}x`w{`J3lxCXMT)x{uiX&{nnAjp;Of{s zWz*DiFjdDtak_scfBa{`SJ)WGwt`;Ui>t7)=HCC3hBc49WLL|tp?O$bw9EiwgMs=C zxc2fhyv1DJQo6^MHf~whm{;Ejs`^2N5AXpDz<@3TG$6XZu^2b-1Wy*Z#b&ten*rBc zKE^bdOWR8K*wV%=sT%hhX94`O7|;|@c_yNAy7K9}#kj-fJaLDv=(@x}xxD=4htkJe z8auBM8}%6&hL__3N7Q#jZ6CP)GTA8rzE_oQw55%U>-5*Qeyt4_$KRG*=p?u4rp_CF zZPTyn++iQw?O}ktHS)tM!XA$7z8Alz@f|v*(Q(X2Y5uxK^5~AkCydQ>O00v;-nt|*2?fUWc z_W2&WCh{Sqk&M|!y2q9_E=J|>Z9fUXd;x^EXbS@{00S_Po`HIWVfwMa2b#hF48VX2 z1FnU93vVOCx0LR&rHu>MIA+VobKq`2!J)`F*XQ=WHGQnvTXRCNrj<2&YxN*t-!0n_%G#)npY=$gp8m_{;mTj?HK+PF}K5V<-@xgs~m}9`Tkk9dLWY{~Tdu(ar!t~v;)x#VJ z?L5!q*N!hq-1rg(wlbjK7?toX^T9Gd=(DU(2}U^vK7aujD9eDqIJ|2je{5+aL*66Z zV@n$sqVD!>Hl77Qp-?tKp?6um%O+pOhTbp$126ysFtCpS7CN``6uQg4mH(*+Y>HRFaM)5PGS=_UYbdN1<+#c1#-up^0s|2%(9s83COsV*?2RqzK?py6^s!MVZbH>%pp1a=Gw%cVXfl!t)zQwY2&tQ9{SE7{!1V^z+#`hO*ABE znD32w#tZW>00S^ko&oBO@|vgQeBFP`XB4f!-?ly}wVvLWYZBi>8^t}_N%z>&#_dr( z{Jl>E%5;FBOIx}uPbh7T)i%2&C-;)af-&1%Ui&XMJGu9NJ)ZN&HIIF62lv~G8T^Sq zVL*Wa*CO7Bw~5=gl^nacfW!vX#7Hp+o2qPL7i_`+48Q;kzyJ)uKnMe_ zL41vE61Q$I-D67|w^i}@_jT~wfTa>c%4T_fUwoQf%Ad84Gw=J51kX0L{Kj$juxBT) zrH;?k`-8)E4pV8KYCqO}h7Rk@S@$vaTlaD9-~PL9Kc#zYY2&Vy%=`Gab+ECYIJG2Lw$gs0A%uC;5@Po4nq? zbfYb8+_jSVA3s}w7#sUaTFd@sxqMk4SV12cu*U#-t%lE7*&l50UE*p3~XV5{9B$IG%v6Dme`1U4+|4< zdbP*^V@k(BU-9%cC%6XktyB|vejMo@TiUpD70cZ>c~!u^0y z%B9ot6wvGwEnol!V1W4r2FL?2&;tYHIyjH#+_jFMW!uNgqe=JJ(#BotSo+Z`!4@BE zUNikqrdys!S{~ar9&5z0ehlQ$vK97P8AlEuv(Fm&gk!?pB?IKBOFiHNJ*F9OjpNVK z&Exs;qM!@`%zswzP4VI@WmflK{;dpy-RfFaQH525c9FG+0(xw$0foUTWx#c6Ify z;qw&7jO8YF`#BqL_cIJH#{*8h6{a;!zOVjwSEGA8Kc;k}Ep6PniuLYuRY0x^=zh?3 zZieA`w1EK_fB_hQ0T_S*7=Qr<23*Tn?dpH$?W%N-Ep6PniuLZ_@qGXi+E+qrf7MhW zabpAV1_Ll~Vt~AR(xPuJ%A95cZ}8SqoLT01o9(V${HWJ5ULIMx$CftkQpcK)o=Au- zB}B$D#dDeB3hk$~=eaFhY%31*wQhA>TYSuW^m)Zc_y`7IARhyoVE ze!FA8m8H+y;2>e#YNC-4uuItw#0`9= z<`br1Dm7E=52j!M24Fy$0oN}6)@vDuLAuA5Hcru-ZiPuX2(XPL4FlF0poxXyybN>3 zR9=1I7k$4NAeSq}!Z5rX5A_`b6!B23YvzBh&Gn3TihZMWqb+TmqBp;6`W+9kwOMgJ z=-Su7n$P;OH(e(K>%{VP?7##}Tri|~ zx6DkEe165J2gx# z|8rb&PhAFFd-&;YKh)bq=^k6!ICal{*~eD_e$`C`Bx3Z30T_S*7_iBJMl)?wyD;Wi zCx?U{HgzA+bZ2-OB**TsQ>paC+zGyZW1W72oYzKbswT> zU;ehvEA}t(N^uGwOMLJed?+%oJ#P)e%kh9y6`i`xCf5`C^Z(8KlWw%7jWgroe+_*m z$!rT~bVD~7P-b9z^<~|!tbQqTiEY;7%f9_qa-$VHEygt3mW*T9Z9Q0O4W)Z*Y2z$; z`ODUil7YanEKU~K47V@<1GyQXD21`yjHTN@3vFAqB+iNRt?bx)pKG&Tt+j>HJ+`!Q z);w+ervdUMQYNW<+G-?m3OEfvw9XmhgR>qP(9EyQ>pil_nC<6a&3v+?>wk`}9W-(2 z|Le9@y2q9_?pjG3kNGM9KMioSHc8r>5SAtjUbDs@_QI?-12ntZ{vm$wk7s~5EyF>1 zon8B9>eT24DaN z!Wr1!SjHC6;Wptvw1NQ`&|<(ffAV1PWV&cHCd91rS7V&8Hyb^YIy-5&7Ea_L4}+BoZ;ABG=%A7DAa zNr33nI|F>IrxpWL_r1rYwehRu5EVPD`44+b%>m^0OV)JtaP8l_{T6T-q<67|k zF#Nm>xKfF(h2!WZr!}AUTL{_p*_uz=d>wz~@hiIK(KYS7)^DCptD^;9E7;gKZzXeL z$zu^qsbkB3aO&E>yB1nN=^k6!xE8$sH3q&9z)u74(*Q7FgaL}D)CCRuqe!mJfX(KU zTvVHzxZ~^l%Vr$(l|NnEWd79uv3-^9v89b06}12Nha19YTq4aC@cIc_L#JH&vtRrR z11AQ^M<*@d0xj||aM|<_bNpz09?pngbluB<>y>`nZ~0CmknXXijXP=B!o7#Rfx-Jp zu6;6)reM7+f?=somhd}%-^xImJcRyR_2+%C0|R*&(8z7yr~dm7Oq=;9-D67|*9-!G z2J(Cvyc$7wX%h+7mL4!<%U{G-9)A%Bd31%>6uQ=3d?Yqf_)v2n_*T;|W%Fj;{E}|0 zu2XvW(=9b}N4m$BHm(r>u7>eW!b+Dg&=M_G8E9crZea|neC)G}!hfHB*7GL*@7w=+ z{Mwx>T8Smw<8Xb_^Hs0Z#6#>iUoL+@EZ6PjLAYtr{O{_O#$*#*jab&=`$j00z=9V6P@(-u_~L)M5Oah6m#6R>zip_iv)t z8>D+|Y2&8UZ0EUGlEG~ge@k*@Z;Hu6(Idh_p?(M}8 zd9gj8>coa?<^1>l{Rg2<|C8>qrHyMEi$8;VB+2L`C47M|U;qa68K5}V_7VQk_76D@ z|G+>k2EM=dfB&ZoYWR+Hk1cIn!%$oe?X6ZIa@;m2f%ZQIqQGuBcH8H-&AihxlZ>rZ zW|>Q1yH&O|$L0E;$EzNw*@x0SwzP50B5^aYAAA)+Gf~x>7%58XX%CBNZ;b)+1Ct38`m%t6GM9-A@-RN@jHIkVt{5+%OCmUgJvkd z#=SAccwwqE1HS@o7hnEAZ&#&zY-!`pRqW@!$%_Jz1jCcy z(gcf+X>?rDc*|?}Mbj@^e93#-@Fg+Xh98N?_WVd}w&&Bmaq3#QZod3~-mXgb*wV(G ztJu$de|pTv-eB|Z?;{EGiB1Yu*as6f47ANaAM=5}5AlP(kI04is2>LM*U+w~dF!Wz zyBw)>k1cK7rH(y4y6@-8fU(IZc6%nWekL+}jjv$<24DaNEHFSV1E&@^-Djg~+&=V;wzP5QD)x8(C&_VN;tA33_R|<9R-JvG66-!qT=Viy5BH^jbfYb890ZLDJSZm(Y|}~L_yS+R01UtY z48TAN2KF^V_#lN3*oP&KzQ6q6?Unz=rfvKy-D67|H!8?qufUU~B!I0%Yf~O+)-Dy0?y;qfyVQ|KUq7hHl>vWgB|Rpg zJ%!1h_x8#Gnk~m1`poHLqtWR#t{L|nw>%FUX&IQBBc`6qt$U4Q<{6V~(B5d$ZWWO3 zv89c>)sko2={1*E2Fw%8X_GBBq9+W%01WJ5faV>3_VA0eD8mvLzV8arHz{qlc)Yw;HPRLz^-wUQk<+6Z5s9BFR@dP0sGBCJ?-EY?O^~0 zVBqg#kMqd)MgQ*T&88KQ?y;qfo7R(OzZ7^R;WFvM01UtY4A^9#-hyP0g?cVVw6v_p zR2qG)+g~adYw4sF1EqZM_wl>==c0cLU8!`BEp6O_sJ!&A0$dc3>j50o6dvU!jWqUZ z6#!|*WX%WIi{D|OCkA?Lbb9jf`dD@5-eGt-9@Y&eNp00AB;Z{u!j=D4I#TIITiUo4 zVR`vq1s1Oi7!t%=69n&5m|S#bWOz{E0UO}31qR4#mmH(Vr5+X-@6%`0oY!oQ9E^Xj zU$^<#bsw+vVCxD<_t?_Lt!v8`?&=#;R|X^r+f1tViX3#tXD~3$KwAah^cdBAAFsKs zxiWryHvG2Cku4uBkEI2FFb3N`-WyM@@p`BE3R6J3$CfrOOkcL*=K(rB7vA`AL$#_Ad_F8d$RbxQZx(#A!I%%%fZ2IQgu zEQG)S48Q;kzyJ)u01UuDA_l$|{S000v+H24DaNdSJkH6>s!b+Z2%Qv89dMrZ?|$zYO3+ z=y(x;)$txCCB{hcH8Q}W87zz}@D~;?VR$(n;+#Ccv$*{z3cJ;&a7|o8 z@te+Sy8_aUwzP5EHRqkfa5wcEf&C`Dt%ZVaY*GO^M|DD~WbdN1<+)m+n`|xuNWd1TK!T=1w01UtY3|M7=(|usqD!bO~ z{=V%09evb31*CgyY2)_k&bz-9sQw#)Oxok5&C0U1Nzk&r#N8No*8Y+wEXN(TTZ=dB zjbpZKeqtW0!>4N>?rEa-DUOt3C+Z%hdu(ar5;=g~{HuVW-v}h}*Gl|4$E9e}@x}gly!;dg-?rpi z#a%kSmK3%u)OwW`~0qGuF+PHK+U{7BPy!VpC z7^nIKxm>*BKXw0Ev=8QpD~sIrWV4kRwPI&a?4%lNzrJ;C0>Al}xLcI&v89bm>UkZpW0+8%;CVTcx@dyJj00S@p126ysZ88vgnwS3| z(6s~n=3mCHP`byKHZG%6*!8~({A2>KI03Lo0=GH1ZIP=M$CShO?dq!p0mM zJa3r|J~fA5%lulk-E!P%+V0ByH=3QY3P|_Z(#Dnb6G!{{DUd&l0A(8*&4fweW3_m| zZrFu^X$Hu()4IS5y7a<;tsF26FUJFL?uXNLIUnxEZ~hf-_oN$bY2ykzio^Y@fKL#A zRsu-8`x7r3q9F{x01UvuIs>-4v-R<`?sNPF1AiaOeqt6MQ@*BmH=6%{Tb#20N%z>& z#+CIGM>{FNBEYZsBs)J5QY6f4lTv5)h0aP05clw?#G|e)>J5|z$5Z)a>N#CMYv|aQ zKCY~%`9JkG#qUY?*wV%ocNGUbQ^4dR0EI+flN$wveSZ_P_I;Q-4m}g?a6yxnnh*9z z&VYe+23$Q)^MBUV)VM3%V@n%X!&@BlT!H(;;je$TCt6#DPh7!iYiw&ij2rv<#Itrh zUJug{zl7;@;;F5;JdG<>2ewDMB?gES_*mk@>T7U4a_wt(SIqkl^7vO#0qGuF+PI2N zyyG4`x)E!7kW@flvlm7|G4bFuWWOxewCX{$0WTcviG?S3m*jMqAoA0q0@D zjRLF$@ST8Tx`~rYDxH?0)hpYfISjPKfXa%WiXAQama)v`sx7s{miNpZU+Z~Ssnh)5 zv@7+WknXXijjQiFESOe+MF187W)=b3onR@%v6{8idtu12T%UuaZnza-sbOB+|)a~yw7f!ET>j^mvdN8E=8>kRZzF!nG; z>m2U2-;$3l*}B&+yq`I;T?Sl%{=8PC^LkwcqA zTT1EAaVTP800v+H24DaNz8G-j`D<8-&Q>)QknXXijjQQ3jvb@Gj;{m6HFPxn*9AbF zeoUU%`tcYhU?7}0p{b{+%vzGi91)BzeQK)yrG%` z(ml4can)SLfj279*&;w}!f&leX>B~Q{$%^wMW@~4r;eS}`-5$}Y;E&hd;?d4xe~|N zrdMx#lpOCcyc`cD4`}IFt~h4}U}J|;>uu7FwzP4zJjQYND8NbpKM`Q;CjzK6Efqo7 zO4kAdFkpd!_>~p>s^wRm+Q1d%H2-@#lS=QE?y;qftK={ayITPk0ayeuwg}L3;iXgL zXcd1wGvUV$7x3773^4w%7$8@K>9ma}SCP~F?`})#>_EE5mNu@Azc^|d1y}^=auI++ zAZH=KzPA-n=!R}E00S@p1J)RDJ~gS0&!DB{%QvAI4z70t2oV=lA{+HY7E6CEa678&|_y95b~7oC(n7nE(_R z^$H9c+Irg8;2wYL`5T|;`J_f{a!feb#(*ot`Q$%!H&S7L(ml4caTT1!A+sp3@l1ei ziIWKj-P&b<#-d%{61Vtvo&nATn%4$yYH7oKl!HB2h4aaOmR6+vPNjQnY2(WKiX-Mz zp!-FDxB~8aV!eJ`Yr^NaIVODe30E)x12CY*0P`+PmSxhF;57gF`jFy#mhQ2ojVtad z4wzYiXC{-flL>mGcRT|Wz44mW;;bcKwKSGmJaAk)v5T*+eKia($HVoLy*+kC_*3RW zoZS~zK)TVEHmoYm1i7w`D9Eq~_X zB+Y(HEo8aEo94fC_fhb8(ml4caRr^kp{gk076D=>_1NvxOa@H6J?RKz@ZJ;ej1}Ht z00v;7Gy|^crunbZdXzh;bdN1}fyM-)FxoxqsFxyE$?x1*CgyY2!+Hh~v~&;PG(y>z~`ne_w*V-5&)On)Jay+CnF_ zX7O>YJ)YG1us`w?48Q;kSY=>ozVfxME4XR?Yj+)mjxXI~OB+|nK^#Uxf&1x20IQSW zbd$3*F<71Ku-h{_?e8ybmR_^UcRO|ylkNDDT%_bn@?Je2(Y~Jc^D+3{{NGDd+!#?r z0qGuF+PEU_;UGc^Oe_L0k)@c(XmaK!1YQ zp$Fku0T6083YsF_XiFPc&`BIhMghM>`q{&TkZz1rUg@-quV6T~70v3zNqi?&LeDx{ z)QOdz##(|Mj!}nWbhoOzt7$*n?M|l3#*ktPNcY&%#ualB2NF}@hqLFyYO=>}3KeS% zXf~;(IigXt#x3@ijuDOrb1)FYfUjlU&DXU2>resd9$VVD4q;))e-vO5;Fr~jmPRV3 zKww*|oMSia!T=1w01Qks;Hp`g|34*tpLe8tY-!{A>|MQgm_yhuvl=b zNvL*ghj!%|;B1ldn!|Z&&8^HkR_sjeAN%`rWh~AAsh02do^+2bZCtm=Fz_=4SOjQ( z5y1XrPl4W}4=K*!zDMpEvo-GfTC}U5mtFn(=5D@rLV+hHsC^TZ zMg98v^rAoiT4WNNQ*c^uL6V%3!hhEHQI9|Jhjn(Q?RPcn<3!!cQynWH-D67|*D*8< zeO7@-CeP`~2VKww24DaNU;qYSARhzi7EXrY<#@q<489n@3W)qgxij-_^%yb5(DXcNnE7UGMr0Jj|kVQhJQGw zo`1fZ|NG^Vl~;RJK)T14Hm+A<7V>_t?_Lb&U;!4^-gJZTHdBq&$w5 z$$5Tq9yQ`G8o_`H18p^rrfu;o3=Jh3petWO>mT~+$DsWRnF-6|m6V@n&? zEiw#zhXSuPCWd~FN#W6tuk#d9=!dQ_P=|r^jcA>5z)uUh+o~m8P0G*w?I_H9eXDej zEp1${#4zr?3RM4@z_tr5TN5|MVhhD0V`z_K@<@9=or+WZ+=rj1e1HDjiGyKyIUdT2 zays~y<9=W6|6y-s%KQ6NK)TVEHm*-z7F8b4d{ zGj_r%42%r8QuM>!?$eZ{?4?Hqq<9eipF{f0(C+;qPCSaVv_)9SZ12ABl0Tv%@ z`!8MmwS9VBI-U0aj%P|+Z0^g|j=$aQN6Lbfef6h+bdN17bm${;*(K5pXByA`^V=n00S`a_t8~|AMSR4Q7Q5O1rjJA z-D67|mq2`WfdUf>_(cE7#7FT112E7h11z5P>38D2ZNJxw>srU%&$Fuq-`(xUM4iY} zD6m@r=^k6!xZTpT0~DB5z$g6owu^!NlcRNg_+%RftTT-LFbo4Q&;kR)@Nzt84CJ(8 z;R?am*)owAP#}Q<(v7yXaS6m{7bvizz^lfjM3qy|52u2lo(=e4OM95m@(1yOKVSd` z(lOxb!k;U(AuprAZUv-!Y-!_mOV18aAV`5HCf0NlD_TxzS+b!ld910iYCp%RA=>_l z%^&!)Eq})PpY8E~3i`#o_^*@NGK`(3rI2%l6}vg|@9eZZFQavfv6ff8PK7 zRN=;RC{RlQ=^k6!xLO|LxF|5Mfd67y1HTuzwcy}=G!`(R!9cmA3Pk>1pmt$Mflt9#rr^_#gEAVx z8al&37z5;sFrE74$yH^X@_$j9@<2%e=^k6!I3+J)3kuvS@WkY7sqly`CS$j^q{X$Z zJ&pBx>^u(7W9@Om;wSuv^N&_4T77@t|KYYQ;~5mtQ9!!KmNrhuhggCFa|-zHoPCy_ z6e(JJEW~UyUne$g*qbkQ!^VHot4F38b3XpicE7e^F}(jc_$o$2S986)8>jrwRi!*H zqkwdeEp42P3o!%*78URlQRG(wnDApJe71!b7=VFx7}(xevS36Uv=aw$zWn~w|9P<* z<3$t@Qb4-LmNrhviI{={0SfRd0l(rVbYI9&(8g-Ey?N-haAe%EjIlk;z<@Od)aKG* zcsU+Yis*{44|nsYUGfhF%qSq;XiFPs#>E(l0)G^^bNBeEfDNkwDT@X6MFkH7FwhGF zD&3!o9liKnX`DHI?`oF&tSBJeV@n%n#lzT%0=EjhmYJOSNVts7tu|Be zlZPL4&7*7DILz6!SQtMxrsWAe)9U$s-v8rmdBrm*U_$}v9$VTt8~(*g6qr+h?*(us zz>%UbZBdAx=()@Qi!aOiSmFm?+VW*Of4QQHQ~u{FOP)8QfOL;7ZJZewV<-yDD!^9) zSOkb(1nB3J$#eyytwPyS6NatU*=j4FkTb0FxMshrra0w)wxr|*OA1K$*wV&X@-nuf zz_J2QYm*+Y&ovqpe6TUc2G7F=48Q;kw7|gkDgO`4r4+BCfE@*-du(ar?D!Z2ueRzNY7zkyc-2CBc zpXWc75O+|ZQ3a%XY-!^f1%hFrz?A}zWlsqxH_20Yg%)0H2PXKlOjOsC0OM0v#wI-D67|*8v<15d|g`@Mi z4#tQAVG0!frGWiKK#zsg+$pGY&-bViW7dl;_|)?Wae_~*F)$1-$Ahb9{73)yVRa2# zp+NfzNH^Nj#!-qULer)c{3(G@cO zqksOP01BKbAl+k28+RrmcToTZ{wVO%{?7$ah*LDuIKaSm1~_$LyLNC_Tf27VKUbCb zPyPLe6Z}H~6u44Ay2q9_?n+1=q5ul~QNVx6?u|mOb|J^{VbBHxG|V>qL_Faq3k>)V zAzTf@r~ZFRGVY+jtpd_LwzP4#TJj7EpunX95ANZog@OSaDQsatg@G16fxI5W^6z@h^FY=936C%wW6pX~Dq zr?2nR5B|^(24G+h1Fp94pZfc+9`X+bP#{nN=^k6!xIlr~35l;eY?LXR_zL zDT_tUd{E|z#f6ltTiq8iS|&!(xs1-~;?PwVpYG;AT;LxHpg^Po(ml4cagjo^ISQb_ z9|i8*z2DY~4eU)fpunX9(ml4c zahE#s2nA4Jp92270q^z-sFcMR`|92Q(`UHYDbjoQALA#7rDk9{C#dP1H%GbJ;Mv`{ z(%-%si+7{Ig#yw&wzP24euY2kYXPYXuG9YV7B#2is1J(iRyLNRC zYogPSuhwzvvZ}ur(WhV1^IexS3*$)}3vT}ZbT>}-|5Fli2L;kAAl+k28<*Y}>=6Y} z;8Fp<^8ZHhWuXAX#$24z#KBfBw%9LhDKT(%iGNP_zpRCLgaXMGknXXijZ5wdc8CHf zFr&bOd;UYIP{9@oXBdEi91O7F(<)bKKPAt>Ud?^FIsVPvX#8i2Af85n)Cx%V*wV(O z_5}Mw0TftM;K_eNP_szk*sT`lj0?6?GC;EjPbqn7cVBMO|8O_I$e;M%%khwSkL(Tw zno~f!(Uvx@ITRQW3Ybv9e@yU7h1qUZh;Q+&HUo6{vHs!I24eb}88?rAy4$0PsskfY zpg{$sdu(ar8iau%p@1O;?wqaf*F^=7DKudqgaMk^@|>V~dCfy&Vc#|^Zp7(#_GN!V z+tQ1eZp)vZWqhjcQ#V(? zx|?6T=N}57KxGA_du(arDm#wDqW}tAD8NMmcK>!@XaOC%UHt}=Pv`3UK)or!J{W<4 zybQRR`rX}V{4Yut9-u&71*CgyY2)hpjiaLg3QQ~T%+&((7IPHK=o`j>orR*X@!)rK zf`MBG=HuK=(Z2D&pPs6D76nkCrUKGEwzP3Iy~eRo00ov5@Sili-4-eoZ(b9dpNh{H zncMuFdVjDr?+3J=*9LCTrZoosb9D3Xr@K8aP13xE0w_>d0qGuF+PJ!YUGZfzQ7-i|9Wl07AR0%0qGuF+PLbj!vGXOfj|Ww z+;;q8!0u}V^j_H0sOD>I6tq>a;X1|?ZMwG6&SRTrKk4gxc4dG6Grg7ny&MmfE#UAd zU`7GyMqAoAGcLwZ6hMJ*1^gEhv#thEW$IU~`8rv~uAyyc=N!5ne%0_Reo*v-n^WK1 zO`!Y#p5^(20w@rqfOL;7ZCsGNY=i-a>uv`*UfiYFDoD zvS0EM44gCI=1e~Emo95C4h6y#knXXijSJJ4txy03^c8q?CPpp<&UOR$ob7RJCEilo>E^`W?ndKpsF1-_6bMm3y2q9_E<|0nK>-x7 zsKBE$I`WKw)CDyAOI^rn?~jH_+dsr(xPM?dTq|9!+#LAsZhldme<*+g4JshrV@n&? zAPfu%1yJBZ0Tu$1{C*$}K?@B5W6*8Z@J-LYNt<8Y4Cp`ce^9Q!vF$jZ0UET-fHdG2 zZ2}Ka00mlBz+Wsd>(2*L!1r9hGxl@-`N{x1ob$l_Ts&MZ9Jo2|&E4+CiQHOqF$^!q zgEgbEmo6R#<{4lWU`)sSMFA90P{5xPS$H+zvQncW&Q%dF?H3=w-4Y+X1|N1AaC6#4 z_diawG$-@T3EH3y4CG~i1%NRV^A`nBKuH0=5b&F#*KW~^@9-TAC^NvKTW&tx95&hb zj}t8oPTmFwebE;N<{4lCV9dn)MFA90RN&4T^_II(WBMu@^H*)!Q+;0vayUFt1-5&N#nlw0h z8yxgSUl^EYfCYd(*_-#G017B5;D1Mu3kLEPf#X>4Tm74(QL(B8c9&Z8VF4nBH9yz5 z+pflcoHS`p=9?3=K^qvz%K!@iV1@7DcxL{zVg#en@QVrYQkv3Eu9TMgaH`%^@|mur8w|&$oE_l{Uv|*zSVy;RBbg>_!ECxVt@sJ)fCMJD1ZWn z74QoI?@LAA={1VslNK~bXaNH-P=*1uQ;7VW;ckBJ$okJxvw*EMw=mEa11tb!P4Da+ z1yDdlfjei%n?IkEqP|Q~kIvwV6z{?AggfUPvQFwhnQEC5uW0x$ptP(Vn5J7>#l z__YEwo66n_d&b*dvxZOcX$l5hKKGyYKf9Ym)9>u~^N)tAt%eGJ;!jHqumJEU6>|p# zPyhuk6!_^Ly`?BZ*$2%`pA4`-)~Da=#{1a?{d^9W{ioh648zOupl&4g(RIVXb_Q4l zkewee35=r8W{9LKN#4~01E)7rVETk0Td8Yz<<*87JkuysltD6qqz6|Q#SEj$_9mf z!4nK@WnenLxxDL}{#SSN3$kYa(Y$PLUeFHhU|=5uEC86DIxrjsP(Vn5M`z1#3jNqZ zf4aa&$5zjeL{D1XHf74C> z`J6=avb}jhJG6s=eGISwaGs61j{+!w0{Ip21@4o(6*x1Xtwy2mrjG>y{J+FN>DTt< zmaC>ef7TT|f@%XZ3@^uns&Ux0uj@lU^gCyORRF=60h3Sw1-enduLu-9J%CQCbhpIu zU=9X611{Hny4$O}-Md@&|IUkX?$eyX01T95fCYf=ryvAC0Td8Xz%K^;bhn+qFG#aN z!A;G6*#0M3#zcToTZP(Vn5 z2WQKxyM5A3g*HvGm_ck^d9-MJh8W)wIt#<@>(1_Llqk^vR~W)d?` zqW}t^fRF;dkoE=j8;w%xMv2B6rcyIiZ-3!e08MA3%S)f`_UvvC?#91B1xgnC9E;`> z24LWv0TuuP6E&Nm01BXhkOIEYesed@4shQsrh!EREe6_ORC2lJ-Q6DD?atl!w?TpP zVx0RlXD|Q*B^i)j04OO0$0G1x00yiv@LhBI0^Aqkum1AdT8$8mDgJ zaPMyXE3AN(c?LVFiC~~T23P=K0RRSI00xXQkf>hurwRCv{#X#;s)A;&s>ou@dXs;? zSV6;|C|f4n4NX;hO%*=Hr&buC@HblcTLBC^Nro_xkAZ}>==rW#5MUwTY9S!*Oo{Wx zllyUvdMdqKK!3X1Z+GJp{`2f6bf38~-`t3{XbS_&46p#e0ssua01OyqpinLAPY?D@ z#H+gnUQD1))03)s(%KKrx0XLN*>G-5U(`*XyOPhXiG56tazunC@{15KNKZ6Qb znP;$*ng|BkV}Jz!764!X24KJ_141>g|HSdp-F!om{8|Eh-@DC5mIaD+zn*<}-^Z3; zc>CdQ{A)k~nyU7iDtwAhtuR30Z?y2Y0vL9Z3}GN21L8ICy|d3ZEU)hN?rxH23b44a z-h|Sqm(j?@$j5iA_-6mX-R|6te~l`@+?a1}L|e3lfn^3*0AK+C24DaNj51)bF7^$L zZ)~32?b+S9rT`Zlyt?3EnP$88qK0Gt_je3Dy1zaqez+U|I#NKTK^caZ<3Yt3>{#yF z&f z*X{cp{&&ao+c(=k-Cw$WCj$Ql>Tl|A7=VFl3{*QX4TsH!1Ha)n7|>y$@gmwcN)PV# z=x)#M_V2=gZ>lUdgV>zE;jX2zWAoG9-reoZ-8`$l(SL9^{-MCE0?eg4b1A;S7rimS z0syN|FaQHEV3dK`%Ce6ae3RvyE#Gv#yPM>N25L2>95?-fgJbODo3&T>*Ryx;Zu~=m zO$zkZa4=q)Y#7jCfWqHs;ZG3h1QEW#7quAJRCTuhCf}4jxSMa#{LMFO@9xF|0T&%u zyy$>q^_`%)o+>L)IkW_(M^9IMIW`O}1U;%&y02qJ)7%<8}(rUDyoy{!} zut?DG0)fMOZ0^0EpTBQ3`2EDa+(>D{Xu@Cs25K=t;cv9?uLTUpC0W6M4g+!(Z94{y ziv$mDNMp13>hAmI@tx}sq(8lW>sJ<>KR!plxWA*X#>W1^J$L7B{6hgb1(-{9=2Cot zFM4Bu1ppQRU;qYSz$gQ96>Z-J`9{+>oc{LwePhvJ_N;>2UqEo0eY)HG_swhPbv$q8 zf4Il|LxCm~=&j*kyfoP`pu+%#ztO^9?y9*f9GE39}0ABiND~D})RY2vjr>mdKI;Vst0J;ali2wiq literal 17248 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 +// std::shared_ptr transform = m_World->AddComponent(ent); +// transform->Position = glm::vec3(0.5f, 0.f, -9.9f); +// transform->Scale = glm::vec3(1.f, 1.f, 1.f); +// +// std::shared_ptr sprite = m_World->AddComponent(ent); +// sprite->SpriteFile = "Textures/Ball.png"; +// +// std::shared_ptr circleShape = m_World->AddComponent(ent); +// std::shared_ptr ball = m_World->AddComponent(ent); +// +// std::shared_ptr physics = m_World->AddComponent(ent); +// physics->Static = false; +// +// auto plight = m_World->AddComponent(ent); +// plight->Radius = 2.f; +// +// m_World->CommitEntity(ent); +// +// Events::SetImpulse e; +// e.Entity = ent; +// e.Impulse = glm::vec2(0.f, -7.f); +// e.Point = glm::vec2(0.5f, 0.f); +// m_EventBroker->Publish(e); +// } + { auto t_BrickWall = m_World->CreateEntity(); auto transform = m_World->AddComponent(t_BrickWall); transform->Position = glm::vec3(0.f, 0.f, -10.f); auto sprite = m_World->AddComponent(t_BrickWall); //TODO: Rename SpriteFile to DiffuseTexture or similar. - sprite->SpriteFile = "Textures/Test/Brick_Diffuse.png"; + sprite->SpriteFile = "Textures/Ball.png"; sprite->NormalTexture = "Textures/Test/Brick_Normal.png"; sprite->SpecularTexture = "Textures/Test/Brick_Specular.png"; } - - { - auto ent = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.5f, 0.f, -10.f); - transform->Scale = glm::vec3(1.f, 1.f, 1.f); - - std::shared_ptr sprite = m_World->AddComponent(ent); - sprite->SpriteFile = "Textures/Ball.png"; - - std::shared_ptr circleShape = m_World->AddComponent(ent); - std::shared_ptr ball = m_World->AddComponent(ent); - - std::shared_ptr physics = m_World->AddComponent(ent); - physics->Static = false; - - auto plight = m_World->AddComponent(ent); - plight->Radius = 2.f; - - m_World->CommitEntity(ent); - - Events::SetImpulse e; - e.Entity = ent; - e.Impulse = glm::vec2(0.f, -7.f); - e.Point = glm::vec2(0.5f, 0.f); - m_EventBroker->Publish(e); - } + { + auto t_BrickWall = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_BrickWall); + transform->Position = glm::vec3(0.4f, 0.f, -9.5f); + auto sprite = m_World->AddComponent(t_BrickWall); + //TODO: Rename SpriteFile to DiffuseTexture or similar. + sprite->SpriteFile = "Textures/Ball.png"; + sprite->NormalTexture = "Textures/Test/Brick_Normal.png"; + sprite->SpecularTexture = "Textures/Test/Brick_Specular.png"; + } { auto topWall = m_World->CreateEntity(); @@ -365,6 +378,8 @@ public: job.EndIndex = texGroup.EndIndex; job.ModelMatrix = modelMatrix; job.Color = color; + //TODO: This Depth is probably wrong. + job.Depth = (glm::vec4(1,1,1,0) * modelMatrix).z; m_RendererQueue.Deferred.Add(job); } @@ -380,8 +395,10 @@ public: job.SpecularTexture = *specularTexture; job.ModelMatrix = modelMatrix; job.Color = color; + job.Depth = (glm::vec4(1,1,1,0) * modelMatrix).z; - m_RendererQueue.Deferred.Add(job); + + m_RendererQueue.Forward.Add(job); } void EnqueuePointLight(glm::vec3 position, glm::vec3 diffuseColor, glm::vec3 specularColor, float radius) diff --git a/include/Core/Renderer.h b/include/Core/Renderer.h index ac84ef7..241366d 100755 --- a/include/Core/Renderer.h +++ b/include/Core/Renderer.h @@ -93,6 +93,8 @@ private: void CreateBuffers(); GLuint CreateQuad(); + static bool DepthSort(const std::shared_ptr &i, const std::shared_ptr &j) { return (i->Depth < j->Depth); } + void DrawDeferred(RenderQueue &objects, RenderQueue &lights); void DrawForward(RenderQueue &objects, RenderQueue &lights); void DrawScene(RenderQueue &objects, ShaderProgram &program); diff --git a/src/game/Core/Renderer.cpp b/src/game/Core/Renderer.cpp index 59c08b1..169091a 100755 --- a/src/game/Core/Renderer.cpp +++ b/src/game/Core/Renderer.cpp @@ -207,7 +207,10 @@ void dd::Renderer::CreateBuffers() void dd::Renderer::Draw(RenderQueueCollection& rq) { - DrawDeferred(rq.Deferred, rq.Lights); + + //DrawDeferred(rq.Deferred, rq.Lights); + + rq.Forward.Jobs.sort(dd::Renderer::DepthSort); DrawForward(rq.Forward, rq.Lights); // Finally: Draw the deferred+forward combined texture to the screen @@ -276,14 +279,20 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights) void dd::Renderer::DrawForward(RenderQueue &objects, RenderQueue &lights) { + // Forward-render semi-transparent objects on top of the current framebuffer glDisable(GL_CULL_FACE); glCullFace(GL_BACK); glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); + //glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); + glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3); + glClearColor(1, 0.9, 0.8f, 1); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + m_spForward->Bind(); DrawScene(objects, *m_spForward); } @@ -307,7 +316,6 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) glUniform1f(glGetUniformLocation(shaderProgramHandle, "MaterialShininess"), modelJob->Shininess); - //TODO: Make sure that a normal/specular is loaded in. glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture); if (modelJob->NormalTexture != 0) { diff --git a/src/game/Core/Shaders/Deferred/3/Fragment.glsl b/src/game/Core/Shaders/Deferred/3/Fragment.glsl index 27e9c62..c08e74d 100755 --- a/src/game/Core/Shaders/Deferred/3/Fragment.glsl +++ b/src/game/Core/Shaders/Deferred/3/Fragment.glsl @@ -38,7 +38,7 @@ void main() //frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0))); //frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel); - frag_Diffuse = DiffuseTexel * (vec4(1.f, 1.f, 1.f, 0.0) + LightingTexel); - //frag_Diffuse = DiffuseTexel; + //frag_Diffuse = DiffuseTexel * (vec4(1.f, 1.f, 1.f, 0.0) + LightingTexel); + frag_Diffuse = DiffuseTexel; //frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0); } \ No newline at end of file diff --git a/src/game/Core/Shaders/Forward/Fragment.glsl b/src/game/Core/Shaders/Forward/Fragment.glsl index 144062f..a0ec258 100755 --- a/src/game/Core/Shaders/Forward/Fragment.glsl +++ b/src/game/Core/Shaders/Forward/Fragment.glsl @@ -46,7 +46,7 @@ in VertexData vec4 BoneWeights2; } Input; -out vec4 FragmentColor; +out vec4 frag_Diffuse; vec4 phong(vec3 position, vec3 normal, vec3 specular, float specularExponent) { @@ -84,6 +84,6 @@ void main() vec4 diffuseTexel = texture(DiffuseTexture, Input.TextureCoord); - FragmentColor = phong(Input.Position, normalize(normal), specularTexel.rgb, specularTexel.a); - //FragmentColor = diffuseTexel; + //frag_Diffuse = phong(Input.Position, normalize(normal), specularTexel.rgb, specularTexel.a); + frag_Diffuse = diffuseTexel; } \ No newline at end of file diff --git a/src/game/Core/Shaders/PureForward/Fragment.glsl b/src/game/Core/Shaders/PureForward/Fragment.glsl new file mode 100755 index 0000000..a0ec258 --- /dev/null +++ b/src/game/Core/Shaders/PureForward/Fragment.glsl @@ -0,0 +1,89 @@ +/* + This file is part of Daydream Engine. + Copyright 2014 Adam Byléhn, Tobias Dahl, Simon Holmberg, Viktor Ljung + + Daydream Engine is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Daydream Engine is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Daydream Engine. If not, see . +*/ + +#version 440 + +layout (binding=0) uniform sampler2D DiffuseTexture; +layout (binding=1) uniform sampler2D NormalMap; +layout (binding=2) uniform sampler2D SpecularMap; + +uniform mat4 MVP; +uniform mat4 M; +uniform mat4 V; +uniform mat4 P; +uniform vec3 LightPosition; +uniform float LightRadius; +uniform vec3 LightSpecular; +uniform vec3 LightDiffuse; + +in VertexData +{ + vec3 Position; + vec3 Normal; + vec3 Tangent; + vec3 BiTangent; + vec2 TextureCoord; + vec4 DiffuseColor; + vec4 SpecularColor; + vec4 BoneIndices1; + vec4 BoneIndices2; + vec4 BoneWeights1; + vec4 BoneWeights2; +} Input; + +out vec4 frag_Diffuse; + +vec4 phong(vec3 position, vec3 normal, vec3 specular, float specularExponent) +{ + // Diffuse + vec3 lightPos = vec3(V * vec4(LightPosition, 1.0)); + vec3 distanceToLight = lightPos - position; + vec3 directionToLight = normalize(distanceToLight); + float dotProd = dot(directionToLight, normal); + dotProd = max(dotProd, 0.0); + vec3 Idiffuse = LightDiffuse * dotProd; + + // Specular + //vec3 reflection = reflect(-directionToLight, normal); + vec3 surfaceToViewer = normalize(-position); + vec3 halfWay = normalize(surfaceToViewer + directionToLight); + float dotSpecular = max(dot(halfWay, normal), 0.0); + float specularFactor = pow(dotSpecular, specularExponent); + vec3 Ispecular = specular * LightSpecular * specularFactor; + + //Attenuation + float dist = distance(lightPos, position); + //float attenuation = 1.0 - pow(dist / LightRadius, 2); + float attenuation = pow(max(0.0f, 1.0 - (dist / LightRadius)), 2); + + return vec4((Idiffuse + Ispecular) * attenuation, 1.0); +} + +void main() +{ + vec4 normalTexel = texture(NormalMap, Input.TextureCoord); + mat3 TBN = mat3(Input.Tangent, Input.BiTangent, Input.Normal); + vec3 normal = normalize(vec4(TBN * normalTexel.xyz, 0.0).xyz); + + vec4 specularTexel = texture(SpecularMap, Input.TextureCoord); + + vec4 diffuseTexel = texture(DiffuseTexture, Input.TextureCoord); + + //frag_Diffuse = phong(Input.Position, normalize(normal), specularTexel.rgb, specularTexel.a); + frag_Diffuse = diffuseTexel; +} \ No newline at end of file diff --git a/src/game/Core/Shaders/PureForward/Vertex.glsl b/src/game/Core/Shaders/PureForward/Vertex.glsl new file mode 100755 index 0000000..64a9e26 --- /dev/null +++ b/src/game/Core/Shaders/PureForward/Vertex.glsl @@ -0,0 +1,83 @@ +/* + This file is part of Daydream Engine. + Copyright 2014 Adam Byléhn, Tobias Dahl, Simon Holmberg, Viktor Ljung + + Daydream Engine is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Daydream Engine is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with Daydream Engine. If not, see . +*/ + +#version 440 + +uniform mat4 MVP; +uniform mat4 M; +uniform mat4 V; +uniform mat4 P; +uniform mat4 Bones[100]; + +layout (location = 0) in vec3 Position; +layout (location = 1) in vec3 Normal; +layout (location = 2) in vec3 Tangent; +layout (location = 3) in vec3 BiTangent; +layout (location = 4) in vec2 TextureCoord; +layout (location = 5) in vec4 DiffuseColor; +layout (location = 6) in vec4 SpecularColor; +layout (location = 7) in vec4 BoneIndices1; +layout (location = 8) in vec4 BoneIndices2; +layout (location = 9) in vec4 BoneWeights1; +layout (location = 10) in vec4 BoneWeights2; + +out VertexData +{ + vec3 Position; + vec3 Normal; + vec3 Tangent; + vec3 BiTangent; + vec2 TextureCoord; + vec4 DiffuseColor; + vec4 SpecularColor; + vec4 BoneIndices1; + vec4 BoneIndices2; + vec4 BoneWeights1; + vec4 BoneWeights2; +} Output; + +void main() +{ + mat4 boneTransform = mat4(1); + if (length(BoneWeights1 + BoneWeights2) > 0) { + boneTransform = BoneWeights1[0] * Bones[int(BoneIndices1[0])] + + BoneWeights1[1] * Bones[int(BoneIndices1[1])] + + BoneWeights1[2] * Bones[int(BoneIndices1[2])] + + BoneWeights1[3] * Bones[int(BoneIndices1[3])] + + BoneWeights2[0] * Bones[int(BoneIndices2[0])] + + BoneWeights2[1] * Bones[int(BoneIndices2[1])] + + BoneWeights2[2] * Bones[int(BoneIndices2[2])] + + BoneWeights2[3] * Bones[int(BoneIndices2[3])]; + } + + //gl_Position = MVP * boneTransform * vec4(Position, 1.0); + gl_Position = MVP * vec4(Position, 1.0); + + //TODO: Make sure that boneTransform works here. + Output.Position = (V * M * boneTransform * vec4(Position, 1.0)).xyz; + Output.Normal = (inverse(transpose(V * M)) * boneTransform * vec4(Normal, 0.0)).xyz; + Output.Tangent = Tangent; + Output.BiTangent = BiTangent; + Output.TextureCoord = TextureCoord; + Output.DiffuseColor = DiffuseColor; + Output.SpecularColor = SpecularColor; + Output.BoneIndices1 = BoneIndices1; + Output.BoneIndices2 = BoneIndices2; + Output.BoneWeights1 = BoneWeights1; + Output.BoneWeights2 = BoneWeights2; +} \ No newline at end of file From c5bbcec5dc8d222f06ba8afd00029c4787506983 Mon Sep 17 00:00:00 2001 From: tleety Date: Tue, 15 Sep 2015 13:20:01 +0200 Subject: [PATCH 2/2] Transparancy now working for forward rendering --- include/Core/Engine.h | 6 +++--- src/game/Core/Renderer.cpp | 5 ++++- src/game/Core/Shaders/Forward/Fragment.glsl | 5 +++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/include/Core/Engine.h b/include/Core/Engine.h index e278dc2..8631a87 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -355,7 +355,7 @@ public: glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position) * glm::toMat4(orientation2D) * glm::scale(absoluteTransform.Scale); - EnqueueSprite(texturediff, texturenorm, texturespec, modelMatrix, spriteComponent->Color); + EnqueueSprite(texturediff, texturenorm, texturespec, modelMatrix, spriteComponent->Color, absoluteTransform.Position.z); } } @@ -386,7 +386,7 @@ public: } // TODO: Get this out of engine.h - void EnqueueSprite(Texture* texture, Texture* normalTexture, Texture* specularTexture, glm::mat4 modelMatrix, glm::vec4 color) + void EnqueueSprite(Texture* texture, Texture* normalTexture, Texture* specularTexture, glm::mat4 modelMatrix, glm::vec4 color, float depth) { SpriteJob job; job.TextureID = texture->ResourceID; @@ -395,7 +395,7 @@ public: job.SpecularTexture = *specularTexture; job.ModelMatrix = modelMatrix; job.Color = color; - job.Depth = (glm::vec4(1,1,1,0) * modelMatrix).z; + job.Depth = depth; m_RendererQueue.Forward.Add(job); diff --git a/src/game/Core/Renderer.cpp b/src/game/Core/Renderer.cpp index 169091a..4864bc6 100755 --- a/src/game/Core/Renderer.cpp +++ b/src/game/Core/Renderer.cpp @@ -209,7 +209,6 @@ void dd::Renderer::Draw(RenderQueueCollection& rq) { //DrawDeferred(rq.Deferred, rq.Lights); - rq.Forward.Jobs.sort(dd::Renderer::DepthSort); DrawForward(rq.Forward, rq.Lights); @@ -313,6 +312,10 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix)); + glUniform3fv(glGetUniformLocation(shaderProgramHandle, "LightPosition"), 1, glm::value_ptr(glm::vec3(0.f,0.f,-9.f))); + glUniform3fv(glGetUniformLocation(shaderProgramHandle, "LightSpecular"), 1, glm::value_ptr(glm::vec3(1.f))); + glUniform3fv(glGetUniformLocation(shaderProgramHandle, "LightDiffuse"), 1, glm::value_ptr(glm::vec3(1.f))); + glUniform1f(glGetUniformLocation(shaderProgramHandle, "LightRadius"), 40.0f); glUniform1f(glGetUniformLocation(shaderProgramHandle, "MaterialShininess"), modelJob->Shininess); diff --git a/src/game/Core/Shaders/Forward/Fragment.glsl b/src/game/Core/Shaders/Forward/Fragment.glsl index a0ec258..dc9d544 100755 --- a/src/game/Core/Shaders/Forward/Fragment.glsl +++ b/src/game/Core/Shaders/Forward/Fragment.glsl @@ -83,7 +83,8 @@ void main() vec4 specularTexel = texture(SpecularMap, Input.TextureCoord); vec4 diffuseTexel = texture(DiffuseTexture, Input.TextureCoord); - - //frag_Diffuse = phong(Input.Position, normalize(normal), specularTexel.rgb, specularTexel.a); + vec4 La = vec4(0.3, 0.3, 0.3, 1.0); + vec4 light = phong(Input.Position, normalize(normal), specularTexel.rgb, specularTexel.a); + //frag_Diffuse = light; frag_Diffuse = diffuseTexel; } \ No newline at end of file