From 24f07aaf5a58aa1fc1d18a9eae4327f5a3f58014 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 11 Apr 2019 17:40:13 +0200 Subject: [PATCH] new example: core_window_scale_letterbox --- examples/core/core_window_scale_letterbox.c | 88 ++++++++++++++++++ examples/core/core_window_scale_letterbox.png | Bin 0 -> 17967 bytes 2 files changed, 88 insertions(+) create mode 100644 examples/core/core_window_scale_letterbox.c create mode 100644 examples/core/core_window_scale_letterbox.png diff --git a/examples/core/core_window_scale_letterbox.c b/examples/core/core_window_scale_letterbox.c new file mode 100644 index 000000000..ea4a375a2 --- /dev/null +++ b/examples/core/core_window_scale_letterbox.c @@ -0,0 +1,88 @@ +/******************************************************************************************* +* +* raylib [core] example - window scale letterbox +* +* This example has been created using raylib 2.5 (www.raylib.com) +* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) +* +* Copyright (c) 2019 Anata and Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#define max(a, b) ((a)>(b)? (a) : (b)) +#define min(a, b) ((a)<(b)? (a) : (b)) + +int main() +{ + const int windowWidth = 800; + const int windowHeight = 450; + + // Enable config flags for resizable window and vertical synchro + SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_VSYNC_HINT); + InitWindow(windowWidth, windowHeight, "raylib [core] example - window scale letterbox"); + SetWindowMinSize(320, 240); + + int gameScreenWidth = 640; + int gameScreenHeight = 480; + + // Render texture initialization + RenderTexture2D target = LoadRenderTexture(gameScreenWidth, gameScreenHeight); + SetTextureFilter(target.texture, FILTER_BILINEAR); // Texture scale filter to use + + Color colors[10] = { 0 }; + for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while( !WindowShouldClose() ) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + // Compute required framebuffer scaling + float scale = min((float)GetScreenWidth()/gameScreenWidth, (float)GetScreenHeight()/gameScreenHeight); + + if (IsKeyPressed(KEY_SPACE)) + { + // Recalculate random colors for the bars + for (int i = 0; i < 10; i++) colors[i] = (Color){ GetRandomValue(100, 250), GetRandomValue(50, 150), GetRandomValue(10, 100), 255 }; + } + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + ClearBackground(BLACK); + + // Draw everything in the render texture + BeginTextureMode(target); + + ClearBackground(RAYWHITE); // Clear render texture background color + + for (int i = 0; i < 10; i++) DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i]); + + DrawText("You can resize the window,\nand see the screen scaling!", 10, 25, 20, WHITE); + + EndTextureMode(); + + // Draw RenderTexture2D to window, properly scaled + DrawTexturePro(target.texture, (Rectangle){ 0.0f, 0.0f, (float)target.texture.width, (float)-target.texture.height }, + (Rectangle){ (GetScreenWidth() - ((float)gameScreenWidth*scale))*0.5, (GetScreenHeight() - ((float)gameScreenHeight*scale))*0.5, + (float)gameScreenWidth*scale, (float)gameScreenHeight*scale }, (Vector2){ 0, 0 }, 0.0f, WHITE); + + EndDrawing(); + //-------------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadRenderTexture(target); // Unload render texture + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/core/core_window_scale_letterbox.png b/examples/core/core_window_scale_letterbox.png new file mode 100644 index 0000000000000000000000000000000000000000..5acf2d7cc28aa8c2c465f71cf748b755fd8b042e GIT binary patch literal 17967 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 sXg}L%D2#>zY