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

标签 qt opengl qpainter qglwidget

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

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

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

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

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

最佳答案

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

关于qt - 共享 OpenGL VAO/VBO/等。通过 QGLWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750454/

相关文章:

c++ - 使用提升多精度的数学精度问题

c++ - QT - 拖放 - 在拖放位置的自定义场景上创建自定义图形对象

c++ - OpenGL 和 SFML 时钟未正确重启

c++ - OpenGL 2D像素完美渲染

algorithm - 检测后处理 GLSL 着色器上的灯光位置

c++ - Qt - QPainter 不绘制 QPixmap w/Aspect Ratio

qt - 如何在 QMainWindow 中绘画?

c++ - 错误 : class has no member named ‘show’

c++ - 当鼠标指针在 QAbstractItemView 子类中绘制的项目上移动时如何显示工具提示?

linux - 使用FTP向设备传输文件,是否需要运行服务器?