You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raylib程序全屏拉伸显示方案咨询

如何让Raylib程序全屏时拉伸原窗口画面显示

要实现全屏时拉伸原窗口内容填充整个屏幕,你可以借助Raylib的**RenderTexture(渲染纹理)**功能,先把原窗口尺寸的内容渲染到纹理中,再将这个纹理拉伸绘制到当前全屏窗口的整个区域。以下是修改后的完整代码及关键说明:

修改后的代码

#include "raylib.h"                                                              
                                                                                 
int main(void)                                                                   
{
    // 初始窗口尺寸
    int baseWidth = 800, baseHeight = 450;
    // 启用窗口可调整大小标志(可选,方便测试窗口缩放)
    SetConfigFlags(FLAG_WINDOW_RESIZABLE);
    InitWindow(baseWidth, baseHeight, "raylib [shapes] example - raylib logo using shapes");

    // 创建和初始窗口尺寸匹配的渲染纹理
    RenderTexture2D target = LoadRenderTexture(baseWidth, baseHeight);
    // 注意:RenderTexture的y轴是翻转的,绘制时需要调整

    while (!WindowShouldClose())
    {
        // --- 第一步:将内容渲染到纹理 ---
        BeginTextureMode(target);
            ClearBackground(RAYWHITE);
            // 原绘制逻辑不变,基于初始窗口尺寸计算位置
            DrawRectangle(baseWidth/2 - 128, baseHeight/2 - 128, 256, 256, BLACK);
            DrawRectangle(baseWidth/2 - 112, baseHeight/2 - 112, 224, 224, RAYWHITE);
            DrawText("raylib", baseWidth/2 - 44, baseHeight/2 + 48, 50, BLACK);
        EndTextureMode();

        // --- 第二步:将纹理拉伸绘制到当前窗口 ---
        BeginDrawing();
            ClearBackground(RAYWHITE);
            // 获取当前窗口的实际尺寸(全屏时就是屏幕尺寸)
            int currentWidth = GetScreenWidth();
            int currentHeight = GetScreenHeight();
            
            // 定义源矩形(整个渲染纹理,注意y轴翻转)
            Rectangle sourceRec = { 0.0f, 0.0f, (float)target.texture.width, -(float)target.texture.height };
            // 定义目标矩形(整个当前窗口)
            Rectangle destRec = { 0.0f, 0.0f, (float)currentWidth, (float)currentHeight };
            // 拉伸绘制纹理
            DrawTexturePro(target.texture, sourceRec, destRec, (Vector2){0, 0}, 0.0f, WHITE);
        EndDrawing();

        // 按F键切换全屏
        if (IsKeyPressed(KEY_F))
        {
            ToggleFullscreen();
        }
    }

    UnloadRenderTexture(target); // 释放纹理资源
    CloseWindow();
    return 0;                                                                     
}                  

关键逻辑说明

  • 渲染纹理的作用:把原800×450的内容固定渲染到纹理中,相当于保存了原窗口的画面。
  • 拉伸绘制:通过DrawTexturePro()将纹理的整个区域拉伸填充到当前窗口的所有空间,不管窗口是800×450还是全屏的屏幕尺寸,内容都会自动适配。
  • 窗口可调整:启用FLAG_WINDOW_RESIZABLE后,拖动窗口边缘或按F键切换全屏,内容都会实时拉伸适配新的窗口尺寸。
  • y轴翻转处理:Raylib的RenderTexture默认y轴是翻转的,所以源矩形的高度设为负值,确保绘制时方向正确。

内容的提问来源于stack exchange,提问作者user2023370

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:09:26