如何在SDL中获取屏幕大小

时间:2015-10-28 14:18:34

标签: c++ sdl-2

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

2 个答案:

答案 0 :(得分:12)

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

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

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

来自SDL2维基:

  

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

答案 1 :(得分:2)

全屏:使用SDL_GetRendererOutputSize 可以轻松完成

您只需传递SDL_Renderer*,就像这样:

int w, h;

SDL_GetRendererOutputSize(renderer, &w, &h);
  

void SDL_GetRendererOutputSize(SDL_Renderer *渲染器,                          int * w,                          int * 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失败时,你会恨你的生活!