通过QGLWidget共享OpenGL VAO/VBO等内容

5

我在我的类似CAD的应用程序中,使用了一个包含3层QGLWidgets的层次结构,以便在5个OpenGL视口之间共享着色器和顶点数据。根上下文用于编译应用程序范围内的着色器,每个文档上下文用于共享模型顶点数据,而视口上下文则用于实际渲染(并包含网格顶点数据和其他每个视口的内容)。

着色器共享似乎很好用,绘制网格也是如此,但当涉及到共享顶点数据时,它失败了,老实说 - 我不知道它应该如何工作...

我在当前模型上下文中构建了一个物品的3D图标,因为它是第一个VAO,所以它的“名称”为1。当我来绘制对象时,视口上下文(记住它与模型上下文共享)是当前的,所以调用VAO 1,但绘制的是视口的VAO 1 - 我漂亮的红色网格中心线。OpenGL上下文可以共享,但是如何指定每个项目所属的“命名空间”,因为名称不是唯一的呢?

我尝试在模型VAO调用之前将模型上下文设为当前,但未能正确绘制VAO或视口。我认为在QPainter :: beginNativePainting()块期间切换上下文会使OpenGL不舒服。

这对我来说似乎是非常基本的事情,所以我一定在做一些愚蠢的事情 - 有什么建议吗?

1个回答

5

感谢OpenGL论坛上的Alfonse Reinheart,我现在知道了VAO之间不共享的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接