是否可以隐藏 OpenGL 窗口并且渲染仍在运行?我使用 glutHideWindow 永远不会触发显示功能。
如果那不可能,是否可以在程序中更改当前窗口的焦点?我想运行 opengl 程序,但我不需要那个窗口。事实上,我想在另一个程序中使用 opengl 在每一帧更新的帧缓冲区。但是在两个程序之间切换总是很烦人。(他们都有窗户)
是否可以隐藏 OpenGL 窗口并且渲染仍在运行?
对问题的两个部分都是“是”和“否”。
如果隐藏一个窗口,则该窗口视口的所有像素在渲染时都将无法通过像素所有权测试。因此,您不能将隐藏窗口用作 OpenGL 进行操作的可绘制对象。
您需要的是一个可以绘制到的屏幕外可绘制对象。
现代变体是帧缓冲区对象(FBO),您可以在常规 OpenGL 上下文中创建它,甚至可以在隐藏窗口上工作。FBO 采用一些可绘制的附件(渲染缓冲区、纹理)并允许 OpenGL 绘制这些附件而不是窗口。
一种较旧的方法是 PBuffers,也得到广泛支持,但不如 FBOs 容易使用。
请注意,如果您想在 Linux/X11 上执行离屏渲染,X 服务器必须处于活动状态,即拥有 VT,以便 GPU 实际处理命令。因此,您不能只“在后台”启动 X 服务器,而是让另一个 X 服务器使用显示设备。
创建窗口后,您可以使用glutHideWindow()
离开屏幕。然后你仍然渲染为正常并用于glReadPixels
读回并获取缓冲区以供以后使用。