如何使用SDL2获得屏幕分辨率?

时间:2014-08-31 17:56:22

标签: c++ screen fullscreen sdl-2

我正在使用像素完美的源图像和SDL2来制作程序。当设置为全屏时,我希望它使用原生分辨率(SDL_WINDOW_FULLSCREEN_DESKTOP标志),但仅在某个最小分辨率和合理的最大分辨率之间,之后它将从最大的合法分辨率延伸。问题是我只能在SDL2文档中找到对程序自己的窗口或程序大小的引用。


SDL中是否有任何功能,我至少可以从中直接检索屏幕宽度和高度?

或者我应该做一些事情,比如使用SDL_WINDOW_FULLCREEN_DESKTOP然后再使用SDL_GetWindowSize()并重新调整窗口大小?这甚至可以按预期工作吗?我想要一个更优雅的解决方案。感觉很脏。

1 个答案:

答案 0 :(得分:12)

在SDL 2 wiki中,您有一个名为Display and Window Management的类别。它列出了您需要了解的有关SDL 2管理显示器(屏幕)和窗口的所有信息。

您有多种选择,最通用的选择是使用SDL_GetCurrentDisplayModeSDL_GetDesktopDisplayMode。不同之处在wiki中解释:

  

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

使用其中一个设置SDL_DisplayMode后,您可以检索其属性wh

但是,还有另一个功能可能更合适,更直接:SDL_GetDisplayBounds。如果我没有弄错的话,它会显示相对于计算机上可以激活的整个显示器的显示坐标,以及显示器的大小。

这两种方法都需要您知道您想要了解的显示的索引。我对SDL 2的这一部分没有那么多玩,但我想你可以使用SDL_GetNumVideoDisplays来获取显示数量(并检查是否至少有一个? - 我认为SDL_Window部分如果没有可用的显示器可能不起作用)并选择一个。或者你可以选择第一个索引为0的那个。

哦,你可以查看the page of SDL_GetCurrentDisplayMode上的例子,它们可以有效地检索显示器的大小。