GL15在lwjgl中被破坏

GL15在lwjgl中被破坏

问题描述:

当我尝试调用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

看看代码,看来capabilities对象存储在非继承的ThreadLocal中。这意味着在一个线程中初始化/设置的功能对象将不可用于其他线程。我怀疑这是你问题的根源。


顺便说一句,GLContext class号称是线程安全的,但我不认为它是。如果你看一下源代码getCapabilities()方法(在上面的链接页面),它访问称为fast_path_cache没有任何同步的私有静态,然后是指物体的领域。如果某个其他线程最近发生了变化......或者正在更改它所引用的变量或对象,那么此线程可能会看到过时和不一致的值。

仅对执行更新的代码进行同步是不够的。 (它是不够的,只是说的代码是线程安全的在Javadoc ...)

如果有人谁使用这个库要报告给维护人员,请随时*地这样做。但请仔细检查我的代码阅读第一!

+0

我想出了我的问题。我正在尝试在执行窗口init之前使用gl代码。 – jbills 2012-04-02 14:23:35