创建独立OpenGL视口的问题

时间:2015-04-28 19:08:46

标签: c++ qt opengl viewport instances

目标:

在我的应用程序中,我尝试实现多个视口,以允许用户从多个视角查看场景。我的每个视口都需要能够在线框,阴影,灯光等之间切换。我当前可以在每个视口中从不同的角度进行渲染,但是我有问题。

问题:

当我尝试在任何视口中设置各种设置,例如 glPolygonMode() qglClearColor()时,这些设置仅似乎适用于单一视口 ,通常是最后创建的视口。这个不是信号/插槽问题,因为这些连接是在每个小部件内部处理的,并且不能在小部件之间混淆。

尝试解决问题:

由于我使用Qt作为管理所有UI相关事物的库,我确信Qt已经为我创建和设置每个OpenGL实例做了很多事情,所以可能有些事我忽略了我不知道的事情。

我检查了可用于QGLWidgets的构造函数,并发现QGLWidget可以将另一个QGLWidget作为" sharedwidget"以及QGLContext对象。

  • 我目前使用" sharedwidget"路由,因为没有它由于某种原因我不能让纹理绑定超过1个视口。但是,这并没有解决在每个QGLWidget实例中无法在线框或阴影之间切换的问题。
  • 我也尝试过QGLContext路线。默认情况下每个QGLWidget 无论如何都会创建一个新的上下文,但是在尝试分配新的上下文时 在所有这些之间共享一个单独的上下文我会遇到问题 我的着色器没有链接(我相信initializeGL插槽不是 在这种情况下被调用),每次上下文被共享到另一个QGLWidget时导致崩溃:
  

ASSERT:" QOpenGLFunctions :: isInitialized(d_ptr)"在文件中   C:\工作\编译\ qt5_workdir \ W \ S \ qtbase \包括\ qtgui ../../的src / GUI /的OpenGL / qopenglfunctions.h,   2018年线

详细说明:

目前,我的应用程序采用以下层次结构:

  • 应用
    • 窗口
      • ViewportWidget [动态数组]
        • QGLWidget(自定义变体)

每个QGLWidget唯一需要共享的是指向当前" map"的指针,以便每个人都可以根据在特定小部件实例中设置的任何设置来渲染地图。 / p>

我执行以下功能来设置视口:

  • 我创建了一个新的ViewportWidget,将其添加到相应的框架和布局中。如果视口不是第一个视口,那么它也会传递第一个QGLWidget以用作" sharedwidget"
  • 视口然后创建一个交换间隔为1的QGLFormat,并将所述格式传递给新QGLWidget的构造函数。
  • 然后我被迫打电话给#34; makeCurrent()"对于视口,否则我崩溃的原因是:
  

ASSERT:" false"在文件qgl.cpp中,第122行

甚至可以将单独的QGLWidgets与不同的" polygonMode"'或" clearColor"' s?我只是担心我做错了什么会让我在以后的屁股上咬我,这是我想要避免的。

0 个答案:

没有答案