共享OpenGL VAO / VBO /等。通过QGLWidget

时间:2011-04-21 22:28:32

标签: qt opengl qpainter qglwidget

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

着色器共享似乎工作正常,网格绘图也是如此,但是当涉及共享顶点数据时,它失败并且说实话 - 我看不出它应该如何工作......

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

我尝试在模型VAO调用之前使模型上下文变为当前,但是绘制了正确的VAO和视口,我认为在QPainter :: beginNativePainting()块期间切换上下文不会使OpenGL满意。

这对我来说似乎是一件非常基本的事情,所以我必须做一些愚蠢的事 - 任何建议?

1 个答案:

答案 0 :(得分:4)

感谢Alfonse Reinheart在OpenGL论坛上,我现在知道这是因为VAO不在上下文之间共享。