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

时间:2017-01-11 02:08:32

标签: multithreading opengl glfw opengl-3

有两个上下文,一个工作者上下文和一个渲染上下文。在安装过程中,工作线程创建并设置着色器和VBO。渲染线程然后使用VBO创建VAO并绘制它。屏幕上没有任何内容(或旧的顶点,见下文)。

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

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

这非常奇怪。渲染上下文使用在工作线程上下文中创建的着色器的两种方式,但我似乎无法共享VBO,但是当工作者上下文创建VBO时,顶点不会更新,并且前一个程序运行的三角形会绘制。 / p>

我在Ubuntu 16上。这发生在glew,现在是glbinding,以及我自己编译的最新glfw3和Ubuntu软件包。

总之,VBO创建和绘图从主线程开始,使用从工作线程创建的着色器。如果我尝试使用工作线程(相同的函数)创建一个VBO,我似乎可以访问一个新的缓冲区,当它在渲染线程中使用时碰巧有旧数据......

1 个答案:

答案 0 :(得分:0)

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

glFlush();

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