c++OpenGL多线程缓冲资源

c++ OpenGL Multithreading with buffer resource

本文关键字:资源 缓冲 多线程 c++OpenGL      更新时间:2023-10-16

我有一个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的事情,但我认为没有这样的事情。

使用PBO,它们允许您进行异步传输,请在此处阅读更多信息。

这应该会有所帮助:http://hacksoflife.blogspot.com/2008/02/creating-opengl-objects-in-second.html