java GL15在lwjgl中被破坏
当我试图调用lwjgl中的任何GL15函数时,我会得到一个NullPointerException。这个问题是由GL15中一个名为caps的变量引起的。班Caps的加载方式如下:ContextCapabilities caps = GLContext.getCapabilities();
。但在此之后,caps为空。我想知道的是,这是我初始化lwjgl的方式的问题,还是lwjgl本身的问题。我使用以下代码初始化lwjgl:
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
# 1 楼答案
查看代码,capabilities对象似乎存储在非继承的ThreadLocal中。这意味着在一个线程中初始化/设置的功能对象将不可用于其他线程。我怀疑这是你问题的根本原因
顺便说一下,GLContext class声称是线程安全的,但我认为不是。如果查看源代码
getCapabilities()
方法(在上面的链接页面中),它将访问名为fast_path_cache
的私有静态,而不进行任何同步,然后引用对象的字段。如果其他线程最近发生了更改。。。或者正在改变。。。变量或它引用的对象,则此线程可能会看到过时和不一致的值仅仅同步执行更新的代码是不够的。(在javadoc中仅仅说代码是线程安全的是不够的…)
如果使用此库的人希望向维护人员报告此情况,请随时报告。但是请先仔细检查我对代码的理解