如何在SDL中获取屏幕大小

How to get screen size in SDL

本文关键字:屏幕 获取 SDL      更新时间:2023-10-16

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

在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()]将返回以前的本地显示模式,而不是当前的显示模式。

在全屏上:使用SDL_GetRendererOutputSize 可以非常容易地完成

你只需要像这样通过你的SDL_Renderer*

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

void SDL_GetRendererOutputSize(SDL_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失败了,你会讨厌你的生活!