我正在使用像素完美的源图像和SDL2来制作程序。当设置为全屏时,我希望它使用原生分辨率(SDL_WINDOW_FULLSCREEN_DESKTOP标志),但仅在某个最小分辨率和合理的最大分辨率之间,之后它将从最大的合法分辨率延伸。问题是我只能在SDL2文档中找到对程序自己的窗口或程序大小的引用。
SDL中是否有任何功能,我至少可以从中直接检索屏幕宽度和高度?
或者我应该做一些事情,比如使用SDL_WINDOW_FULLCREEN_DESKTOP然后再使用SDL_GetWindowSize()并重新调整窗口大小?这甚至可以按预期工作吗?我想要一个更优雅的解决方案。感觉很脏。
答案 0 :(得分:12)
在SDL 2 wiki中,您有一个名为Display and Window Management的类别。它列出了您需要了解的有关SDL 2管理显示器(屏幕)和窗口的所有信息。
您有多种选择,最通用的选择是使用SDL_GetCurrentDisplayMode
或SDL_GetDesktopDisplayMode
。不同之处在wiki中解释:
当SDL全屏运行并且更改了分辨率时,SDL_GetDesktopDisplayMode()和SDL_GetCurrentDisplayMode()之间存在差异。在这种情况下,SDL_GetDesktopDisplayMode()将返回先前的本机显示模式,而不是当前的显示模式。
使用其中一个设置SDL_DisplayMode
后,您可以检索其属性w
和h
。
但是,还有另一个功能可能更合适,更直接:SDL_GetDisplayBounds
。如果我没有弄错的话,它会显示相对于计算机上可以激活的整个显示器的显示坐标,以及显示器的大小。
这两种方法都需要您知道您想要了解的显示的索引。我对SDL 2的这一部分没有那么多玩,但我想你可以使用SDL_GetNumVideoDisplays
来获取显示数量(并检查是否至少有一个? - 我认为SDL_Window
部分如果没有可用的显示器可能不起作用)并选择一个。或者你可以选择第一个索引为0的那个。
哦,你可以查看the page of SDL_GetCurrentDisplayMode
上的例子,它们可以有效地检索显示器的大小。