我的应用程序有两个线程:A和B。A是主线程,B是我的视频线程。 视频线程具有初始化的OpenGL上下文,其中OpenGL函数可以正常工作。 然而,当我从线程A调用OpenGL函数时,该函数会失败,并显示1282错误(GL_INVALID_OPERATION)。 是否可能从我的主线程(A)调用OpenGL函数?
我的应用程序有两个线程:A和B。A是主线程,B是我的视频线程。 视频线程具有初始化的OpenGL上下文,其中OpenGL函数可以正常工作。 然而,当我从线程A调用OpenGL函数时,该函数会失败,并显示1282错误(GL_INVALID_OPERATION)。 是否可能从我的主线程(A)调用OpenGL函数?
除非你正在进行实际的缓慢内容后台渲染,否则这可能不会使你的性能产生差异。
在 Windows 上,open gl 上下文是针对每个线程的。确保在尝试调用 open gl 函数之前从工作线程中调用 wglMakeCurrent。
Open GL 不是线程安全的。如果你试图在多个线程上将同一上下文变为当前上下文,它不会阻止你,而是会导致异常。
GL不是线程安全的,因此您不能从2个不同的线程调用GL函数。您必须使用互斥锁来保护每个gl部分,这会消除您所期望的任何性能提升,并增加互斥锁定的开销和可能需要的上下文切换。