我在一臺機器上運行3個基於JUCE的多線程OpenGL應用程序 - 每個實例都連接到一個單獨的X顯示器。主應用程序線程調用XInitThreads
,然後XOpenDisplay
以適當的顯示。一個不同的線程然後用於主渲染循環。應用程序的3個實例將相互初始化,以便在下一個啓動時完成圖形設置。glXMakeCurrent永遠不會返回多個多線程的linux opengl應用程序
在80%的情況下,一切都開始正常,但有時在第二次和/或第三次申請中第四次致電glXMakeCurrent
(這也是第一次由不同於其上的線程連接初始化)永不返回。 X線程已經初始化,線程正在使用鎖,並且在呼叫glXMakeCurrent
之前X顯示器通過XLockDisplay
鎖定(並在呼叫返回後解鎖)。
我確保每個應用程序都使用正確的顯示&上下文。如果它純粹與多線程訪問相同顯示連接的問題有關,那麼第一個實例遇到此問題的可能性應該相同 - 但它從來不會這樣做。
任何想法爲什麼glXMakeCurrent
可能不會返回,即使它可以獨佔訪問其X顯示器?