tow*_*120 2 c++ opengl multithreading
如果我计划在OpenGL中使用多线程,我应该为每个上下文分别使用缓冲区(来自glGenBuffers)吗?
我对OpenGL多线程还不太了解(现在我在"单一"线程中工作).我需要知道我是否可以共享已经推送到Video Memory的缓冲区(使用glBufferData/glBufferSubData),或者我必须保留另一个线程的缓冲区副本.
Vaos 不共享,因此您需要为每个上下文的每个对象生成一个新的 vao,否则在删除/创建新对象时,行为将变得不可预测和不正确。这可能是错误的主要来源。Vbos 可以共享,因此每个对象只需要一个 vbo。
您不希望在多个线程中使用多个上下文.你真的没有.
虽然这听起来是个好主意,但在实践中,muli-context-multi-thread在驱动程序端是复杂,麻烦和严重支持的,并且它只是略微改善(甚至可能降低!)性能.
你真正想要的是只有一个线程与OpenGL交谈(显然有一个上下文),映射缓冲区,并将内存指针传递给另一个线程,最好使用3个缓冲区(3个大小缓冲区的3个子缓冲区)和不可变存储和持久映射(如果可用).
那,并进行间接渲染调用,其中第二个线程提供间接调用读取的缓冲区.
关于持久映射主题的更多信息:特别参见本GDC2014演示文稿的幻灯片22-25 ,它基本上是Cass Everitt 2013年SIGGRAPH演讲的翻版.
另见Everitt最初的演讲:超越移植.
归档时间: |
|
查看次数: |
3407 次 |
最近记录: |