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

时间:2011-04-29 12:31:18

标签: c++ c winapi opengl fullscreen

当试图实现一个简单的OpenGL应用程序时,我很惊讶虽然很容易找到大量关于高级渲染内容的示例和文档,但Win32框架文档很少,甚至大多数示例和教程都没有实现即使对于基本情况也是如此,没有提到多个监视器等高级内容。尽管经过了几个小时的搜索,我仍无法找到一种能够可靠地处理Alt-Tab的方法。

OpenGL全屏应用程序应如何响应Alt-Tab?应用应该响应哪些消息(WM_ACTIVATE,WM_ACTIVATEAPP)?应该怎么做? (更改显示分辨率,销毁/创建渲染上下文,或者销毁/创建一些OpenGL资源?)

2 个答案:

答案 0 :(得分:3)

如果应用程序使用某个动画循环,则暂停循环,然后最小化窗口。如果它更改了显示分辨率,伽玛会在更改之前恢复为设置。

无需破坏OpenGL上下文或资源; OpenGL使用抽象资源模型:如果另一个程序需要GPU或其他资源的RAM,您的程序资源将被透明地换出。

编辑:

更改窗口可见性状态可能需要重置OpenGL视口,因此最好在显示/渲染函数中适当地调用glViewport,或者至少在调整大小处理程序中调用它,然后再进行完整的重绘。 / p>

答案 1 :(得分:0)

我也遇到了麻烦。我通过在WM_ACTIVATE(WA_INACTIVE)上全屏显示并在WM_ACTIVATE(WA_ACTIVE)上重新输入来解决了该问题。如果该应用程序处于非活动状态时仍处于全屏模式,则即使其他应用程序会收到所有消息,我的窗口有时仍会在其他应用程序之上绘制。