这个问题是关于使用OpenGL的图形应用程序。 (当时我正在使用框架GLFW,但我考虑更改它。)
我的目标是让用户(尽可能多)在全屏模式和窗口模式之间持续切换。此过程应该不到一秒钟,并且可以在运行时期间发生。例如,参见Minecraft游戏,用户可以在几乎没有延迟的情况下全屏切换。
窗口娱乐过程不需要花费太多时间。但问题是,关闭窗口会破坏我的OpenGL上下文,我必须重新加载所有着色器和缓冲区。
如何在不破坏OpenGL上下文的情况下重新创建图形应用程序的窗口?(我想使用GLFW,但我对替代框架或自己的实现持开放态度。)
答案 0 :(得分:4)
从技术上讲,OpenGL上下文不依赖于任何窗口。重要的是,窗口的可视格式与创建上下文的可视格式相匹配。完全可以使用具有多个窗口的单个OpenGL上下文。
您遇到的问题是,像GLFW,SDL或GLUT这样的框架不会暴露这种功能。这个功能肯定应该在一段时间内添加到它们中。
当您自己创建和管理Windows和OpenGL上下文时,您可以这样做。您打算采用的主要流程如下:
选择窗口的可视格式(PIXELFORMATDESCRIPTOR,Visual,FBConfig,取决于操作系统和图形系统)
创建第一个窗口并设置可视格式
创建关于第一个窗口的OpenGL上下文作为drawable
创建更多窗口并将它们设置为您已选择的相同视觉格式。
您现在可以从当前的drawable(= window)中分离OpenGL上下文,并将其附加到具有兼容可视格式的任何其他drawable(即窗口)