From d72238cc81ec9d80367c1354b7a9326b2d223414 Mon Sep 17 00:00:00 2001 From: Rosendo Martinez Date: Sat, 25 Apr 2026 12:52:42 -0500 Subject: [PATCH] Improve smooth pixel-perfect example: add overscan and smoothing toggles --- examples/core/core_smooth_pixelperfect.c | 36 +++++++++++++++++---- examples/core/core_smooth_pixelperfect.png | Bin 15791 -> 3029 bytes 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/examples/core/core_smooth_pixelperfect.c b/examples/core/core_smooth_pixelperfect.c index 2b01f3fef..01a25698b 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,21 @@ 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, 10, 20, RED); + DrawText(TextFormat("Overscan: %s", (overscan ? "ON" : "OFF")), 10, 30, 20, RED); DrawFPS(GetScreenWidth() - 95, 10); EndDrawing(); //---------------------------------------------------------------------------------- @@ -122,4 +144,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..5f6391b1a98490810d810aa96776bbc2f4ce69fd 100644 GIT binary patch literal 3029 zcmeHJdsI?)9RGnbU#0C>nvbL9mYq$rH~TtJ{1(9MLn4NC&RyhVE<@?FgB05Cfl61e%3 zG`ga1CBa2*Lw!Pj$~0hQyIpw{kGR_tvNQf*Nt4UI7)rYH0Cv z?)dslg-v>q(eC@54nehBEB&+7vR*Hfc0t`yPtUN$H zn8Iji$69J`BCBXOP{A+}kn=IGJJXpds_14A>g!pG~5?ZLFGo_)K~ zs!OU=5yP{+zT;kZCtpyF1mcT01ZX+ojOpK1qI&V0T9cY6oT$dP#yznom5#T!0$lab z%^$CCEc=u1D3PNFIXT(enE)g(wlmEm6EeOdFxFXt!b5HE592Gd+Vaa7b>8>1MGGir zpViXSo4lUqYy;9LT@_l=yAJpP??!U_bl?}WZM)RSAq)`JeN$gTc9Ac&=2%)nm1IXDS;beW&_rAFp;(+>Ytr8&1kNy98X= zBYm$afBMC^Os>)VaxyMFE3?g;#CKFH?%l|#bLP@w9UZKXNM>YZLE`fV*REX~CTUu= z2-Q6um^2V`Eo?L*r;b0YG5uOIRoB_*2e_+x?m%p!^eV_{V-y7$6R$(X%Xo=~ zK03naAl63gH!`F0Ud>Dlhi4`;sp1LOYr{4>iRBPON>UIFOX`yk*MGw+HoY|Xv zOnXjsB+|0!K?j0)j>MoG{=uCSq+vC zmb>E4!4r!CF_x4bR?~vTa*g0@;vhGrn59RP==ms-me&KXd2I+{Xlxd47kp1jKy5AH zHJ}UFEa?#ZBxHy!yh>-bD61M;u~?!fJkG!0=qqJaM3SRf#U*%mvX|T=?Fx&YcJu@B zvKVi;^zo*TekN!aCXJaAbgK3mEt!g2o0hwhXaKJR@n}-mgvE9=&ZW{@{pKZ literal 15791 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 B0Ji`D