【发布时间】:2012-05-01 07:13:20
【问题描述】:
我在一台机器上运行 3 个基于 JUCE 的多线程 OpenGL 应用程序实例 - 每个实例都连接到单独的 X 显示器。主应用程序线程调用XInitThreads 后跟XOpenDisplay 到适当的显示。然后将不同的线程用于主渲染循环。应用程序的 3 个实例依次初始化,以便在下一个启动时完成图形设置。
在 80% 的情况下,一切都可以正常启动,但有时在应用程序的第二个和/或第三个实例中,第四次调用 glXMakeCurrent(这也是第一次由与连接被初始化的)永远不会返回。 X 线程已初始化,线程正在使用锁,并且在调用 glXMakeCurrent 之前,X 显示器通过 XLockDisplay 锁定(并在调用返回后解锁)。
我确保每个应用程序都使用正确的显示和上下文。如果它纯粹与多个线程访问同一个显示连接的问题有关,那么第一个实例遇到这个问题的可能性应该是一样的——但它从来没有遇到过。
知道为什么glXMakeCurrent 可能不会返回,即使它拥有对其 X 显示器的独占访问权限?
【问题讨论】:
标签: c++ linux opengl xlib juce