在全屏OpenGL应用程序中正确处理Alt Tab

3
当我尝试实现一个简单的OpenGL应用程序时,我惊讶地发现,虽然很容易找到大量关于高级渲染内容的示例和文档,但Win32框架的文档却很少,即使是对于基本情况,大多数示例和教程也没有正确地实现这一点,更不用说像多个监视器这样的高级内容了。尽管搜索了几个小时,我仍然找不到一种可靠处理Alt-Tab的方法。
OpenGL全屏应用程序应该如何响应Alt-Tab?应用程序应该对哪些消息作出反应(WM_ACTIVATE、WM_ACTIVATEAPP)?反应应该是什么?(改变显示分辨率,销毁/创建渲染上下文或销毁/创建某些OpenGL资源?)

1个回答

4
如果应用程序使用了某些动画循环,请暂停循环,然后最小化窗口。如果它更改了显示分辨率和伽马值,请恢复更改之前的设置。
无需销毁OpenGL上下文或资源;OpenGL使用抽象资源模型:如果另一个程序需要GPU或其他资源的RAM,则您的程序资源将被透明地交换出去。
编辑:
更改窗口可见性状态可能需要重置OpenGL视口,因此最好在显示/渲染函数中适当调用glViewport,或者至少在调整大小处理程序中设置它,然后进行完整的重绘。

当我这样做时,按下Alt-Tab后我的屏幕变黑了,我不知道为什么,也不知道如何了解更多关于出现问题的原因。看起来我不是唯一一个遇到这个问题的人 - http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=170933&page=1 - Suma
@Suma:只是出于好奇:你在哪里设置视口和投影?我有一个预感,但不想现在就说出来 ;) - datenwolf
我没有设置它们,我让它们保持默认。上下文中只执行了两个操作,glClear和glDrawPixels。 - Suma
3
@Suma:好吧,那就是你的问题了。如果在大小或可见性改变后没有正确设置Viewport,OpenGL就处于一种类似于“中间状态”的状态。你应该总是在绘图函数的最开始设置glViewport。同时,即使只是恒等投影,你也应该设置投影,因为迟早你会在程序中添加多个渲染过程,这将让你(的思维)保持清醒。 - datenwolf
添加 glViewport 确实有帮助。如果您在答案中包含它,我会接受它。 - Suma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接