dan*_*jar 3 opengl graphics cross-platform window fullscreen
这个问题是关于使用 OpenGL 的图形应用程序。(当时我正在使用 GLFW 框架,但我考虑更改它。)
我的目标是让用户(尽可能多)在全屏模式和窗口模式之间不断切换。此过程应该花费不到一秒的时间,并且可以在运行时发生。例如,看看游戏《我的世界》,用户可以几乎没有延迟地切换全屏。
窗口重新创建过程并不需要太多时间。但问题是,关闭窗口会破坏我的 OpenGL 上下文,我必须重新加载所有着色器和缓冲区。
如何在不破坏 OpenGL 上下文的情况下重新创建图形应用程序的窗口?(我想使用 GLFW,但我对替代框架或自己的实现持开放态度。)
从技术上讲,OpenGL 上下文不绑定到任何窗口。重要的是,窗口的视觉格式与为其创建上下文的视觉格式相匹配。完全可以在多个窗口中使用单个 OpenGL 上下文。
您面临的问题是,GLFW、SDL 或 GLUT 等框架不公开此类功能。这是一个绝对应该在某个时候添加到其中的功能。
但是,当您自己创建和管理窗口和 OpenGL 上下文时,您可以这样做。您想要的主要过程如下:
选择窗口的视觉格式(PIXELFORMATDESCRIPTOR、Visual、FBConfig,具体取决于操作系统和图形系统)
创建您的第一个窗口并设置视觉格式
创建与第一个窗口相关的 OpenGL 上下文作为可绘制窗口
创建更多窗口并将它们设置为与您已选择的视觉格式完全相同的视觉格式。
您现在可以将 OpenGL 上下文与其当前可绘制对象(=窗口)分离,并将其附加到具有兼容视觉格式的任何其他可绘制对象(即窗口)