如何在SDL中获取屏幕大小

tam*_*aka 6 c++ sdl-2

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

eml*_*lai 13

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

SDL_DisplayMode DM;
SDL_GetCurrentDisplayMode(0, &DM);
auto Width = DM.w;
auto Height = DM.h;
Run Code Online (Sandbox Code Playgroud)

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

来自SDL2维基:

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


kov*_*ell 5

在全屏上:它可以很容易地使用SDL_GetRendererOutputSize

你只需要传入一个你SDL_Renderer*喜欢的:

int w, h;

SDL_GetRendererOutputSize(renderer, &w, &h);
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

请做一个错误检查!否则你会讨厌SDL_GetDesktopDisplayMode失败时的生活!