有些图书馆使用多线程工作。还有一些线程安全的库 - 对象支持在多个线程中运行的用法。
OpenGL怎么样?它是多线程的吗?它是线程安全吗?
答案 0 :(得分:6)
如果取决于“多线程”的含义。
如果您正在考虑C ++功能(共享内存,使用锁等),那么不,OpenGL不会那样工作。但这并不意味着你不能使用线程。你可以特别小心。
需要注意的主要事项是背景。你可以有几个上下文。您可以将任何线程的任何上下文设置为当前,但只能为线程设置一个上下文,而不能为同一个线程设置两个上下文。
使用共享上下文可以为多线程提供一些优势。他们共享一些资源,如纹理和VBO。例如,您将 ctx1 设置为线程的当前值,并在该线程中使用gl-commands将纹理更新为GPU。更新完成后,该纹理可用于共享上下文 ctx2 在其他线程中设置为当前。 OGL wiki讲述了这个here和here。
就是说,问题是“为什么我需要多线程?”常见的答案是“让事情更快地发生”。重点是GPU将逐步绘制(当然使用其所有并行性),但不会同时处理两个绘制命令。此外,将上下文设置为当前具有轻微的性能损失。
您可能正在寻找的是在渲染时将数据发送到GPU 。您可以像我之前写的那样使用共享上下文。但是还有其他技术,如streaming,你可以在OpenGL Insights book第28章“异步缓冲区转移”中阅读更多内容。