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



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

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

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

有办法解决这个问题吗?

不幸的是,我找不到太多关于这个主题的信息,因为QOpenGLWidget相对较新——我能找到的大部分都是关于QGLWidget的。

edit:我正在尝试一些不同的东西,我已经成功地创建了一个自定义的GL小部件,这样我就可以自己管理上下文,尽管有一些坏错误。然而,在某些情况下,听起来实际上需要为不同的窗口提供不同的上下文,这意味着我应该坚持使用QOpenGLWidget,并提出一个VAO管理系统。不过,如果在这方面有更多知识/经验的人能解释一下这是如何运作的,那就太酷了。

来自QOpenGLWidget文档:

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

根据应用程序属性文档,此标志在5.4版中引入

最新更新