我正在尝试使用SDL和C++编写程序.如何在SDL中获得屏幕的宽度和高度(以像素为单位)?我试图获得屏幕的宽度而不是窗口的宽度....
eml*_*lai 13
在SDL2中,使用SDL_GetCurrentDisplayMode或SDL_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()]将返回先前的本机显示模式,而不是当前的显示模式.
在全屏上:它可以很容易地使用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失败时的生活!