From ba72d258675a0069c13a305fc860777ffefc871f Mon Sep 17 00:00:00 2001 From: RaZe <97209503+rose-mtz@users.noreply.github.com> Date: Mon, 27 Apr 2026 03:08:12 -0500 Subject: [PATCH] [examples] Improve `core_smooth_pixelperfect` (#5803) * Improve smooth pixel-perfect example: add overscan and smoothing toggles * Add render size --- examples/core/core_smooth_pixelperfect.c | 34 ++++++++++++++++++--- examples/core/core_smooth_pixelperfect.png | Bin 15791 -> 3442 bytes 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/examples/core/core_smooth_pixelperfect.c b/examples/core/core_smooth_pixelperfect.c index 2b01f3fef..24f77e4ad 100644 --- a/examples/core/core_smooth_pixelperfect.c +++ b/examples/core/core_smooth_pixelperfect.c @@ -52,7 +52,7 @@ int main(void) // The target's height is flipped (in the source Rectangle), due to OpenGL reasons Rectangle sourceRec = { 0.0f, 0.0f, (float)target.texture.width, -(float)target.texture.height }; - Rectangle destRec = { -virtualRatio, -virtualRatio, screenWidth + (virtualRatio*2), screenHeight + (virtualRatio*2) }; + Rectangle destRec = { (screenWidth - screenWidth/1.25f)/2.0f, (screenHeight - screenHeight/1.25f)/2.0f, screenWidth/1.25f, screenHeight/1.25f }; Vector2 origin = { 0.0f, 0.0f }; @@ -61,6 +61,9 @@ int main(void) float cameraX = 0.0f; float cameraY = 0.0f; + bool smoothOn = true; + bool overscan = false; + SetTargetFPS(60); //-------------------------------------------------------------------------------------- @@ -86,6 +89,18 @@ int main(void) worldSpaceCamera.target.y = truncf(screenSpaceCamera.target.y); screenSpaceCamera.target.y -= worldSpaceCamera.target.y; screenSpaceCamera.target.y *= virtualRatio; + + if (IsKeyPressed(KEY_S)) smoothOn = !smoothOn; + if (IsKeyPressed(KEY_O)) overscan = !overscan; + + if (overscan) + { + destRec = (Rectangle) { -virtualRatio, -virtualRatio, screenWidth + (virtualRatio*2), screenHeight + (virtualRatio*2) }; + } + else + { + destRec = (Rectangle) { (screenWidth - screenWidth/1.25f)/2.0f, (screenHeight - screenHeight/1.25f)/2.0f, screenWidth/1.25f, screenHeight/1.25f }; + } //---------------------------------------------------------------------------------- // Draw @@ -101,14 +116,23 @@ int main(void) EndTextureMode(); BeginDrawing(); - ClearBackground(RED); + ClearBackground(LIGHTGRAY); - BeginMode2D(screenSpaceCamera); + if (smoothOn) + { + BeginMode2D(screenSpaceCamera); + DrawTexturePro(target.texture, sourceRec, destRec, origin, 0.0f, WHITE); + EndMode2D(); + } + else + { DrawTexturePro(target.texture, sourceRec, destRec, origin, 0.0f, WHITE); - EndMode2D(); + } DrawText(TextFormat("Screen resolution: %ix%i", screenWidth, screenHeight), 10, 10, 20, DARKBLUE); DrawText(TextFormat("World resolution: %ix%i", virtualScreenWidth, virtualScreenHeight), 10, 40, 20, DARKGREEN); + DrawText(TextFormat("Smooth: %s", (smoothOn ? "ON" : "OFF")), 10, screenHeight - 60, 20, RED); + DrawText(TextFormat("Overscan: %s", (overscan ? "ON" : "OFF")), 10, screenHeight - 30, 20, RED); DrawFPS(GetScreenWidth() - 95, 10); EndDrawing(); //---------------------------------------------------------------------------------- @@ -122,4 +146,4 @@ int main(void) //-------------------------------------------------------------------------------------- return 0; -} \ No newline at end of file +} diff --git a/examples/core/core_smooth_pixelperfect.png b/examples/core/core_smooth_pixelperfect.png index d3b6ce012612eced58a845efc19c9bc957df9fae..30c8ec52312bcda4dde0f1453bbf20334440337a 100644 GIT binary patch literal 3442 zcmeHKYfzI{8a~{FNI}F=B$P`R6jv#Ca3M%sMbIL!Z56g4B&c{<jT`{SGMOwRev zd*0`Lp69%|{HO2`v$g28006TC`-8p!z`y|jy+~tXLkB5lmQlUqojl?=P-XpbV&$aay4maA%9S$eIesnSAyY0^VC7!!MZ19r| z*Du^Hc)h6#XNfK6Z|5qXiz;jjx9O49Z?FFxUsfFfK*q{Fxe)*XHs_6i#fCov;PC;2 z2AY^fQYl%10Z-Ma4MZCFLSIUqmOlaJ#r&8D!(+(|v6Ll0#o zLChQ&S=mKoCrRunR|SPfo*J402SumhWY;PMOG~0exP|5O{!r~XS16QagUqAHMd@Vr zQ>W7^l`N!^73ujy*~tsgDQ(K|1+9|gz9EcDOod`sNm7Lpck)%)qGYw9|dejQj(e-@SHC`top2 z_?X0gWHLG}Wz1oN3&`agZ@9CC`B|t->9*nGXFW;Nl!cKSuLe~mf<+JDmiWx+ZL`eH zFKwx~Wlbqw4|LsSn#2scz8n(Me;(Xwue^^*Ic{tUqPIe*HjFl!gcP!*>GNW4W1g^j zDRDDpp_|YaEIPmBMc)~fIP<$BWcCs!Q}A)Enq)}ybj%5rM)E8POiRs4pkme0^}y&Y zDjdjg6WD$5zaNmxRu!|?u$1Nb)5~wLrbTVMMZcFsd6O`+Pljz8RHkMNiwA01>gR2< z$LdM)CY&kg)+886#aHBXUH)kY|DS~M{=c6Z&*l`B(tJPli;zbH_eU`5nR3HKQ8vaS zRBSeQxK3Tm^iIf9%4HQbGDiWfH?px|cEJ!Ry5XgpA{gPxg3Gr!0V|Cy6|0qkeU2yN z(#&K%E~S>S%ksD!wWQcja0pD%P*A>SuA+Ej=+cWWw7&Zn6y}|wjkP|$3V`>6@u8x4 z_UwqNxTLtdc}jV3CIjG84l)2Zx_84J8LCgkt}dHkV~ze|CQ}|BqX$0hJu9UrtLnSo z%nYIl>kIAES5}U+(;4k{;HCy(^8xQ9k{JLIPvC=Yg?G~b|KNWU1jPW)3V{2B0K1Wu zN$;?jSX7Hgr#`rZf_c&Le!%Y(eGJY_3nP`5E4>emVM%Hmoy>^a9WsH(%G{vj!AR+^$F#OIdLmVr$V+d|(=Mh@_NSwXH@Czh?dK^mPoNBXw*q z>>1--d)Hw%{gZU&gPkSdnJqxu2|4SKC^n9pgEJ|RSGiRkhpqZUFBA{^s|H}FzgXM2WEv4^#<>r! zk8Gm+xN%W(0yz&Q@{V7hjc+elRO(<6Tvprqb~ymV-$x10wsLPSuDqF4<6a;s6}a6P zw4NfT2#sfs9Mu`9qd>7Vq1c5C!|%*SgLnQAp6#M%Sc+0QucOd#uDMspQ*}5U4p|AY zz`{$n3ao4?YPFOVj@^;>iEapqu``)`dV)l)x%sr2`zp*J_hfTwL51Kq*m~}eIS8N% zMVlvz({%|k!5i=^g!K(xn%+a(*x_T_5HI>DqR0#;k|uEk7N>nF^ydU5u7A8myvs8i1V1;XGtqNN%|`M+?-S2P}Lo3`1N+3brx< z-2a|XJCG@Q^$qfK*r?dC-$42i2}hTX)5?z_=+ICTz0Dw(a4yaKI+705Ed(%XS2^{S zRE9L3OltM%$wZKwL}cVl-r(^iNN;3&qJjH!v{KViX;%}Ll&Z*>DTt?Q${A=fID>mg zCjON>LcZd9;>FwBt`DYF1Ul(zR!vkJ7vg=9rpNG|kE){wkVT48F<X}bv!sVUcW0I-R5Wsh>+k8iCpSHbsP zZeeZWB5OZxQ%`v9XaDf0F4y<*dYcok}icitAnz)#eD;zru{fPnx_Js%4@4;XA7g+AqzW@LL literal 15791 zcmeHOdt8!d8wPdC3YD@Hv{dHi)|%y#W$I8w16x_HY?-wrDi?|I)BFE&dGDo`l$+G+m2!SRchJn!jzxSsc= ztF4iU*v|_KgU*u%*_(5vIQ%PL(CkzR(`+fJK){nQG5lA&xboLhXjY}KeiM8_Je(^f zWJ>+X{h2{IiNm*X_|7N#wV@cX;aI;mKql1mV;?Y~9WfzzP)$HvhnJL(J(Kz(knvi*B&3FbSKavNsldoO%UtoM$* zaIpnj!F<_o-t1d|5mz_lm7bs_@2eMEcD74?SQOAW9pz?5{=Axg`HvE_#o{L(#BE`h z1e>Ij;#7YX{(bP%A~#3Tif^>uk(mF6~hh0yZT1uG)|ie;r_6|ajH zXLqDTIh!=rr(8#~i=F1aV9xhejmt)|$-$(>?YQ69p zhrfMz|MfZ?y}fDVjogeD%OV0QywS^(8aRKmed_^6Y2vI_`^?vNrVNYOpWw_)inKV? zY*{oXF>TGn(@*^$+gr&9Hj!;}2?uwLVP|ic+D0aeM;g~-Ev|-byVhPkK1px`t!gag zD9&+Bl`;9xfa>#4HePCkqS&3FBZ`u)&WH8AqNaXJ69AVC10x7)vZ@c&epMfWaHSR% zOxsr@90YyIL|0GaNm+;KeaWvKaM9RIX?edUxHg~(fySyvsUdFJM3WGj(;B%Wc%hh; zt5+|XLWs}pV)|#OgDRGb!+*Wuv#c3!(-_)v3T;kjf0&JGq%v4mJS;^siDH>xLdN(z6?11rdg7xW6I?`Ee&pQ7;Tu!Dv(_R( z4#x0fzH$g`R|}q)NLgjJG`G@`?;LWS%DG86&K)+7>W0rPcG$rVU+#)YH9pi_(?Aw= zFV@QL0N@fbK(7d`cjQ?Gq1VX|LX3-e*`ZEVVth`KkE!P#j9{ne%KZjEuKgle!-7wP zBOYK*uVzK8Dzw&2+#^W3p3quZA9PzAv3^gPS@7ATTpq5d{(KEPR>HWIz!`t`QsaH! z0v3g7%DcYDpGn(1yH`}j!g;w(T6iTO+&!(PtT*@6GTGWrX{cJ&rdh&KuAQVS%4FV- znZALoi$;YC&I+4dfZJ{y2*`ONC|%}|v&(vRO+C|7b0y|n?lAbth3>kZoQ=+z6J&K} z9)p#;`xgu$@&J8HvDwnX=rO992+M~Ydn2e&NuSFfH;N}|X=@ctW2(j?%@X~+m*c4$ zSypFEvu{MztrBo7Wwz_WpRqC@&iwY-&V5y8kx%^EO1xYXR_>p( zFoD|g!vxy!DlMt9Zw-e37(l=hwJcIy6Kgn{cDK8;mtLmutf?Oco0mXgj<6R!OXW8o zSA8ghfd>>6_>PXpaixJRqI85JDOAR(sPrzyq3>qhjr|bReEP|~bG(A+ z?mr77YD;lOHz)59UbrgvXeJ0Vq*ip*JIoK!%BW~uv4BDa6eR~-O>-cM0tz{=UzN^n zvN7U^olAbF|isYJMUxTV7c&N5QI9OgJ#L|68`y6S*gMh4IGC*mS_cBZXCc}J#m1sLyfuB0`(m5qUlo7T%kH;D-#uDCZ21D?G^H# zDU!p=NMv_y)4XCr<4SMRz162;KlzW(@z_EN;+AFv%FA^@x$fH2+dlmb@xumWuO25~ zoRR3{cA;|_?At9P;bf`l(Ge+zZVWL*vfKfrji6K-V2uS;o90moC7pYcpL!IZ-qRtr zFBzLu_>-+Uw+U$<#<2%A5oobghrqs)zv{lvhrL3`8AQ5+bg{#rH?-fGNBkj=1vXCs+Rw{ zk=YO>CNhJOH*bw6nND%iafHa;Y;B03iNY(0qe9`VJ z^zUGdMJFO?<*g0&@=7y=QqbF)=mr|dgaZtL-0PgS_dkenHrSCH zBMTX@qxaDe?~DE^-gl*zD0U!PW(fU6Ee5rPqTkL9my)|W_lpAnqY+M3;r=!$D}f3 z5uMU<&}kn8UOtvcnhFCi_98McIP&@$LjUwa|G)r3W%+z0+K=(kZ7?g0A%8e|gy2qw z#k+@~ba>|pEFS_aklghd)N~LjklCEO*v?1>yrnCg$t^tO$*uhf+vF<`&+qOmjz8Uq3vJ@^6~~3%}U-)A}NOTsO>n% zWo1)bCg%%j!;(Nv0r~Rr0; z=~n-mX$#1NL{@YJcLB$Maair^W1Rtj8NFQ^FjiGj<^cT;SiGiHo+sEB2xM&j$3Vs_ zumEBOXa>?Jp|w8)O?uv}Thp&rq25T*m!oY{P;plrewy(j)GZV%be1UVY>T|-NFLmt zBhDwIZzD}I(x^P|9+o~m|x8oR)6^Sk$MmDf{pwHV}$NWVz5%Q6BOn&`!7($~dHg$YKsO>J%w>E3c zb5tloHJk5_iQLSHV)p(HtFZ$EU~A9RiPNSmZ}W2Jr0~&hER_4`F(f+z`p3 z8$}1i1eG4b*2s@!B5vdh+e}|bF>2*hItrQdu2RJT)#&I~-G<1G-PLqx3l*D#lbk5U z-=aOx5M3~dm4ZqGWA+-&O8Y;8ZwUT^j_Bwbv%fj@=+n>xFvT2n6Hxc-kB0RMX^-IO zwhu!;-tHs%(lf>HZj|{I=5ytt6QEthK%ay8WV&M0OErJtJr(^)Y=F%QTAZg+FYa>% zqf~*=IY%kKq&P=!7`^6P>C0HPtvEh!V9-mseK^7a^fDE6H?RF~*h_f?~e?M1r8 z%SzVOFmymjK_OZ|E_xvex>q$pK|?benbTBiH3y1R)!Wd(_-CLEW2eu7mEQ{^G^QD7 zHW-5fh++@wutOc9RHLnQUNzVRf~H7n2NG1bB@80+z?7tK6GuZa4Nx1RdtdeKORBd{ z?C{B5b7f#PuCV8j0ZW~h`v+7)Lnr43amHha(uYn+D+Znl%u#Xn+diFai0zS~Vi+n0 z!0u2J_=Y?)_J^Ece6dj4DfJeh#BC`q#>E~c8?hj$s{IbKsux$W*A}y(7NkA z%B+9vKEw<|%mAkUZ~FlH5Hk!h12o3_JO3YuBIEA5%)3n@fq%qCO`AH?{|J?_;eWdb B0Ji`D