16

我正在使用 SDL 1.2.14 和其中包含的 OpenGL 绑定用 C++ 编写游戏。

但是,如果游戏是全屏的,然后我Alt退出Tab然后重新进入游戏,结果是不可预测的。游戏逻辑仍然运行。但是,渲染停止。我只看到在 Alt-tab 之前绘制的游戏的最后一帧

我已确保在收到SDL_APPACTIVE = 1事件时重新初始化 OpenGL 上下文并重新加载所有纹理,这似乎仅适用于一个Alt- Tab,然后所有后续Alt-Tab将停止渲染(我已确保SDL_APPACTIVE正确处理每个时间并相应地设置上下文。)

我冒昧地猜测 SDL 在最小化我不知道的应用程序时会做一些事情。

有任何想法吗?

4

1 回答 1

1

当你的全屏应用程序失去焦点时,它是一个很好的做法。两个原因:

  1. 用户可能需要 Alt-Tab 并做一些重要的事情(比如关闭一个占用资源的繁重应用程序)。当他切换时,新应用程序将获得控制权,操作系统必须根据需要从您的应用程序中释放资源
  2. 现代操作系统使用大量 GPU - 这意味着它需要释放一些图形内存才能工作。

尝试在 APPACTIVE=0 时关闭您使用的每个 GL 资源,然后在 APPACTIVE=1 时再次分配它们。如果这解决了,那是“你的错”。如果它没有解决,那就是 SDL(或 GL 或 OS)错误。

编辑:s/SO/OS/g

于 2011-07-13T13:46:06.187 回答