【问题标题】:SDL OpenGL Alt-tab in fullscreen has unpredictable results全屏中的 SDL OpenGL Alt-tab 具有不可预测的结果
【发布时间】:2011-09-22 12:08:13
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

  • 祝你好运!这是我自己从未满意地弄清楚的事情之一。我真的很想听到答案。
  • 这个问题是关于什么平台的?对于 Windows,stackoverflow.com/questions/972299/… 用于 directX,但可能提供指针。
  • 您确定是 SDL 而不是 OpenGL 导致了问题吗?例如,您是否在收到初始事件时释放纹理、缓冲区和其他 GL 资源?您是否通过调用 SDL_SetVideoMode 正确响应 SDL_VIDEORESIZE 事件?最后,你试过SDL forums吗?我敢打赌,那里有人问过同样的问题。

标签: c++ opengl sdl fullscreen alt-tab


【解决方案1】:

当您的全屏应用程序失去焦点时“减慢”速度是一种很好的做法。两个原因:

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

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

编辑:s/SO/OS/g

【讨论】:

  • 你想让“SO”代表什么?
  • 我很抱歉。那应该是操作系统,就像在“操作系统”中一样。 “SO”是我母语的首字母缩写词。
  • 啊!每天学些新东西。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 2014-10-11
  • 2012-06-26
  • 2011-06-26
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多