2012-04-18 61 views
1

在遊戲開始時我正在加載模型和東西,這需要一些時間,因此加載時會出現一個空白的黑屏。LWJGL中的OpenGL多線程(JAVA)

所以我想要做的是把所有的模型加載和顯示列表創建到一個線程,並使(呈現)另一個加載。現在,我瞭解到OpenGL在多線程中不能很好地工作,而OpenGL命令只能從一個線程中調用,我的原始線程解決方案不起作用。兩個線程都應該能夠調用OpenGL命令:渲染和顯示列表創建。

有沒有人知道(熟悉)一個簡單的解決方案呢? 與例子的一個很好的鏈接將做。

回答

2

您必須記住GL命令的解釋模型是客戶端服務器。也就是說,一個程序(客戶端)發佈命令,並且這些命令由GL(服務器)解釋和處理 - (從規格中獲取)。

所以你可以很容易地從兩個線程的命令發送 - 這是沒有問題的。但是通過玩多線程,如果你不知道自己在做什麼,就會帶來很大的蠕蟲病毒。

加載時,我只是做一個加載屏幕,並在加載一些資源時更新它。並不是所有的東西都需要一個超級完美的解決方案 - 特別是這不是一個小問題:)

+0

「這沒問題」 - 當我從一個新線程調用GL11.glGenLists時,我得到null異常。這是蠕蟲還是什麼? – Vladp 2012-04-18 22:03:57

+0

我從來沒有在java中做過OpenGL,我不明白爲什麼人們這樣做。我非常喜歡java的工作,但是對於OpenGL C++來說,這似乎是很自然的選擇 - 還有更多的資源。但請記住,您無法看到其他線程數據。 – Mads 2012-04-18 22:20:53

+0

我只能證明使用JOGL,但我沒有太多關於引用的問題(這是一個非常薄弱的​​綁定)。 OpenGL的好處當然是速度和可移植性,Java的好處是程序的業務邏輯通常更容易編寫。幾乎沒有什麼折衷,但正如JOGL實現者所提到的,在C/C++實現方面觀察到速度降低了10%。 – Quaternion 2012-04-18 23:19:31