C++ OpenGL Multithreading 与缓冲区资源

标签 c++ multithreading opengl buffer textures

我有一个 OpenGL 程序,需要定期更新纹理。但同时我希望程序在更新这些纹理时能够做出响应(具体来说,继续运行绘制/显示代码)。

但这似乎不可能:如果我让线程 1 执行绘制/显示代码,线程 2 执行纹理移动,那么它们将在资源 GL_ARRAY_BUFFER_ARB 下发生冲突,因为线程 2 必须保留该资源才能将某些纹理移动到 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,它们允许您进行异步传输,了解更多 here .

关于C++ OpenGL Multithreading 与缓冲区资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145006/

相关文章:

c - GLFW3创建窗口返回null

c++ - 链表输出 1 太多了?

c++ - C++中的大量十进制值存储

java - Java 中 ConcurrentHashMap 的多线程

java - LWJGL/OpenGL - 绘制迷宫只能使用正方形尺寸吗?

c - 在 Windows 上使用 GCC (MinGW) 编译 OpenGL

c++ - 如何使用 boost 日志防止内存增长?

c++ - 在编译时将 const char* 转换为 const char_type*

c# - 阻塞的线程可以触发事件吗?

java - SWT 中未显示外壳