c++OpenGL多线程缓冲资源
c++ OpenGL Multithreading with buffer resource
我有一个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
相关文章:
- 具有瞬态资源的RAII类
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 允许从 std::map 的密钥窃取资源?
- 参考资源文件VC++中的$(SolutionDir)
- 如何维护资源管理器项目视图中当前可见的项目列表
- 如何使用原子指针执行双缓冲
- 将 std::allocate_shared 与多态资源分配器一起使用
- 使用RAII在给定次数的迭代后重新分配资源
- 资源管理设计模式
- 如何跨平台将二进制资源构建到程序中?
- SetDlgItemInt 不会更改嵌入资源的编辑框
- 消费者和生产者问题的双重缓冲
- Klocwork Inside的资源泄漏
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- C++链接时间资源"allocation"而不定义
- 使用 Bazel 生成 QT 资源文件
- 编译器资源管理器和 GCC 具有不同的输出
- 使用 Bazel 编译 QT 应用程序时访问资源
- 根据需要声明资源,而不重复它们
- c++OpenGL多线程缓冲资源