【问题标题】:How to get screen size in SDL如何在 SDL 中获取屏幕尺寸
【发布时间】:2015-10-28 14:18:34
【问题描述】:

我正在尝试使用 SDL 和 C++ 制作程序。如何在 SDL 中获取屏幕的宽度和高度(以像素为单位)?我正在尝试获取屏幕的宽度而不是窗口的宽度。 . . .

【问题讨论】:

  • SDL 1 还是 SDL 2?你都尝试了些什么?那是如何(或没有)起作用的?你的代码有什么问题?
  • 我正在使用 sdl2。我用谷歌搜索,找不到获取屏幕宽度和高度的函数或方法
  • 我想要屏幕的高度和分辨率而不是窗口的

标签: c++ sdl-2


【解决方案1】:

在 SDL2 中,根据需要使用 SDL_GetCurrentDisplayModeSDL_GetDesktopDisplayMode。使用示例:

SDL_DisplayMode DM;
SDL_GetCurrentDisplayMode(0, &DM);
auto Width = DM.w;
auto Height = DM.h;

在高 DPI 显示器上,这将返回虚拟分辨率,而不是物理分辨率。

来自 SDL2 wiki:

当 SDL 全屏运行并更改分辨率时,[SDL_GetDesktopDisplayMode()] 和 SDL_GetCurrentDisplayMode() 之间存在差异。在这种情况下,[SDL_GetDesktopDisplayMode()] 将返回之前的原生显示模式,而不是当前的显示模式。

【讨论】:

    【解决方案2】:

    全屏:使用SDL_GetRendererOutputSize可以很容易地完成

    您只需像这样传递您的SDL_Renderer*

    int w, h;
    
    SDL_GetRendererOutputSize(renderer, &w, &h);
    

    void SDL_GetRendererOutputSize(SDL_Renderer* 渲染器, 整数* w, int* h)

    渲染器渲染上下文

    w 用渲染器宽度填充的指针

    h 一个填充了渲染器高度的指针

    在非全屏上:

    使用SDL_GetDesktopDisplayMode()

    SDL_DisplayMode dm;
    
    if (SDL_GetDesktopDisplayMode(0, &dm) != 0)
    {
         SDL_Log("SDL_GetDesktopDisplayMode failed: %s", SDL_GetError());
         return 1;
    }
    
    int w, h;
    w = dm.w;
    h = dm.h;
    

    请进行错误检查!否则当SDL_GetDesktopDisplayMode 失败时,你会讨厌你的生活!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多