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

发布于 2024-11-04 18:27:08 字数 302 浏览 2 评论 0原文

当尝试实现一个简单的 OpenGL 应用程序时,我感到惊讶的是,虽然很容易找到大量有关高级渲染内容的示例和文档,但 Win32 框架的文档记录很少,甚至大多数示例和教程都没有正确实现这一点对于基本情况,更不用说诸如多个显示器之类的高级内容了。尽管经过几个小时的搜索,我还是无法找到可靠地处理 Alt-Tab 的方法。

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

When trying to implement a simple OpenGL application, I was surprised that while it is easy to find plenty of examples and documentation on advanced rendering stuff, the Win32 framework is poorly documented and even most samples and tutorials do not implement this properly even for basic cases, not mentioning advanced stuff like multiple monitors. Despite of several hours of searching I was unable to find a way which would handle Alt-Tab reliably.

How should OpenGL fullscreen application respond to Alt-Tab? Which messages should the app react to (WM_ACTIVATE, WM_ACTIVATEAPP)? What should the reaction be? (Change the display resolution, destroy / create the rendering context, or destroy / create some OpenGL resources?)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

野味少女 2024-11-11 18:27:08

如果应用程序使用某些动画循环,请暂停循环,然后最小化窗口。如果更改了显示分辨率和伽玛值,请恢复到更改之前的设置。

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

编辑:

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

If the application uses some animation loop, suspend the loop, then just minimize the window. If it changed display resolution and gamma revert to the settings before changing them.

There's no need to destroy OpenGL context or resources; OpenGL uses an abstract resource model: If another program requires RAM of the GPU or other resources, your programs resources will be swapped out transparently.

EDIT:

Changing the window visibility status may require to reset the OpenGL viewport, so it's a good idea to either call glViewport apropriately in the display/rendering function, or at least set it in the resize handler, followed by a complete redraw.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文