如何在SDL中获取屏幕大小

19

我正在尝试使用SDL和C++编写程序。如何在SDL中获取屏幕的像素宽度和高度?我想要获取屏幕的宽度而不是窗口的宽度。


1
请查看这个链接:https://dev59.com/b3DXa4cB1Zd3GeqP7QPG - Rahul Tripathi
2个回答

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

10

全屏显示:使用SDL_GetRendererOutputSize非常容易实现。

只需像这样传递您的SDL_Renderer*即可:

int w, h;

SDL_GetRendererOutputSize(renderer, &w, &h);

void SDL_GetRendererOutputSize(SDL_Renderer* 渲染器, int* 宽度, int* 高度)

渲染器:一个渲染上下文

宽度:填充渲染器宽度的指针

高度:填充渲染器高度的指针

非全屏模式:

使用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失败时,你会很痛苦!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接