QT和OpenGL,使用一个上下文对多个小部件



我最近询问了一个问题,该问题如何与Vertex Array对象和框架缓冲区对象共享问题,然后我确信使用多个上下文只是引起更多的头痛,然后再用解决方案。

我正在使用QT,目前我的设置是我有一个无形的QGLWIDGET,然后在可见的QGLWidget的构造函数中使用,以共享资源,这很棒,这很有用我不能在上下文中共享某些东西。/p>

我希望找到一个可以使用单个上下文渲染我所有不同小部件的解决方案,此问题是指使用您希望共享的QGLWIDGET构造函数,在该QGLContext中,您希望共享似乎使用一个常见的上下文,而是设置一个qglwidget使用的上下文,当您尝试在第二个小部件上使用它时,称为qwarning,它告诉您QGLContext。

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

理想情况下,我想保持当前的设计,即可以使用一个统一的游戏编辑器,该编辑器可通过标签导航,而不是为编辑器的每个部分提供单独的程序。

似乎唯一一个不错的解决方案是使用Qgraphicsview并将QGLWIDGET设置为视口,但是这似乎根本不起作用。我可以渲染基本的原语,但是更多,它崩溃了。

有人有经验处理这个问题的多个OpenGL小部件,如果可以的话,您可以解释您为实现目标而采取的过程吗?

我不太了解您为什么遇到这么多麻烦,我正在构建一个类似CAD的应用程序,因此分享一些上下文,例如:

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

共享的小部件参数允许您创建上下文的"继承"树,每个上下文都可以访问其自己的祖先数据(但不是它的儿童或兄弟姐妹)。

最新更新