如果我计划在 OpenGL 中使用多线程,我是否应该为每个上下文设置单独的缓冲区(来自 glGenBuffers)?
我还不太了解 OpenGL 多线程(目前我在“单”线程中工作)。我需要知道我是否可以共享已经推送到视频内存的缓冲区(使用 glBufferData/glBufferSubData),或者我必须为另一个线程保留缓冲区的拷贝。
最佳答案
您不想在多个线程中使用多个上下文。你真的不知道。
虽然这听起来是个好主意,但在实践中,多上下文多线程很复杂、麻烦,并且在驱动程序方面的支持很差,而且它只能略微提高(甚至可能降低!)性能。
您真正想要的是只有一个线程与 OpenGL 对话(显然是一个上下文),映射一个缓冲区,并将内存指针传递给另一个线程,最好使用 3 个缓冲区(3 3 倍大小缓冲区的子缓冲区)与 immutable storage and persistent mapping ,如果可用的话。
那,并进行间接渲染调用,其中第二个线程提供间接调用从中读取的缓冲区。
有关持久映射主题的更多信息:请参阅本 GDC2014 presentation 的特别幻灯片 22-25 ,这基本上是 Cass Everitt 2013 年 SIGGRAPH 演讲的翻版。
另见 Everitt 的原始演讲:Beyond porting .
关于c++ - OpenGL 多线程/共享上下文和 glGenBuffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23765371/