我正在使用 QGLWidgets 的 3 层层次结构在我的 CAD 类应用程序中的 5 个 OpenGL 视口之间共享着色器和顶点数据。根上下文用于编译应用程序范围的着色器,每个文档上下文用于共享模型顶点数据,视口上下文是实际执行渲染的上下文(还包含网格顶点数据和其他每个视口的内容)。
着色器共享似乎工作正常,网格绘图也是如此,但是在共享顶点数据时它失败了,老实说 - 我看不出它应该如何工作......
我在模型上下文处于当前状态时为项目构建了一个 3D 图标,因为它是第一个 VAO,它的“名称”为 1。当我开始绘制对象时,视口上下文(与模型上下文共享,请记住) 是当前的,因此调用了 VAO 1,但绘制的是视口的VAO 1 - 我漂亮的红色网格中心线。可以共享 OpenGL 上下文,但是如何指定每个项目所属的“命名空间”,因为名称不是唯一的?
我尝试在模型 VAO 调用之前使模型上下文处于当前状态,但是绘制了正确的 VAO 和视口,我认为在 QPainter::beginNativePainting() 块期间切换上下文不会让 OpenGL 高兴。
这对我来说似乎是一件非常基本的事情,所以我必须做一些愚蠢的事情 - 有什么建议吗?