gpt4 book ai didi

c++ - Linux 中的 SDL 桌面分辨率检测

转载 作者:太空狗 更新时间:2023-10-29 20:36:36 31 4
gpt4 key购买 nike

<分区>

我收到一些报告,对于一些 Linux 用户,尤其是那些使用 SteamOS 的用户,我的游戏以错误的分辨率打开。游戏会尝试检测当前桌面分辨率并使用该分辨率创建无边框全屏窗口。

例如,SteamOS 的分辨率通常是 1920x1080,但 SDL 报告它大约是 4096x2160!因此,当游戏开始时,玩家只能看到游戏区域的左下部分。

我检测屏幕分辨率的函数如下:

bool View::checkDisplaySize() {
int display_count = 0;
int display_index = 0;
int mode_index = 0;
SDL_DisplayMode mode = { SDL_PIXELFORMAT_UNKNOWN, 0, 0, 0, 0 };

if ((display_count = SDL_GetNumVideoDisplays()) < 1) {
printf("SDL_GetNumVideoDisplays returned: %i", display_count);
return false;
}

if (SDL_GetDisplayMode(display_index, mode_index, &mode) != 0) {
printf("SDL_GetDisplayMode failed: %s", SDL_GetError());
return false;
}

m_display.w = mode.w;
m_display.h = mode.h;

return true;
}

然后我使用存储在 m_display 结构中的信息进入全屏。创建窗口和进入全屏是不同的功能,因为使用其他 Linux 发行版而不是 SteamOS 的玩家也可以选择在游戏期间进入窗口模式:

window = SDL_CreateWindow("Game", 0, 0, m_display.w, m_display.h, window_flags);

...

SDL_SetWindowBordered(window, SDL_FALSE);
SDL_SetWindowPosition(window, 0, 0);
SDL_SetWindowSize(window, m_display.w, m_display.h);
SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);

对我来说,这在我测试过的所有 Linux 计算机上都没有问题。我无法在自己的测试环境中重现该问题。

我的问题是:

  • 这是 Linux 中 SDL 实现的问题还是我做错了什么?

而且,如果这确实是我的错:

  • 这是查询屏幕分辨率的正确方法吗?
  • 如果不是,我是否应该使用其他方法查询解析(更可靠)?

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com