2012-04-02 3 views
0

Когда я пытаюсь вызвать любую функцию GL15 в lwjgl, я получаю исключение NullPointerException. Проблема вызвана переменной cap в классе GL15.class. Крышки загружаются следующим образом: ContextCapabilities caps = GLContext.getCapabilities();. После этого кепки имеют значение null. Я хочу знать, если это проблема с тем, как я инициализировал lwjgl или проблему с самим lwjgl. Я инициализировать LWJGL со следующим кодом:GL15 разбит на lwjgl

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

Ну, как вы его инициализировали? Покажите нам какой-то код, мы любим код. – talnicolas

ответ

1

Глядя на коде, оказывается, что возможности объекта хранятся в Ненаследуемых ThreadLocal. Это означает, что объект возможностей, инициализированный/заданный в одном потоке, не будет доступен для другого потока. Я подозреваю, что это основная причина ваших проблем.


Кстати, GLContext class претензии к поточно-, но я не думаю, что это. Если вы посмотрите на исходный код getCapabilities() (на связанной странице выше), он обращается к частному статическому с именем fast_path_cache без какой-либо синхронизации, а затем относится к полям объекта. Если какой-то другой поток недавно изменился ... или находится в процессе изменения ... переменной или объекта, на который он ссылается, тогда этот поток может видеть устаревшие и непоследовательные значения.

Недостаточно просто синхронизировать код, который выполняет обновления. (И недостаточно просто сказать, что код является потокобезопасным в javadoc ...)

Если кто-то, кто использует эту библиотеку, хочет сообщить об этом сопровождающим, пожалуйста, не стесняйтесь это делать. Но ПОЖАЛУЙСТА, дважды проверьте мое чтение кода FIRST !!

+0

Я понял свою проблему. Я пытался использовать gl-код перед выполнением окна init. – jbills

Смежные вопросы