有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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


    顺便说一下,GLContext class声称是线程安全的,但我认为不是。如果查看源代码getCapabilities()方法(在上面的链接页面中),它将访问名为fast_path_cache的私有静态,而不进行任何同步,然后引用对象的字段。如果其他线程最近发生了更改。。。或者正在改变。。。变量或它引用的对象,则此线程可能会看到过时和不一致的值

    仅仅同步执行更新的代码是不够的。(在javadoc中仅仅说代码是线程安全的是不够的…)

    如果使用此库的人希望向维护人员报告此情况,请随时报告。但是请先仔细检查我对代码的理解