我在一台机器上运行 3 个基于 JUCE 的多线程 OpenGL 应用程序实例 - 每个实例都连接到单独的 X 显示器。主应用程序线程调用XInitThreads
后跟XOpenDisplay
相应的显示。然后将不同的线程用于主渲染循环。应用程序的 3 个实例依次初始化,以便在下一个启动时完成图形设置。
在 80% 的情况下,一切都可以正常启动,但有时在应用程序的第二个和/或第三个实例中,第 4 次调用glXMakeCurrent
(这也是第一个由与初始化连接的线程不同的线程进行的调用)永远不会回来。X 线程已初始化,线程正在使用锁,并且在调用glXMakeCurrent
X 显示器之前通过锁定XLockDisplay
(并在调用返回后解锁)。
我确保每个应用程序都使用正确的显示和上下文。如果它纯粹与访问同一显示连接的多个线程的问题有关,那么第一个实例遇到此问题的可能性应该相同 - 但它从来没有遇到过。
任何想法为什么glXMakeCurrent
不能返回,即使它拥有对其 X 显示器的独占访问权限?