我有一个OpenGL程序,需要定期更新纹理。但同时我希望程序能够响应(特别是继续运行绘制/显示代码),同时更新这些纹理。C++ OpenGL多线程缓冲区资源
但是这似乎是不可能的:如果我让thread1对移动的纹理执行绘制/显示代码和thread2,那么它们将在资源GL_ARRAY_BUFFER_ARB下发生冲突,因为thread2必须保留该资源以将某些纹理移动到vbo。我需要GL_ARRAY_BUFFER_ARB来为thread1绘制/显示代码,因为它使用了不同的vbo。
例如这段代码
glBindBufferARB(GL_ARRAY_BUFFER_ARB, tVboId);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, numVertices*2*sizeof(GLfloat), texCoords, GL_DYNAMIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB,0);
会搬过来一些纹理,但它会需要一段时间。在那段时间内,显示代码应该运行很多次,但它会崩溃,因为GL_ARRAY_BUFFER_ARB正在使用中。
我想我可以做一些类似GL_ARRAY_BUFFER_ARB2的事情,但我认为没有这样的事情。