OpenGL是多线程的吗?

时间:2017-09-13 15:52:16

标签: multithreading opengl thread-safety

有些图书馆使用多线程工作。还有一些线程安全的库 - 对象支持在多个线程中运行的用法。

OpenGL怎么样?它是多线程的吗?它是线程安全吗?

1 个答案:

答案 0 :(得分:6)

如果取决于“多线程”的含义。

如果您正在考虑C ++功能(共享内存,使用锁等),那么不,OpenGL不会那样工作。但这并不意味着你不能使用线程。你可以特别小心。

需要注意的主要事项是背景。你可以有几个上下文。您可以将任何线程的任何上下文设置为当前,但只能为线程设置一个上下文,而不能为同一个线程设置两个上下文。

使用共享上下文可以为多线程提供一些优势。他们共享一些资源,如纹理和VBO。例如,您将 ctx1 设置为线程的当前值,并在该线程中使用gl-commands将纹理更新为GPU。更新完成后,该纹理可用于共享上下文 ctx2 在其他线程中设置为当前。 OGL wiki讲述了这个herehere

就是说,问题是“为什么我需要多线程?”常见的答案是“让事情更快地发生”。重点是GPU将逐步绘制(当然使用其所有并行性),但不会同时处理两个绘制命令。此外,将上下文设置为当前具有轻微的性能损失。

您可能正在寻找的是在渲染时将数据发送到GPU 。您可以像我之前写的那样使用共享上下文。但是还有其他技术,如streaming,你可以在OpenGL Insights book第28章“异步缓冲区转移”中阅读更多内容。