在C ++中使用单个openGL上下文的多个QGLWidgets

时间:2011-12-13 21:54:51

标签: c++ qt opengl

我正在编写一个由多个(16-32)绘图组成的应用程序,这些绘图每秒更新几次并使用openGL绘制。到目前为止,我已经完成了大部分使用GLUT绘制原型的原型。但是我想采用像QT这样的完整的fledge框架,我正准备编写测试QGLWidget。

在开始之前,我想弄清楚多个QGLWidgets是否可以共享一个openGL上下文?如果有的话,我需要跟踪在小部件之间共享openGL上下文时需要跟踪的内容吗?

2 个答案:

答案 0 :(得分:3)

  

如果多个QGLWidgets可以共享一个openGL上下文吗?

现在这是不可能回答的,因为它取决于所讨论的平台:在X11 / GLX上,确实可以在多个drawable上使用间接上下文,但是上下文只能在一个drawable上激活一段时间。

然而:

也可以(并且建议的方法)让多个上下文共享其数据。在OpenGL的第一个版本中,这只是显示列表,因此这仍称为列表共享。但是对于当前版本的OpenGL,它还包括纹理,像素缓冲对象和顶点缓冲对象。然而,帧缓冲对象无法共享,但由于纹理可以用作FBO附件,这没什么大不了的。

QGLWidget提供了一个直接的API,用于在QGLWidgests的上下文之间共享上下文数据。

答案 1 :(得分:1)

是的,可以使用this constructor来共享opengl上下文。

  

如果有的话,我需要在分享时跟踪   小部件之间的openGL上下文?

我不确定,但我认为你需要照顾的东西没什么特别的。