如何在 SDL 中获取屏幕尺寸

How to get screen size in SDL

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

在 SDL2 中,根据需要使用 SDL_GetCurrentDisplayMode or SDL_GetDesktopDisplayMode。使用示例:

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

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

来自 SDL2 wiki:

There's a difference between [SDL_GetDesktopDisplayMode()] and SDL_GetCurrentDisplayMode() when SDL runs fullscreen and has changed the resolution. In that case [SDL_GetDesktopDisplayMode()] will return the previous native display mode, and not the current display mode.

在全屏模式下: 使用 SDL_GetRendererOutputSize

可以很容易地完成

您只需像这样传递 SDL_Renderer*

int w, h;

SDL_GetRendererOutputSize(renderer, &w, &h);

void SDL_GetRendererOutputSize(SDL_Renderer* renderer, int* 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 失败时,你会讨厌自己的生活!