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 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU_8XZ#K6EXgVAa}0|NtRfk$L90|Va?5N4dJ z%_q&kz}@cY;uumf=j~m^Jnh$#4G-tM+Q7W2S#QCmM8=~xJp&U9mmboNjfuE2mqoh8 z^%c{u=7tST+>5*x|LFT{UH4Y9dLDb|$t!ZMyWH2?)&F~bJ8%1LW`+fy+n44uFg&=% zp~KKH;{X#w2PYAXTKhk*?f*T^pTF-&{r|t`U!=M1y?^!2Z@GVOH@+{r@q2g7vpR-^ z(0_mC@0a`W_MQKKsXfoK*W3Toi{JgpMJ$KoH#6fgUH_83FL)@R#RuCiVJ@w)u|*H%w=_cr@% zU|>j^@3Vo=KdEMN-h4|jhS^1@R9-CuV0hfCI@JjZfw7sxBZJP1H&B= z5EnBnBMSJYslV%$`0qXMu@}RGNnqzVpI4eQyUAklpNPlxCyVEJ@iWA=@`1$$y>;M0cx5xX|*PSvgzApdo?TOXBd(;jz#mUQwSKj~qe7Wnr>4p0G z`rh{ssq(O1`{9!QBxZ&8JHOsN*I)kU>iPeD&z1ca3opf?GO+cWd} zxgIc~8`bBg~FLiS|S!EK?4V`oS*0&WId+luWYPmPKfr1-s9oSy$2#3S#M5mYh z|Fh+b?g2$qNsyz!s_-z*E3y3OdbwHr{=Iu*dxR4(J!^69_2I{twlid>qr1ywS-PX| z`HrSje?MQow4Grws;A%qhKDiFm7`$Q%gy4;&!@1MffEckh(S8i*tr|dL;PIei)wP& zhK74zbXL5S3@ljl`}y*v`HcGxff5^BFENZ~ku3+h{{H>?IlFGJ{r_5-#9wcYzBHC> z^fg3DFgFh}t-Et)-nCO@o7Y{01jO}ID3+zMb6c!`85wZdcu`vKoLbYQUsm5Xu7ifj zawBxp!WP`xZT0PI|DCh9Zf$0LUbb*fKkIx9Rc1MxW`F(0|6i`p>ggP<-_bcOpnM8W zM4;4k<{aaO3B~hkOP9#+|MR}QKF@shQ_E&_MR|+`j@q|(OBvohyQ!a*2h9?728pL@ zbP^_@8hnqTAg;LDd;5{d$OG)CscAQpLq2zPc=4R6tam`^`U%J-U?;s{VTftkyeT0V zHJ-jPG#s0DexKE}&6^%P1L-&d*HLqi-(=Zu=WiSL9gB=CFhWp=#RzIH1{tFw zkXa9yQO(-R*brE@w!slK((vT`Q7LG-O{j<*4X8mJP#fQS-#?HP7Z*2eA1lKHGt^=R il>6buz))noG2dEowD)W5;c^BB1_n=8KbLh*2~7Y6w8Z%U literal 15791 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 HN@xNAy9fZc