是否可以在Qt中的顶级窗口之间使用相同的OpenGL上下文?

时间:2015-04-24 03:44:53

标签: c++ qt opengl

我在Qt中开发了一个编辑器,它将在多个顶级窗口中同时运行多个GL上下文。由于VAO不能在上下文之间共享,我试图想出一种基于每个上下文管理它们的方法,这被证明是相当复杂的。

如果我可以简单地在两者之间使用相同的上下文,那将会简单得多,但Qt 5.4似乎无法做到这一点。 QGLWidget能够显式地将QGLContext指针作为构造函数参数,但QOpenGLWidget没有相应的函数。这就是the documentation关于上下文共享的内容:

  

当多个QOpenGLWidgets作为子项添加到同一个顶级窗口小部件时,它们的上下文将相互共享。这不适用于属于不同窗口的QOpenGLWidget实例。

有解决方法吗?

遗憾的是,我无法找到关于这个主题的太多信息,因为QOpenGLWidget相对较新 - 我能找到的大部分内容都是关于QGLWidget。

编辑:我尝试了一些不同的事情并且我在创建自定义GL小部件方面取得了一些成功,因此我可以自己管理上下文,尽管存在一些不好的错误。然而,在某些情况下,它实际上需要为不同的窗口设置不同的上下文,这意味着我应该坚持使用QOpenGLWidget并提出一个VAO管理系统。如果有更多关于这个主题的知识/经验的人可以解释它是如何工作的,那将是很酷的。

1 个答案:

答案 0 :(得分:2)

来自QOpenGLWidget documentation

  

设置属于的QOpenGLWidget实例之间的共享   不同的窗口,设置Qt :: AA_ShareOpenGLContexts应用程序   实例化QApplication之前的属性。这将触发共享   所有QOpenGLWidget实例之间没有任何进一步的步骤。

根据Application Attribute documentation,此标志是在5.4版本中引入的