Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在两个OpenGL上下文之间切换_Opengl_Glut_Glx - Fatal编程技术网

如何在两个OpenGL上下文之间切换

如何在两个OpenGL上下文之间切换,opengl,glut,glx,Opengl,Glut,Glx,我有一个程序,它有一个OpenGL窗口,可以在其中绘制各种东西。同时,我正在进行屏幕外渲染以获得图像遮罩 它们中的每一个都有一个单独的OpenGL上下文供它们绘制。屏幕外渲染是定期调用的,比如说每秒 发生的情况是,屏幕外的上下文不会“切换回”默认上下文到GUI上下文,因此我最终会从屏幕外将内容绘制到GUI 告诉OpenGL“从现在开始使用其他上下文”的方法是什么?对于GLX,您可以使用带有签名的glXMakeCurrent: Bool glXMakeCurrent(Display *dpy, G

我有一个程序,它有一个OpenGL窗口,可以在其中绘制各种东西。同时,我正在进行屏幕外渲染以获得图像遮罩

它们中的每一个都有一个单独的OpenGL上下文供它们绘制。屏幕外渲染是定期调用的,比如说每秒

发生的情况是,屏幕外的上下文不会“切换回”默认上下文到GUI上下文,因此我最终会从屏幕外将内容绘制到GUI


告诉OpenGL“从现在开始使用其他上下文”的方法是什么?

对于GLX,您可以使用带有签名的
glXMakeCurrent

Bool glXMakeCurrent(Display *dpy, GLXDrawable drawable, GLXContext ctx);

为什么不直接使用帧缓冲区对象进行屏幕外渲染呢。这将您从管理PBuffer中解放出来。此外(与PBuffer不同),FBO的内容不会受到可能的无效影响(对于PBuffer,您必须检查无效事件,如果发生这种情况,则重新绘制PBuffer内容)。但我仍然需要与FBO切换上下文,对吗?不,您不需要。FBO是其创建环境的一部分。使用FBO时只需要一个上下文。这是他们的优点之一。有关最小FBO示例,请参见。