我正在尝试使用SDL和C ++制作程序。如何在SDL中获得屏幕的宽度和高度(以像素为单位)?我试图获得屏幕的宽度而不是窗口的宽度。 。 。
答案 0 :(得分:12)
在SDL2中,根据您的需要使用SDL_GetCurrentDisplayMode
或SDL_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()]将返回先前的原生显示模式,而不是当前的显示模式。
答案 1 :(得分:2)
全屏:使用SDL_GetRendererOutputSize
可以轻松完成
您只需传递SDL_Renderer*
,就像这样:
int w, h;
SDL_GetRendererOutputSize(renderer, &w, &h);
void SDL_GetRendererOutputSize(SDL_Renderer *渲染器, int * w, int * 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
失败时,你会恨你的生活!