0

Android用のopengl-esでコンテキストを作成しようとしていますが、少し混乱しています。レンダラーや起動アクティビティとは完全に別のクラスでコンテキストを初期化しました。

import javax.microedition.khronos.egl.EGL11;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;
import javax.microedition.khronos.opengles.GL11;

public class Context {

public static GL11 gl;
EGLConfig[] configs = new EGLConfig[1];
EGLConfig config = configs[0];
EGLDisplay dpy;
int attribList;
EGLSurface surf;
static EGLContext glContext;


public Context() {

    int attribList [] =
    {
     EGL11.EGL_DEPTH_SIZE, 15,  // z-buffer
     EGL11.EGL_NONE
    }; 
    dpy =  ((EGL11) gl).eglGetDisplay(EGL11.EGL_DEFAULT_DISPLAY);
    EGLContext glContext = ((EGL11) gl).eglCreateContext(dpy, config, EGL11.EGL_NO_CONTEXT, attribList);
    gl = (GL11)glContext.getGL();


}

}

私のアプリは、起動時に画面に 2 つの正方形を描画する単純なものです。一方はランダムな方向に移動し、もう一方はその場にとどまって回転します。理論的には、ユーザーは画面に触れることができ、固定された正方形は画面に触れた場所に移動する必要があります。しかし、UnProject メソッド (座標を変換する必要がある) が呼び出されると、おそらく私のコンテキストが原因で、アプリがクラッシュします。

GL11 gl

(これは UnProject クラスの引数です) null を返します (アプリがクラッシュすると NullPointerException がスローされます)。

コンテキストが正しく初期化されていないため、null が返されますか、それとも問題は別の場所にあると思いますか?

4

1 に答える 1

1

Context コンストラクターがコードのどこかで呼び出されるとは思えません。もしそうなら、その時点でクラッシュします:

  • そのインターフェイスを実装していませんがgl、型にキャストします。EGL11
  • configでメンバーを使用しますが、EGLContext glContext = ((EGL11) gl).eglCreateContext(dpy, config, EGL11.EGL_NO_CONTEXT, attribList);初期化されていません (メンバーのエントリがconfigs構築されていないため、null です) 。
  • どこにgl配属されますか?Context クラスの外から?
  • glメンバーを使用してから、 gl = (GL11)glContext.getGL()?
  • ...

要するに、最初から値が割り当てられていたとは思いませんglが、残りのコードがないとわかりにくいのです。

于 2011-08-12T03:22:27.743 に答える