重新创建窗口而不破坏上下文

时间:2012-10-14 09:48:10

标签: opengl graphics window cross-platform fullscreen

这个问题是关于使用OpenGL的图形应用程序。 (当时我正在使用框架GLFW,但我考虑更改它。)

我的目标是让用户(尽可能多)在全屏模式和窗口模式之间持续切换。此过程应该不到一秒钟,并且可以在运行时期间发生。例如,参见Minecraft游戏,用户可以在几乎没有延迟的情况下全屏切换。

窗口娱乐过程不需要花费太多时间。但问题是,关闭窗口会破坏我的OpenGL上下文,我必须重新加载所有着色器和缓冲区。

如何在不破坏OpenGL上下文的情况下重新创建图形应用程序的窗口?(我想使用GLFW,但我对替代框架或自己的实现持开放态度。)

1 个答案:

答案 0 :(得分:4)

从技术上讲,OpenGL上下文不依赖于任何窗口。重要的是,窗口的可视格式与创建上下文的可视格式相匹配。完全可以使用具有多个窗口的单个OpenGL上下文。

您遇到的问题是,像GLFW,SDL或GLUT这样的框架不会暴露这种功能。这个功能肯定应该在一段时间内添加到它们中。

当您自己创建和管理Windows和OpenGL上下文时,您可以这样做。您打算采用的主要流程如下:

  1. 选择窗口的可视格式(PIXELFORMATDESCRIPTOR,Visual,FBConfig,取决于操作系统和图形系统)

  2. 创建第一个窗口并设置可视格式

  3. 创建关于第一个窗口的OpenGL上下文作为drawable

  4. 创建更多窗口并将它们设置为您已选择的相同视觉格式。

  5. 您现在可以从当前的drawable(= window)中分离OpenGL上下文,并将其附加到具有兼容可视格式的任何其他drawable(即窗口)