2

是否可以隐藏 OpenGL 窗口并且渲染仍在运行?我使用 glutHideWindow 永远不会触发显示功能。

如果那不可能,是否可以在程序中更改当前窗口的焦点?我想运行 opengl 程序,但我不需要那个窗口。事实上,我想在另一个程序中使用 opengl 在每一帧更新的帧缓冲区。但是在两个程序之间切换总是很烦人。(他们都有窗户)

4

2 回答 2

5

是否可以隐藏 OpenGL 窗口并且渲染仍在运行?

对问题的两个部分都是“是”和“否”。

如果隐藏一个窗口,则该窗口视口的所有像素在渲染时都将无法通过像素所有权测试。因此,您不能将隐藏窗口用作 OpenGL 进行操作的可绘制对象。

您需要的是一个可以绘制到的屏幕外可绘制对象。

现代变体是帧缓冲区对象(FBO),您可以在常规 OpenGL 上下文中创建它,甚至可以在隐藏窗口上工作。FBO 采用一些可绘制的附件(渲染缓冲区、纹理)并允许 OpenGL 绘制这些附件而不是窗口。

一种较旧的方法是 PBuffers,也得到广泛支持,但不如 FBOs 容易使用。

请注意,如果您想在 Linux/X11 上执行离屏渲染,X 服务器必须处于活动状态,即拥有 VT,以便 GPU 实际处理命令。因此,您不能只“在后台”启动 X 服务器,而是让另一个 X 服务器使用显示设备。

于 2013-05-06T17:50:57.663 回答
0

创建窗口后,您可以使用glutHideWindow()离开屏幕。然后你仍然渲染为正常并用于glReadPixels读回并获取缓冲区以供以后使用。

于 2017-08-18T01:35:06.827 回答