2012-04-02 115 views
0

當我嘗試調用lwjgl中的任何GL15函數時,我得到一個NullPointerException異常。該問題是由GL15.class中的一個名爲caps的變量引起的。 Caps以下列方式加載:ContextCapabilities caps = GLContext.getCapabilities();。在此之後,帽子是空的。我想知道的是,如果這是我初始化lwjgl的方式的問題,或者是lwjgl本身的問題。我用下面的代碼初始化lwjgl:GL15在lwjgl中被破壞

Display.setDisplayMode(new DisplayMode(800, 600)); 
Display.create(); 
+2

那麼你是如何初始化它的?向我們展示一些代碼,我們喜歡代碼。 – talnicolas 2012-04-02 01:44:27

回答

1

看看代碼,看來capabilities對象存儲在非繼承的ThreadLocal中。這意味着在一個線程中初始化/設置的功能對象將不可用於其他線程。我懷疑這是你問題的根源。


順便說一句,GLContext class號稱是線程安全的,但我不認爲它是。如果你看一下源代碼getCapabilities()方法(在上面的鏈接頁面),它訪問稱爲fast_path_cache沒有任何同步的私有靜態,然後是指物體的領域。如果某個其他線程最近發生了變化......或者正在更改它所引用的變量或對象,那麼此線程可能會看到過時和不一致的值。

僅對執行更新的代碼進行同步是不夠的。 (它是不夠的,只是說的代碼是線程安全的在Javadoc ...)

如果有人誰使用這個庫要報告給維護人員,請隨時自由地這樣做。但請仔細檢查我的代碼閱讀第一!

+0

我想出了我的問題。我正在嘗試在執行窗口init之前使用gl代碼。 – jbills 2012-04-02 14:23:35