2012-04-02 17 views
0

lwjglでGL15関数を呼び出そうとすると、NullPointerExceptionが発生します。この問題は、GL15.class内のcapsという変数によって引き起こされます。 Capsは次のようにロードされます: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のスレッドセーフであると言うだけでは不十分です...)

このライブラリを使用している誰かがこれをメンテナーに報告したい場合は、気軽に行ってください。しかし、コードの私の読書を最初に再確認してください!

+0

私は自分の問題を理解しました。ウィンドウのinitを実行する前にglコードを使用しようとしていました。 – jbills

関連する問題