2012-04-02 8 views
0

Wenn ich versuche, eine GL15-Funktion in lwjgl aufrufen, bekomme ich eine NullPointerException. Das Problem wird durch eine Variable namens caps in GL15.class verursacht. Caps wird folgendermaßen geladen: ContextCapabilities caps = GLContext.getCapabilities();. Danach ist Caps jedoch null. Was ich wissen möchte, ist, ob dies ein Problem mit der Art ist, wie ich lwjgl initialisiert habe, oder ein Problem mit lwjgl selbst. Ich initialisieren lwjgl mit dem folgenden Code:GL15 ist in lwjgl gebrochen

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

Nun, wie initialisierst du es? Zeigen Sie uns Code, wir lieben Code. – talnicolas

Antwort

1

auf dem Code der Suche, scheint es, dass die Funktionen in einem nicht vererbten Thread gespeicherte Objekt wird. Das bedeutet, dass das in einem Thread initialisierte/gesetzte Funktionsobjekt für einen anderen Thread nicht verfügbar ist. Ich vermute, dass das die Ursache Ihrer Probleme ist.


Im Übrigen sind die GLContext class Ansprüche Thread-sicher zu sein, aber ich glaube nicht, es ist. Wenn Sie den Quellcode der getCapabilities()-Methode (in der verknüpften Seite oben) betrachten, greift es auf eine private statische fast_path_cache ohne jede Synchronisierung und verweist dann auf Felder des Objekts. Wenn sich ein anderer Thread kürzlich geändert hat ... oder gerade die Variable oder das Objekt, auf das er sich bezieht, ändert, sieht dieser Thread möglicherweise veraltete und inkonsistente Werte.

Es reicht nicht aus, nur den Code zu synchronisieren, der die Aktualisierungen durchführt. (Und es ist nicht ausreichend zu sagen, der Code ist thread-safe in der Javadoc ...)

Wenn jemand, der diese Bibliothek verwendet, dies zu den Betreuern melden möchten, zögern Sie nicht, dies zu tun. Aber bitte überprüfen Sie meine Lesung des Codes FIRST !!

+0

Ich habe mein Problem herausgefunden. Ich habe versucht, den Gl-Code zu verwenden, bevor ich das Fenster-Init ausführe. – jbills