具有共享上下文的奇怪 openGL 行为,共享着色器,VBO 有问题

Weird openGL behavior with shared context, shader is shared, VBO has problems

有两个上下文,一个工作上下文和一个呈现上下文。在设置期间,工作线程创建并设置着色器和 VBO。渲染线程然后使用 VBO 创建一个 VAO 并绘制它。我在屏幕上看不到任何东西(或旧顶点,见下文)。

如果我允许渲染线程在创建 VAO 之前也创建 VBO,一切正常,我看到一个三角形,使用在工作线程中创建的着色器程序渲染。

真正奇怪的部分是在它工作之后,如果我将它切换回工作线程中的 VBO 创建,我仍然会看到三角形,但是如果我更改三角形的几何形状,它不会更新,直到我将它切换回来在渲染线程中创建 VBO。

这太奇怪了。渲染上下文使用在工作上下文中创建的着色器的两种方式,但我似乎无法共享 VBO,但是当工作上下文创建 VBO 时,顶点不会更新,并且上一个程序中的三角形 运行 画.

我在 Ubuntu 16。这发生在 glew,现在是 glbinding,还有我自己编译的最新 glfw3 和 Ubuntu 包。

总而言之,VBO 的创建和绘制是从主线程开始的,而着色器是从工作线程创建的。如果我尝试使用工作线程(相同的功能)创建一个 VBO,我似乎可以访问一个新缓冲区,该缓冲区在渲染线程中使用时恰好有旧数据...

使用该对象的线程只需绑定它。更新对象的线程(在本例中为工作线程)必须使用

glFlush();

确保更新已处理并可用于其他上下文。