OpenGL和线程处理

4

众所周知,OpenGL驱动程序通常不支持多线程。但是,是否必须处理主线程(例如SDL的主线程)带来的GL上下文?如果一个线程被创建,并且从那时起只从那里分派OpenGL命令,那么它是安全的吗?还是必须限制在带来GL上下文的主线程中?


我认为OpenGL无法区分线程并选择[仅]创建上下文的线程,但是随着今天疯狂的硬件加速驱动程序的发展,谁知道呢?编辑:显然,即将在下面回答的人知道。 - aib
@aib:实际上,理解它的工作原理相当容易:上下文通常存储在线程本地存储中。 - Bahbar
1个回答

6

您需要将OpenGL上下文设置为所需使用的线程的当前上下文,而且一次只能在一个线程上设置一个上下文。因此,如果将上下文创建并从另一个线程中使用它,只要将其设置为当前上下文,就可以了。

对于使用OpenGL的多个线程,您需要多个OpenGL上下文,每个线程一个。并且您可以在OpenGL上下文之间共享资源。


现在我想知道SDL是否能够做到这一点。[目前,我已经让相关线程启动了GL上下文] [否则它会崩溃,这并不奇怪] - j riv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接