2

我最近问了一个关于如何解决跨多个上下文共享顶点数组对象和帧缓冲区对象的问题,然后我确信使用多个上下文只会引起比解决方案更多的麻烦。

我正在使用 Qt,目前我的设置是我有一个不可见的 QGLWidget,然后我在可见 QGLWidget 的构造函数中使用它来共享资源,这很好接受我不能在上下文中共享某些东西。

我希望找到一个解决方案,我可以使用单个上下文来呈现我所有不同的小部件,这个问题是指使用 QGLWidget 构造函数,您可以在其中传递您希望共享的 QGLContext ,但是这似乎没有使用一个常见的上下文,而是设置一个 QGLWidget 使用的上下文,当您尝试在第二个小部件上使用它时,会调用 qWarning 通知您 QGLContext 必须引用您将其传递给的小部件。

我的应用程序的目标是拥有 2 个单独的 GUI,它们呈现不同的场景,但共享相同的上下文。目前我有一个“世界”编辑器,它可以编辑一个场景并将其保存到一个文件中以在我的游戏引擎中使用,我还有一个“材质”编辑器,它允许您以图形方式编辑类似于 UDK 材质编辑器的材质,那里是一个使用 OpenGL 的预览窗口。

理想情况下,我希望保持我目前的设计,即拥有一个可通过选项卡导航的统一游戏编辑器,而不是为编辑器的每个部分设置单独的程序。

唯一看起来像是一个不错的解决方案的是使用 QGraphicsView 并将 QGLWidget 设置为视口,但这似乎根本不起作用。我可以渲染基本的原语,但如果再多的话,它就会崩溃。

有没有人有处理多个 OpenGL 小部件的问题的经验,如果有,你能解释一下你为实现目标所采取的过程吗?

4

1 回答 1

1

我不太明白你为什么遇到这么多麻烦,我正在构建一个类似 CAD 的应用程序,所以分享一些上下文,如下所示:

  • 我使用应用程序范围的隐藏QGLWidget作为主窗口类的成员,这是加载的上下文着色器。
  • 对于每个文档窗口,窗口类都有一个隐藏QGLWidget成员,这是加载上下文几何图形。着色器上下文用作它的“共享”小部件,允许文档访问应用程序范围的着色器。
  • 每个文档窗口中的 5 个视口中的每一个都是可见的QGLWidget,这是实际渲染发生的地方。文档窗口几何图形QGLWidget用作“共享”小部件,因此视口可以访问文档范围的几何数据和应用程序范围的着色器。

shared 小部件参数允许您创建上下文的“继承”树,每个上下文都可以访问它自己的和所有它的祖先数据(但不是它的孩子或兄弟姐妹)。

于 2012-11-09T08:10:25.670 回答