From f84081b0ad145cc3a74cfa276ab35f2a5af0c4c8 Mon Sep 17 00:00:00 2001 From: bkaradzic Date: Mon, 9 Sep 2013 23:17:17 -0700 Subject: [PATCH] Added texture compression test. --- examples/08-update/fs_update_cmp.sc | 15 ++ examples/08-update/texture_compression.png | Bin 0 -> 14941 bytes examples/08-update/update.cpp | 145 +++++++++++++++--- .../runtime/shaders/dx11/fs_update_cmp.bin | Bin 0 -> 710 bytes .../runtime/shaders/dx9/fs_update_cmp.bin | Bin 0 -> 245 bytes .../runtime/shaders/gles/fs_update_cmp.bin | Bin 0 -> 209 bytes .../runtime/shaders/glsl/fs_update_cmp.bin | Bin 0 -> 170 bytes .../textures/texture_compression_bc1.dds | Bin 0 -> 11064 bytes .../textures/texture_compression_bc2.dds | Bin 0 -> 22000 bytes .../textures/texture_compression_bc3.dds | Bin 0 -> 22000 bytes .../textures/texture_compression_etc1.ktx | Bin 0 -> 8260 bytes .../textures/texture_compression_etc2.ktx | Bin 0 -> 8260 bytes .../textures/texture_compression_ptc12.pvr | Bin 0 -> 4148 bytes .../textures/texture_compression_ptc14.pvr | Bin 0 -> 8244 bytes .../textures/texture_compression_ptc22.pvr | Bin 0 -> 4148 bytes .../textures/texture_compression_ptc24.pvr | Bin 0 -> 8244 bytes 16 files changed, 142 insertions(+), 18 deletions(-) create mode 100644 examples/08-update/fs_update_cmp.sc create mode 100644 examples/08-update/texture_compression.png create mode 100644 examples/runtime/shaders/dx11/fs_update_cmp.bin create mode 100644 examples/runtime/shaders/dx9/fs_update_cmp.bin create mode 100644 examples/runtime/shaders/gles/fs_update_cmp.bin create mode 100644 examples/runtime/shaders/glsl/fs_update_cmp.bin create mode 100644 examples/runtime/textures/texture_compression_bc1.dds create mode 100644 examples/runtime/textures/texture_compression_bc2.dds create mode 100644 examples/runtime/textures/texture_compression_bc3.dds create mode 100644 examples/runtime/textures/texture_compression_etc1.ktx create mode 100644 examples/runtime/textures/texture_compression_etc2.ktx create mode 100644 examples/runtime/textures/texture_compression_ptc12.pvr create mode 100644 examples/runtime/textures/texture_compression_ptc14.pvr create mode 100644 examples/runtime/textures/texture_compression_ptc22.pvr create mode 100644 examples/runtime/textures/texture_compression_ptc24.pvr diff --git a/examples/08-update/fs_update_cmp.sc b/examples/08-update/fs_update_cmp.sc new file mode 100644 index 00000000..312b9190 --- /dev/null +++ b/examples/08-update/fs_update_cmp.sc @@ -0,0 +1,15 @@ +$input v_texcoord0 + +/* + * Copyright 2011-2013 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +SAMPLER2D(u_texColor, 0); + +void main() +{ + gl_FragColor = texture2D(u_texColor, v_texcoord0.xy*0.5+0.5); +} diff --git a/examples/08-update/texture_compression.png b/examples/08-update/texture_compression.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8386afadb8441fca87988d24802ac7a6a4f5df GIT binary patch literal 14941 zcmWk#c{tS1AK!zu?set1>&TT{IU+3UzR6jUvlMcrNV1E?y3dLvXCZ}3p=j4ld?O`y z)|o4o&|-H#Kfk%&&olqbJoCI~UhjF$Yf>HT%sJUa*gzlc0m%`N7tCKLrOT-(LN<@j$3ixa)c^0+Dl498MDT4;-bYH8f(Y;^a~k zkjgAMBdsU3=zo1SF1bD6uF~J12V1WxRNCKRZGm_Kav94;3I)-EKv)*?i9G{CLn$zC z2qk&0V;<|%1CRs&@lxvjO)ASK)m)5vRxgg5JPUH?pycyV<6v>0LBwci+&+x9dx6}5 z<)Zyji6ZuXGm3)hw8iP!Eko=&Ll8NvV9Be4sB%i*2j%Oo1rbOdolXB>1S7)q30ou z7s!;g$-%mw>;p8rH>{Bm@G4G6f|QICg&2^-jk~i9xf{Q4b6f_yRtJpWG)dmzp!g2Z zW1hmZs%v|TJXCE?JSX7-f(x~2sE7NbFJ3PJGBqP%A7u;c_Nsv&WsoQvOf@?*r~+m) zXof%HD%7r;xS%F$Jn=vsKL)L{P7c5GUTr4JA07@#{=Os@zNh&R$J*3imPKTU6&qibBc?O&l`!njFLBE(tA?Y~f5b=N-@gh$NwukS|k z(i}cFGDvA%+rs@8rP7hAov1wvm>R1exld+EO;QJ`9kaF->CIyx0$aJ6&epyh^e-UqwuOzc#0p|B1pjp-F~$ zrw?2UhKPqKmv{b0cjq)@rxHhw-yEc?PK5bGTco_72gosnffCy2qad@A4D#zFtXCIt z?mJ($FVnZ`VaY0DzWQ1jR2Y(B2#V8O&N&=;f7Sw(o9LNl0@GqzK?v!>jj-H7qfkyJ z=4hyx>|u9Ft1;*U@-=t@#`wLmq`betAMc-|wc)^JJ&QfuOG2nFUDFVI!#30`V*wZdy^?~Wq}`ME zhI9`B4#0%k>DrI{iwg#Up<=Mb`F^;E27CnmO?FO+6Z6K1Bk95(NBM(-vtkQ~RUb1S z4!=KID9_~Atk2)1ve*uIx(ihq<|K9?O&!i_@{rnrfP+#GL)}ht@1rYqY-}(-yeGoloYv6X{dl(=phUE$&AJe8tR2=uaSqwH!5jWPF&+AV-tMJUkE!BvbwA)#I*a2-8!kYyr4`3Vb-a;1O~ zASwds|5^9V#HUC*weg zpgIUle22bTR@TUpG#eyl<9iYrclZ1}EP zCEn14TdLj?_nh$McmTb@{aJtWU4x5U|IRh47t>)e6Ig>Ekoy2w&dR}PBuYa?FvPb%JgN$ciyd$PHAv?arkg6mSaZ3ax)WW@LFMx z9i~vE?Fx_D)aD9r5q~|#;Brg$PnVi!ijyDn{1K-PmJa@LphhH9RvM?F+;Y7LA_g>v z2edID^@;iLO1Tc~$HU?bVEIn~bJ!14`W1Obsm}df4fFskH-f`jcp)?JBPVLgCLo=UHXdzw z|Br&^E}@q4lfw7~R9lvg{bDk#D8tI$>flN)>VG|c|0G0_E%wQc%nv!|DI%Z7Cm?BR z(V5aOO=OJK6a4v8&xsjzorw@cG0K9o2)rpH{628}4HqlTyde4c>#2~Kl<&rg5(o!v%6h0&^Q3Y5PeVTtWJen@%7!phWB{&MDu%(i@qi1}2S~sq64``oyDd`CPw-5{q6fSG zjC}r*B=RK1A~&?%xZ-& zv1oDK@==Qnp`J@rmD|3u7~PYj{zM*SgOi04taGuIrxq-Acr5NpZc(&Xx4=;HYF&u2Iy$ zl7#a-S9~Qq6zLKns)|SK-T(Wd%(&51`R6O>1fM+mT$%)=ziZ6CBK48eQucJ@MpvGM zlA+j>y#^_8|L+MbpIBKPW1#D|bJ#d=4gx>ahVu{*B>7UVQVX)bUrZ#aN*cx)8wx2% zojBR6eFbIgkt0UA;f<0brQ)J#y(>AXi?Z;guiY2RFryNM=z_-YM(lVCwri)|Qubm( zK zsOD=C39rfQyghLCP$hV9X~AeH-y0*z1~0cHc6F>@$h zhn&v?eussPkZ=TMp1It~^P_TH&l`*V`B`xKfmUCicj;qNg?`2^@@Y@#r5R}``>|(v zFx}4Fi|O{4x6H9J3v2YS?F}0S$7rKJ_wz~c^il}?7mu`+Q=xc;9zblpdkJt8GXXu2 z#ogL5SLK9+O=y2RzGksLcZvF&nbt>_V7vqIt8WhL`f3dT*^2)2N7e8p4_-*L7L&X> zfzTz7NiC?Il@<^5Hvk1olHsIvUIm*Qh_{YQ+4o8~SNf3w>X$rVq8&VYtgOM@O0n~* zi_oa>FXxh(4(B;3uYmD8;mU)=t9YzrCCRaa=nN8NEu>=~VNH*;Q?N_N`o~zWLE;Nl zpu>cXSz*M16|AIxJA-1C8&?D8aaP{GZK2!=o_OCIkDI+AwkajG3zm%}C_KrzL56&A zfUi8`G!0`N6}fBPz{mwRSs?7mjJp2tUKPD0Y#{i@=?*L(V14*+(S*LiOUgxB@1PHX zS_OcO3E2Fnv(K&tvZo-`Az`c9!Z||x3Vfwpb129e?@0VNkd2MceJeRh6t8-tkqL%{ zyV^Ni0Oju;3Acb@8i{Y}2#P61Yqt>}6P01S7WXM>9A)~OZk+Q)_u&mvUGVd|v5&A1 zCAo4Y&Ws<2!&`DC9M%AJ`h|YTiB({PP7>$j!I1>{G7`}&0XtY_e|r54){59*y45W4g$*=27`v!ylWt1{H_Y(<1h4Uz0w zYo_SCUBd=_MDsQrtbLmk20!Nw2dhGJm%U8ayplYBFlPThpcH~7kG;t%Z5Jj8QsBsvMLoGx|c$=Gd3zAvv;SxJtzNsHk@k z(1a%$A3iwgP4zl=m~Kh+$fpG>bT0pU83unSl>s%8KWoaLYvC)?-0{tHWJ0`=nY$QM z{?#anMH$s5B+!-s31rIBnPs#Pc2%rWdz~2%g1!*b8FL83t`QYQTp{hO+!(st`2R;H zKSS7oY98XJU5L+#oTJdM>b(YpUDk=%O;p`(p0PQ;=DPyMT}%l#(6UpRWo! z)YVu;1zxbWHk2x;gjFclONGN9YNjZDMByhi%b8kJ^xuN7gGt^O0K1*H0uElD>^L_J`Y$f&3$gDJNNbY#6nMN@x{nPf7lHD=R^_t` zm3t%DNatVd_%jjtU?T>8eL}Jw;>qV2IZ_!Y%zw`B5pQAP{zg{wBPjJ+5hj8cD&YWZ z^|Y4o2QcQeq(eKf{9{CCivb4q^%tVPq~W1>^$kbOq0*07*<8BlLkr-`O7_Z1N*?_k zys?VGnapp<$-`^`AYZP(U8iV+h|h@|@@&s8OBaep3fVhUC{V{_TiNTtLS`xQ=kff{ zCqT(8aTlH%#!xXrLK5K|Qn;}{k8N{dR}KKl$Jkj(Twopcj%1w6q4ps0^G)FL_y2}X z%bp*g2Z>Yp+tp#ic(J25jN#97-R^UY*J=r9je0`~Dh-0k;HD;?P4=U?5rGQ5?pj(fGT84pmvH0`?SmWqBFje|NoL(#4$&cetUmsuPYVLrIykCfd7$?F7 zL%7cy-OCbFj+78PI%hC{OVMU&y%hBk>$}GAJad3Fh0CX*r*~CO#hW=z5l>Ch7p)JQ z=d6adXT@ov%ch&#YLkWUu$3@b0X4<&V;#oh&tAXc7=O3B%lEnVd3c9PwsjT}`hMPw z#%{TRGIL4KY_TIjcPwMVgaPEmVxKC=kv8Y91774g_CM$!f4p2}a4m;jPa^+bf=E2f z`JFZTPq1e1LI5B__c|4)Az*0AFg*)um4!@*NVo9ta)_hR&rH~}GkgQnYO3vO1{&tT z)MvFbRHphasP;(Qkij>;r9SaxpzE~0BOa?Jp!7-y7^WbT0P_-t=B*7uNke7eXT_1* zOKecdv0$^;wZq3WbamV%W`8aejhL0>^-B_`k(|guB8ckV?XGCm8F?leeO)M+KNJ+_ zIjW@m2^Y|GK$VrmO9L5y#L!u`S!5!bL}RqPgfVDZ_V@(ZN3$4>Wii8x{Z~mJBwR zwegzs+zu013@GV`f+C0aAB15l=&hEzm5($xrj`dI;VTNZFs4e7h?^#Cd$(I0o~tmG ztO4`!^+*Yx&ntIMQ@Pp6f+z=SpQN|^EOC5>A$}X&?>IojgVZ5p5nOXB+3O4O6@a`0 zbGQqbaN9m4LIrRf$?0gPKVE5|b*7vJDzG{e%L*u`A3mkLI#xa%;OqCrzj>bX^*820F|IL#`FD!0tWlzJ8D}9m0}9^0jJ+_eFpVmX>kuLKr%3Kj;=zHmTN}~!YO{9c zk5N>dnKssdrzrUe=%=pX_M17-KmCFl1N4iW>_OrKQO3=q_J=e;_6u=iy)+rx|8qOu z*iaq!;aE9LANVQ+!W8!_c!iLSF+lg(CV-GgBN9Pb2oyn*ZRsQgr_~J-jq?Gw_q%<=(}i&F zY&wes&{<*c1ZGm1A`Z@Hx5CPPFv8iWcA%*zxua05S7Ezg{)$DN#8gCKAc2v0Th)k zbO?C5Sb}sPKwk$Fim)i^f0R4u}8a zK4$bX7p_|WWvPxUq6t638XwS)1P-G%sK8H<8E;SlRre;xvy1`ll8F!B*e~mQ2X~?C z1r42e53J6T&alL}axC=n?;a*`;O0xkoK!20tDS*OJSat`$4m}Td5AW{S+W^g_1~^I zGS9;DOrpbfQ_M(>vZY~x>0H_9jM%EXrtThIS2ZHct74V>y>*Ds`9Fr51Nyr zQkK?5gx01}XFykPG2iEZYXP0QYc6X?kQ zoU$)Kqg{uQ5^(t3>*o!!DG@PEnxW=j$r{nE|rh->%#VeRq};r-kE-FFIPtGpX7Flqd)y8;j0)@${E?oCGw;Y3Dbl85=x_ zbpntkJQjAq#T~gQ#>&s_i%e2uXmQcE2b%}ScB=vXeaMngia9(;_q6Zr+sCF^|D`|c zZn|sO?hTqxQYNQ7_gZS|D(L)7hXh;m;uCVP?H$SO(!g6-&iY*CmLXOGTzQlF7d1u1 z=+hVL8N_a&m71uFGYf${pGL1bGc;HB8YsZo!z&l0a`sNRzGu2ALzb5(3=BcF;(Cgj za?*c0f$dx#Qe64jR{{LdW!#2%Y>3?mQHAu2gk9R2yG*}Q{B8RZL$jne+vpVT!z{Xf z2k3hspel%!_gZF{XMtLd%mwy`rG5ng$ClLJPd1UO8p_A_C1gh zqawsm@kLz66iDI@^;s)Z8xG_a$e5uX@X_v{dXWwgw;8o(a4(Or)AG2eS@h25!*?R| zixI$E26kw9ZpV)GY4`lbImiS%_&M;{s_Yb@3@K!CL%se*KJS(bS2|^QnPQ**6?N=g z_PuiJYOJIc#YyS`2XH~y&>wPRHxsDZS2=yi7qL?vl!A7JmKD!uAIQ+sF_2T0UU!s% zm3i*9pToBQ8U$W@z5Uc?1$v)~G@!YznCA2T%rvU$6}k+et{!O5dwr{o6gHb5OI#Uo z;})`?>Gt89Uz{fXcQZdJfa(U9t}NBH*MumtBtk{TiY@6d*Y> zp6e;~9X$#HB^EMr`3-N&0wHpG-W3r_wagaHsQowvgn}B%MUyx#alFlHR0K+xz!o_* zF^?7Tr^y+YQv5AUHlz+DXBmGWudHLlj)A8CI#XxS|2B!=8P|IH$6tZn)sCCj7!POB zt)NK39pd1hxypm*M=3p}NmSJ=FwvNo9naKplG9`(I`M>l?1U3=t~K8bxfN1GI7{J0DB zUZ({?fzwPjf4tsh74pCQI_Gh9;)wo`F;0}RY|ezotj)V|cA_1Cm9Kw>H<22_6)4jB zeK=0A_aiyU@$KP;i&U)WENvRH>GzV2O$k`PK*#=PSq1_2DZlLwLgy#35l3QR)QJxIqf zDyCcAR3;qsxAXkC8;eoX+`CDC(3uWEtD1_I#>oQMr9E$`!vRCdWm4?}_424NDjA&k*KYMg=jEd>sY8d7A`UjmL*rigT-n&xb&HMOKL@!Hw!b2dm zDlKrKP`8NxXb5$+h*4WhJ2qngA3&mmMBU*x`nv}W{E+(g-E9xfx*)-ve6;Uj*N7_+ zK`-SyK~*^*%Y%N#kD&)`c}A~1oQp2^Y6&WfLErm2W0(#PVp03>by&pSiil@Y3I)Jw z&pu#q@}1mm1kmu+c3G+yZkRpH^CG7Id)sjt=y5XoR|Fla&&ZthS$%=E4WQ=V{6b7( zY>PsKvPbFPNr1l;Z16qyDg6x7Nc{E7Jumb&5I-u%Se|L7y%O(oH$~2WGs-Lft~BKg z^cR7YfDqr1H<=Z(o+aW2y1U!wA}4N1VmI>0SR~;DluAd5Z**xFsguQw@~wARG4RkR zkiLcF0xHDlaX$u;H6VOB`W)6;GrjVy=@yV6MDLXLzH^Czaw95yE1A3w_y*9de*t`F4x>~R_KIyxm?(1c9_9T4 zHA*bm6=!D@pUnIDU7i!P<5*Z#rPHgPME@b!j0*Xt&{DUM&(JN2=DigW(4SEvPE+UH zx;qNfdrqAl*#U$Zf@EDeV4LkYWt<;qUiNx(?$~R58h!6iP(4GqdpD&QXl6xy0~+QB zSGX@TG%mu=ufbnS|KiRZtJ7nPb5`TV=Q$ZovHB=@v#vE55ZdBHGb-)~_9eD;#w9@X z563C|h=&4(5^|q*Br40ijTeu`634g3Q&sv)qjbfocfba7qZ_)eyP=V%>Bp9sk)Iq` zgJ^2y%@u&_Anxe*#3a4=6V|hYK4^T=Y9}R_F2Nc0mko$KcTc$6`C)RtWTRu51W#YD zj}PIz)EKvj$TY+-2__kP&iP9TJ|Vy{!I>$EHpq!GFW3ljmeBBQ#U0>=Gf)P{MiO@PXwYV>wG^v3ayV3AB5c8HL?Q<6~?zb&&@*_lpDe zT5Vbev}{+VCy0_Il^>B3xGV&^57n)@9L9u%>!dTX8c#j1M`?WVO6Sn`JI};MaMuiU z;Z|VRP*t}Vu(#I&6}@ovGEA)Jc_qEq2Wj)VDBXW2K{wbD#9eIN{$+2NA0ly!?lpGw zd_&Si-ub^6_A z47Z1mv?ODd9gu?LMaZ3E1ULJ#^-+{yF}faeCI7tUnb#W$Ow&M|Hx(1iuP1d~ z^_p#l23{>Y^D&HP7qO=2up5QY1%ZTr{a*`k*?3RTEN>5LRw(9J@BpfDANSj zhuL_uvoB#>!eLlK!Ts{tU@>t76E>Lsh8xjZP;p9xX4b$^I&p@+@p8>eXXp9Uiv9N= zjMTL`*GE{*PuOehLQ=M}$akj@6~+V!mRMyD%`aW}A1L1@d4Yh|^N%x+^)zCt)OTml zW%ufCOrB9)D;ym9{q&AadotfG@gnC1zQmV(!*WsO_-SvvLyxDsp>*29um)$rK&d~_ z_W7s8f92=}@JmaUbm^Uk>>Y;Fiq>hSR=tQ7pwupi($w_!F)&e zYSE`R8Owb`P591KO-cfPp8D!Md959TW#>CC`R1@VhC5mr!A{5URm!8d8oQ;{HT$I(CACtj{z%rFg6Q1>dtB{D zQ?r-{U*V zaA$RImExFUp~sHgX`sI#eEx9j2c zSeo~_1~7~&iMV2%r`cQN4kA*c7jMfQH?@;H@m@pIe1 zp-FaQ4w2XHPk5?ZRv4$LL-g)isS99)y&o)a^xo&VxA#iS$O-1S;-aBfWV0n#Vd3}U z!@f@T>v*_Yl5Dx}l+22gfnVjaqq##<=2MQcsLElEa_vbQ=*Xv})~`kMYNio~F+itG z1o+@mOe`J?y{v?7j6HrY4~Ur18ft`w$CF~Fz%eXJYcG6McoMv<>k31)k{Yk0`uYaL z)gKlkW_uz=_`_L{`gfymAj?v1M7%nOJkpfSM^oQNO8^aO!3^SkKp3eT1^Q zT^>**H#zK5bpME$^?{ysFoZ8PZ4`EX{#V7A*A=Ax6A47_?s2ys-WHg`w$t8RqREe; zKhtxM)?wBnEw3!Mt7i6cIUt`3`9BIwPBh&4rz#q+BpDHNd@oJ_|-2vwoeXpC_eT`nv9Rn zH-DRKSYg7=eDI>HB~yKBo{v9<7t?4YLzk2>Qp7if<6EJkNiQ-_CpSNOTvH*H&wJYD ztmU?m@{?1a60`HCGg(5)=q-0)@no+D9v5L@qWz#6+TeyBWu8yMEs%Nc$x8M_eViW` zDVg#a4E&9H&Q3@%T5cRc=v4hFlOE&cNUWLPZK>OEWf=|i<9m;PTUls6sI}EO7+6{9 zikvnuv6MLzmD??Us*2x5Q5cgZ`6(@@GQ;ulIB&#Hp8zhTEnb=qz(u~EIX@-E7-4=I zp70YiWKc!P_P~9#tECMF$;Sjzxm~Eu`^o6blaT9RBo6Hn|F0wv=sw>vXjo*##wqwl zGE)7T8@YzyV6{J@eb0S`dr4WT+&D)$F-dj+d7%5-;lU1GC`@V z-mSw0MoNC8x#62U<=I$AmdA*6qYjOO5eqeE^!}6Vw2epTymT*)(1_YLzy!G53e#+T zC2}c$`sH82B}Hc(XWRTx*GqWa11=r&1w_htm|7ApN10s2(`1R7jmPf4G4ynzHB12J zNkV(GyD52xXLhj4fG&hm{V<{|ft}J}9no)FQK`YJ%=3;^YQhN)K+Gk-HFx;QA8~Wi zWMkPZ!U(1iU%+Q)d-3Y`uKi2%HJT}}jQbDqV%Pd>D*kwG=2$A<&RT1&f`W@P*B z)Q3F6v}^cmxWGzWiP&wHR4&0QGd&n%xp!*v-a?{LJWtj+ctWP^TJ8yYiv6o_)=D!g z_cxATLVSJ_aVoJA?<#+rTe2#UiFyNZW7Tk+x$O(XiBU=h79smO#$Ewr)dA)l+NbaH ze>dmUkMtX()7fzyJ9eKex=p6;gaMg{Hy<00&!f$%MAVr>9B_lK6WYfQho-`09W zch1XZvcJ0=oc2r?pI5fMIy)B2_CKeT3^W1aqG3*N^<&E#q998v9{ z`RmZq0q^9OW)6UWFsh%T;7pK?bis;@q9n?@$ld ziQOVsR=D2=n>W>;F~9h}=2}jI^Rrt`+Wv3lY+93zTRsY^|5yc?Dw73(In&fTR?p|Q zLz#dRc0va#z`y5HdzjB$R&bvt0HZOzxC|wxSLE2Dm_)lImlxpY%~x@SO|s(ar_@`m z>R+F^!D2J@V%)(@Oh3`vG*1(*Y}cNH(sV3I;Ltw&U2IgA80%jDE7jox&4~YF)2FQI zD%VG~|M=7gl2qRa;o{2RFSBf3figA<-^L-?H;+a4Y=v;z4qu(e42T{0ZEs7~y$Y1f zDCUN9-Mm)3(Eew#`>;KHZ$x+UN9-%m;zn&nl&S2WMunH?S0lKJRL8H>w|ob~!?D1w3Qi{JL9XuGTPdb|Vo|EooNzaH&kmi(!w@$v^(Klq}U?dBv(>M3-G z1(av(ZX~bsBUmo`^6k;gnR%`ZUY(hyBy9@W%2nYE!`q6{8A#&lMy?p>)+EmKTy6e* zEL-kkYkZT6={cR%2M_Dz1bNRm?Kj-RCf*~GVwG!UGT>!wBHx&3U#^HXE~x6?V)}Pa zapJun+*Adwp;@H`xn%4`#t^rDHVq%VFaVL%iq7DbgM?SLJ|Ny zcH?MK_M)X%vZAJU1z({#Dy9@>#&H|%{bOS?d#}HSeA%jjNq(+^_6N9|*9=D<|LJ2s z(lXjM{zwPWqEYVL0{jKz?p*2G0f>ZwS#<1RsE$23Y*5lKFB84G=$0n&;bqdRJA%QW zf0xWo6;~OZU*Nv!B_L|_J=1^stIX|T=?U8=nO&RL{_6L9A`$CLQg4g-xVzQ|#^&Sd z@cdQ2=S0x263{Ik;x4&{vpa|9jR-|wh(jmDaK|kxeeCymZ%EVl$X8ww`PFZy{oo=$ zg)_dAtG}+u&m$%~G(}A_x!lT6dzc!n{Zz|%Z7iFe=A73eda=KVnrI)<~zfV z9(aS}$DL$ZCe?A_>1#g8@ZsVu07S|MPC`a4f>wNT-Tljg0PTLfCLs$ixdfh*Bi9`I4&+4nDpn=mw zyAKv)>a+jJcciQKCZjn(KYoOzpgRAnY)SJ_Zte&vF-9+fg?T=xi8GFwk5?&J#@4pl zgRg}K%0lRXjPbpRJKc?0s>eAQ^Qx-K!b!UWh$d}^#5xXN1106Js2F3IBehEru^^i> zub2~mk16HRl`eFkl<@AePW8Przdo^#A{R;+-s{T(uZ70y-@lXlvUDTxja3%W&$xx) ztS$FmR?@=OszqL7pZoKM^41YVLLD1ZGS1TxL_25zSOMA~+9!_aec0k1L-am!SH&t7 z&Z!8Y1#L>t!PE&p;yxdERvJ}PZXzm#l91WKh$&%@6HjVj#^!tje`0^!H-x?36h^Ii zkv(lA+Z>1t7r*{R>S22&I;>?)6LF`ijky&reOEZ#DSespb~fUd5XQb-?B{X#dHtvk zQ?*J}Li{>1<7tVrDE=sv$FaSTXNV~b>D>(euIpRTRZ@TMMK<$^4x47wONr~)8-S_# z(LCO&aWu2uZDyA27vflhKcOb>!k&ysie{V(y}nvqIG;_nzSikwuGD z2dRw8TCX8XU(;EeCo95ptQS9q+{t$tHg?(%zHmP$Msn5PT9PCEVxF_>x1{>Vjt;F) zj~Y5bU)AHXzjWC+H-74Au`3MWOP3nI zSN0RD0Dt6&D*rwCfE%am;^UHmiz(3!MzJd#&m(!>th)zlKW@gqE!kS{M`5y*e?Sva z;WZfem0#zIhF&gB-iKyL&FZr^t64Kp>vAlHbU`0bwutc$OO3Dq#8tlumW&O;j+W2I zubn7m_g^ZLrb9^f7u+#)57juO!U>^}RGX<_1nguzUZ|fdam4%%`!05Bs@iqWIA_2! zXFx#B{xm(fDJAHtvq1Og7YBjHAIqENQu+4-_PDb@X0!3z!u>|{=^a11RHx)C)8QY4 zI4Uh%gnN2b`MK0C)c`gy9I{Nk#$4$2IiY3~SoKCmDk6bfeoLKc9O!9&%52ZH@ax^kW0MlG3;PI{$XpI%x||PaT{MGy>D!HIOO4Ic3r+A2 z3zSaxP_JRE??>M9A(-Q*^hfBX`4==@xsXQwhlLkrn52H_;sw*H1o3a5g*UoE8x|gX z{Pgpj(F8sS*2hElKl~P2lAInA$k%uI$lM<9~!f1|M}`a%7!0#h`x(ES?<3n|mg6Y=W0((9N~6^(;w;wTP8P;Y08`-#7;tuO zO8jt}>h&_^(Hjw*0*E?FFK&?xd3qyDRI#$!xtR$gKKHQFS950u_KGmyHzqsta%m!;_G$7Rf8Uf-+d-uN?6oaLqKSI_vL=hl8V*#C`ry}wh#^7Xla%WZBz zy%8=zTgdB`u(JxA?UBD2CsEtcXX0$~*`1Unpm zKFqygWY*^Rl~!Hnt%S^ZM+JqLO}9T%&hZ7GtUB-TG+Nm*-oLlnzrlG~KNdu6;H+rO< zIS9ercV{jy;Jq`C$X$`{d3o`p8~k1BYUdq{-P}6&<%g1@WA&#!g_Dl7ZTTsiy>TZu zsR;18|M{MC&ELK&W{ek}pJ}r#Oy%|{)Q+`^3Logr;aRZq-_`P&FdIbbgC$0OMJtT3!`=r;x(t6?Q-TJzUe5CvP;Aw`ZAxpfb^JsAl-HKMP-oSErJ zjf|@49Kt9*FqRqqE7(qVYGuS{7|~rSnc}Y5k=#~T$;`Zm4@-{&o4ze_555=bqUrb@ zw!pb|Tw6@IEFa5UntM^O_3IV}F2{QrQ&e!2$n}x8o=Ym`qRmH5<;5w&#pev8-6XA9 z@oiX$Skt}NrwiAiMtU~|EPXJ2kV_#Cbn*i=p8o02TpI~1yPzXW%c#H>PGk~ z3O@+pkM2k_=@&B{J?wDI=AxfDdt*n`V)@KHPR0z`=AwM4)7LQN(%Wh32B$pW!pcbX zy*7AMF8_Z%;(QoFWb@6X^$Pu&zbS@CiA&u7nAMbjpEWS0-rFeXe?MjH8BywybY!{+ zk+5Zdpk=u?me|Xlvj1>(@ge2!x8Y#o^^*p}%?VrscKHYlu zQ|8j}c;tqlRKD0Xj~c5$Np&48qE-f?>wwu5#@=8({fQlcJ>UJ`)lWx>b%DtBc@J>l zRtv7dhHLv4;u{(i)0T$Fwpgv(n!l21lp6WZ1fO@<)oCWl5igyY^j9d;h~p^{LFwZavOxc)Xf2bdpko(v8EjbNaVlx zy_7d5g5$!EPYL5CJ=_z?_*1pTcbkRIcTFy-$Y67pBg|I0U!>I{gk(aE}CD7*GMJ zkZ5lIIP}<|#00KkvtR3i8EbVsrfyZdG@nzG{~hWEfY+t^Wh$A2_{2PIqUNs~v3$3V zx()Og$QYL&rBvRmxinwyoCxxo<-w~+Y`L{UJ`+H5ihjf=Q*ovRx=xCj<3hC_S^Fv0 zS_JlAipK8h7neBXmz7^k7gVNisz2qg!pn~(7ykl1i(+MxHxXEtwMaS!ey}RGeKdy4 zHSYyGj+Ne~c#X+9SDvG_e);Xj(W9H_BdYf9fCS%pL&kjTNy=Sl&r)`;77A6+6|V8v zk`O;Sg8pSmy0J(Z)?vndF9HJ)*KnA*}zQtit+&J39Xg5Re20bO_Gcz8bpq$06WN7%U$ap?B=N*e~X zLmpmF@83-e(m8Hp73m653-RZ0R&I_}Zi)RmiBOjM*n+6_FnAQq!6)1;jCCMb>v_Rv zF3_UW5W9aHLPYMH84@45Jr&MlEDTd0we@r7YN1aSwnc$+!4}oAtRK#rrF{KS)1|jB zBAa!Tl4miJae`jcEWnTjh5sz2^A?sryzTAC?vJ&QN z>zx)jk=COqgGV-smp(olDDkJyYZ*z#A(69XF;L@AN2~zzGs~Im zxUX)9;Aj3O+a4^>KM6~&OgrP{^IlD&lpzX_vYFX-1b5>8-M^1>1pPge!Z=$KzHLBZ z&Z3-+IN(ka@{%mjpI>_zdGv0FK6)d=A}W9pR`jmok=~$JK=wPctO?x literal 0 HcmV?d00001 diff --git a/examples/08-update/update.cpp b/examples/08-update/update.cpp index 72d55315..d03154e0 100644 --- a/examples/08-update/update.cpp +++ b/examples/08-update/update.cpp @@ -123,6 +123,37 @@ static const bgfx::Memory* loadShader(const char* _name) return load(filePath); } +static bgfx::ProgramHandle loadProgram(const char* _vshName, const char* _fshName) +{ + const bgfx::Memory* mem; + + mem = loadShader(_vshName); + bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem); + + mem = loadShader(_fshName); + bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem); + + // Create program from shaders. + bgfx::ProgramHandle program = bgfx::createProgram(vsh, fsh); + + // We can destroy vertex and fragment shader here since + // their reference is kept inside bgfx after calling createProgram. + // Vertex and fragment shader will be destroyed once program is + // destroyed. + bgfx::destroyVertexShader(vsh); + bgfx::destroyFragmentShader(fsh); + + return program; +} + +static const bgfx::Memory* loadTexture(const char* _name) +{ + char filePath[512]; + strcpy(filePath, "textures/"); + strcat(filePath, _name); + return load(filePath); +} + static void updateTextureCubeRectBgra8(bgfx::TextureHandle _handle, uint8_t _side, uint32_t _x, uint32_t _y, uint32_t _width, uint32_t _height, uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 0xff) { bgfx::TextureInfo ti; @@ -194,6 +225,55 @@ int _main_(int /*_argc*/, char** /*_argv*/) const bgfx::Memory* mem; + /// + mem = loadTexture("texture_compression_bc1.dds"); + bgfx::TextureHandle textureBc1 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_bc2.dds"); + bgfx::TextureHandle textureBc2 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_bc3.dds"); + bgfx::TextureHandle textureBc3 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_etc1.ktx"); + bgfx::TextureHandle textureEtc1 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_etc2.ktx"); + bgfx::TextureHandle textureEtc2 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_ptc12.pvr"); + bgfx::TextureHandle texturePtc12 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_ptc14.pvr"); + bgfx::TextureHandle texturePtc14 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_ptc22.pvr"); + bgfx::TextureHandle texturePtc22 = bgfx::createTexture(mem); + + /// + mem = loadTexture("texture_compression_ptc24.pvr"); + bgfx::TextureHandle texturePtc24 = bgfx::createTexture(mem); + + bgfx::TextureHandle textures[] = + { + textureBc1, + textureBc2, + textureBc3, + textureEtc1, + textureEtc2, + texturePtc12, + texturePtc14, + texturePtc22, + texturePtc24, + }; + // Create static vertex buffer. mem = bgfx::makeRef(s_cubeVertices, sizeof(s_cubeVertices) ); bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(mem, s_PosTexcoordDecl); @@ -205,23 +285,10 @@ int _main_(int /*_argc*/, char** /*_argv*/) // Create texture sampler uniforms. bgfx::UniformHandle u_texCube = bgfx::createUniform("u_texCube", bgfx::UniformType::Uniform1iv); - // Load vertex shader. - mem = loadShader("vs_update"); - bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem); + bgfx::UniformHandle u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv); - // Load fragment shader. - mem = loadShader("fs_update"); - bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem); - - // Create program from shaders. - bgfx::ProgramHandle program = bgfx::createProgram(vsh, fsh); - - // We can destroy vertex and fragment shader here since - // their reference is kept inside bgfx after calling createProgram. - // Vertex and fragment shader will be destroyed once program is - // destroyed. - bgfx::destroyVertexShader(vsh); - bgfx::destroyFragmentShader(fsh); + bgfx::ProgramHandle program = loadProgram("vs_update", "fs_update"); + bgfx::ProgramHandle programCmp = loadProgram("vs_update", "fs_update_cmp"); const uint32_t textureSide = 2048; @@ -249,8 +316,8 @@ int _main_(int /*_argc*/, char** /*_argv*/) while (!entry::processEvents(width, height, debug, reset) ) { - // Set view 0 default viewport. - bgfx::setViewRect(0, 0, 0, width, height); + // Set view 0 and 1 viewport. + bgfx::setViewRectMask(0x3, 0, 0, width, height); // This dummy draw call is here to make sure that view 0 is cleared // if no other draw calls are submitted to view 0. @@ -338,16 +405,58 @@ int _main_(int /*_argc*/, char** /*_argv*/) // Submit primitive for rendering to view 0. bgfx::submit(0); + + // Set view and projection matrix for view 1. + const float aspectRatio = float(height)/float(width); + const float size = 10.0f; + mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f); + bgfx::setViewTransform(1, NULL, proj); + + for (uint32_t ii = 0; ii < BX_COUNTOF(textures); ++ii) + { + mtxTranslate(mtx, -8.0f - BX_COUNTOF(textures)*0.1f*0.5f + ii*2.1f, 4.0f, 0.0f); + + // Set model matrix for rendering. + bgfx::setTransform(mtx); + + // Set vertex and fragment shaders. + bgfx::setProgram(programCmp); + + // Set vertex and index buffer. + bgfx::setVertexBuffer(vbh); + bgfx::setIndexBuffer(ibh); + + // Bind texture. + bgfx::setTexture(0, u_texColor, textures[ii]); + + // Set render states. + bgfx::setState(BGFX_STATE_DEFAULT); + + // Submit primitive for rendering to view 0. + bgfx::submit(1); + } + // Advance to next frame. Rendering thread will be kicked to // process submitted rendering primitives. bgfx::frame(); } // Cleanup. + bgfx::destroyTexture(textureBc1); + bgfx::destroyTexture(textureBc2); + bgfx::destroyTexture(textureBc3); + bgfx::destroyTexture(textureEtc1); + bgfx::destroyTexture(textureEtc2); + bgfx::destroyTexture(texturePtc12); + bgfx::destroyTexture(texturePtc14); + bgfx::destroyTexture(texturePtc22); + bgfx::destroyTexture(texturePtc24); bgfx::destroyIndexBuffer(ibh); bgfx::destroyVertexBuffer(vbh); + bgfx::destroyProgram(programCmp); bgfx::destroyProgram(program); bgfx::destroyTexture(textureCube); + bgfx::destroyUniform(u_texColor); bgfx::destroyUniform(u_texCube); // Shutdown bgfx. diff --git a/examples/runtime/shaders/dx11/fs_update_cmp.bin b/examples/runtime/shaders/dx11/fs_update_cmp.bin new file mode 100644 index 0000000000000000000000000000000000000000..754e39c749a50d4fc90b1eef7dbf3ccd2b5f97d0 GIT binary patch literal 710 zcmaJ--AV#s5FLM_x(K~2h}g>t5!?zA!ZdgN0dr-)H6#MF+)&WgHU%#t>Jhr@5dSKWs63)*D>um#W08cfo;-h``Whdt((5It?x*Mk|;@{)o7Zwl(o9OHio2R zTu#Q52XcHbkx0;ZJT8iSxdMNFdj&iM8N8FfZv?r*q6gNwzKlei)hn7P8bz&4hFZ&N zny#>~2H%+1$G#HiW8N3@Mn=!828KjI(MM=XgS+54uW%VfMpRqJS$b|>trA^DDI`au z&K@TErjlE0;a7M!nJ6NYtL41DU>XIYV~@^9Fztk2no6|l`{jI(N7u{WCxsITBV+V2 V?%#u*_>S}7T^8ZL+M<~s{TngkR-*s_ literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/dx9/fs_update_cmp.bin b/examples/runtime/shaders/dx9/fs_update_cmp.bin new file mode 100644 index 0000000000000000000000000000000000000000..21ffdb08f9e26799534ff367ddb30b70d8397bab GIT binary patch literal 245 zcmXYr&kBM-5XL|M1RerkAWAybMbzjZM3F*tutV8hqKpD#MGHFC8~6x&@3lPi6m7HC z?0kGPzhQ@2#7l*BrxV}}XhM8MAK`W$bO6L8$rLi#;|WA$4oM>^P(dG?xFy&09_Wim<}tj_y_mF#%62AiR^jN-_OPrE}}SRuRQ=Zp&9_I%qPd-lk6U95o? tU~<|r`>$%O2dFf7&=r-e305#nt^<@B@wy_$r2=`XVM_LZQF9@PegUqEE&c!i literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/gles/fs_update_cmp.bin b/examples/runtime/shaders/gles/fs_update_cmp.bin new file mode 100644 index 0000000000000000000000000000000000000000..0fc11bdd1eec9135961dd1c4361857bdac2fdcf3 GIT binary patch literal 209 zcmYj}y9&ZU5Jk0}kB|#CiHeG16}9nM*!clr$?hft$xc|4U=aV^D1uhEIOm?@_1u@i zc0FXPjm7B_AFfn-lkknjA>%YFVRKPcL_^~=Tg+x(jcUhMe1V%P%G~(H9(7!q`%ZH4 z5jD!U>{2u)S)zG^M8xZPM}##B#STG84+7FWK6;gYj@Y16tJ<5c7yN<~1i@crdT%kp Pe7XuT{!AFrlc@IsCd5Kr literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_update_cmp.bin b/examples/runtime/shaders/glsl/fs_update_cmp.bin new file mode 100644 index 0000000000000000000000000000000000000000..f2bc53f9a3f8124a117cf7de2398f6718b484147 GIT binary patch literal 170 zcmYj}!3u&v6h&+MJ|Zr(87st$R#uxr+V=r6=qLj^FP=Im(Z6SIYIPUqo|8WAOI}@0 zYj32r?68j`qTbn(r9rEkXKf_Dq0c%qT)AdR$ZHv`tKdz3fd7J=S&C>PYzs8nI;enN o1XOjFimql6XH3_w7c=$LFSvtJf0b|;u|X6b18nCB5_%IYKETH{oB#j- literal 0 HcmV?d00001 diff --git a/examples/runtime/textures/texture_compression_bc1.dds b/examples/runtime/textures/texture_compression_bc1.dds new file mode 100644 index 0000000000000000000000000000000000000000..68fa18230d4343bb713765cc723777dcc474a1a7 GIT binary patch literal 11064 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 L@^Eg~u3i5Jxb~8> literal 0 HcmV?d00001 diff --git a/examples/runtime/textures/texture_compression_bc2.dds b/examples/runtime/textures/texture_compression_bc2.dds new file mode 100644 index 0000000000000000000000000000000000000000..4a92b37c282a8d5224f2ecb065313ead705a2907 GIT binary patch literal 22000 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 literal 0 HcmV?d00001 diff --git a/examples/runtime/textures/texture_compression_bc3.dds b/examples/runtime/textures/texture_compression_bc3.dds new file mode 100644 index 0000000000000000000000000000000000000000..9a3919889ce4da8d3a52242327ce2921a5d519f1 GIT binary patch literal 22000 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 literal 0 HcmV?d00001 diff --git a/examples/runtime/textures/texture_compression_etc1.ktx b/examples/runtime/textures/texture_compression_etc1.ktx new file mode 100644 index 0000000000000000000000000000000000000000..a818345a20200d8a35856a55bb10c76ae9490264 GIT binary patch literal 8260 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 vaAkbhuLGQb7vp197x_-9%Yb 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 literal 0 HcmV?d00001 diff --git a/examples/runtime/textures/texture_compression_ptc14.pvr b/examples/runtime/textures/texture_compression_ptc14.pvr new file mode 100644 index 0000000000000000000000000000000000000000..a79a820b40dcf868bfca8331b4cdcf8f763cf632 GIT binary patch literal 8244 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 literal 0 HcmV?d00001 diff --git a/examples/runtime/textures/texture_compression_ptc24.pvr b/examples/runtime/textures/texture_compression_ptc24.pvr new file mode 100644 index 0000000000000000000000000000000000000000..3e2c54ecc3105eb8522834487939359829421c7c GIT binary patch literal 8244 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 literal 0 HcmV?d00001