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 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU_8XZ#K6EXgVAa}0|NtRfk$L90|Va?5N4dJ z%_q&kz^mfv;uumf=j~m?KI!L@4T**Y$DO7N3MeeyHAf*d@6n;w{7G8s9?y*&7-HRy zmgof;2wXc|@J;=>?70aw^G@BHE8C~RSoink?1zc7miaRFQBm6d_PM!J!eK|nZy zfx(an#>V;2_SgRTz2DB}=$HQeZsLdkm;Z|0@vU~=|CP7T?Y#46{))?ALyq^vpa1zW ze}CQi*Nhbk$Ls&4KHGiy{y*D_Gr7;@>!;rCi#fr<&7kn@Aj|6`|Lg7N=hpk{`}SP3 zSZ4I8@9yU+hO(rTd&PBUPN-!5`SaO*-u^J7#k10zSQ!MQXC?IRc%FCmmbKyU{pTj0 zUAR5o(*CxTwOjPt(paN^dW;UIK?a+d9F&^B>CU$0Mnz}-mX}=HeeU+T;@KZ9&wl#; z`BwG!Yh`xfv*%}?-Cfe-De>WvUT$z`wcq3C^7mgy73Dux5Y}O6xWO*GMs>HBx6VwB zJCjcy&wW?_{r=LMSN}}A{lkz!Kl`N0%Wa?aEsK6m-p)2Nfsx_JrrjLTSM{#ndba-I zRW^)FK!dHa^(Q;oi6ZZSj|9=Qp?CUG_6uqW=4_@||w?8h;wEHxJK# zuM|^v=BIVpZJE`7YgsCcl&ihphFudX-z@}oN#d+!Yu7U}JXkpcWD$!PgM$zGjJjF> zzkQr;U;pb%=C7yr-2FSR{jj`V@pbFnva_GzY`{&HESuf7mvu5#r{vG;w zz1_akrEk~g{aJVH>HDiv<$`_k#sB`r>{`EJmmI?iZ~*gNHp#8!Wnl0>3Ua6#$Rs9i z28B_^APj_Wm#>L4FzhL}k-PuzwTW+ZEa!H^gG>w^oH`5*GY&u*HxAyDVaR!RH|)32 zztj8JL0J;Dp!=*+&QPHh{`U0kj`&VcdPB`$Iy;#Uyx#SV^V76P?BJ|`k_F!+MDsGd zdw=Wgr*;LcIs**bXQ=OFX6RjQ_I-Y}@;&S+>Y1JsLjv>p+S3a$E$8FkZpy~c|6R8$jNp%}_fWo9t9lIxF-XR=Pk z)am_>;Q-sR%v-;N!mya@{f>cQ@xJ<>Rz))~0}m8)D;|H`@l{noIworWG)xuH%>IFA z&4Kf~ql?yT*vH)0z2APm_-2b~&5eUqQVbug_SOH~b?>Bo{qMJ5 zutYS-uMORGZ`Q_RDIw=Q;bRam#-0nrW$XX`eY@Y!Ub|fpdk|K{zAwA6KK1!uaLtFB za&P)FH>7VX=$(5TM{2DJ;bX9ward6Yi^;{?nHbC9#8D_Tvz zh1YG^jhRg1%761Pgni}8euE=K3zV@+Z9Ht^8y(Ng@Mfayw`*TMbKi{uw_;GT#zyfd zb7qF>*LT`6?X@{6+ps*T_iv!h_vX947*)}?Grv%q}!$8q(2{Jy%1uJiZny7kho zyj-QX_uZfJ^|ezgmxu2>|CNEEAKb<;`x3r(y-n@R`QD5Sb2gu5W6(b$^}9CZ{ii=J z&)=@Q^eOpV{KuMeB`I8(#*FN^A3IT)VbTiY&Q|F?FvcIEMVzYbgaT;B54l;MCJr%qlP zJ4W?6?HNNt^|c%GdqDQ1mbai{)=jr^+iufu)3Ib>?sA3;8;+ghm;Vz8Dh1k?|M>HE z`-`M`H-A`HT79~-+v8bKE6L?7S1Mf%IP*Pn}L zx!W(h+r259b%XP@8mdKI;Vst09fwTzW@LL literal 15791 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 HN@xNAy9fZc