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();


}

}

我的应用程序很简单,它在启动时在屏幕上绘制两个正方形,一个随机方向移动,而另一个保持原地并旋转。理论上用户应该能够触摸屏幕并且静止的方块应该移动到屏幕上触摸的位置。但是当我的 UnProject 方法(我需要翻译坐标)被调用时,我的应用程序崩溃了,可能是因为我的上下文

GL11 gl

(这是我的 UnProject 类的参数)返回 null(当我的应用程序崩溃时抛出 NullPointerException)。

我的上下文是否初始化不当,以至于它返回 null 或者您认为问题出在其他地方?

4

1 回答 1

1

我怀疑 Context 构造函数是否会在您的代码中的任何位置被调用;如果它这样做了,它会在那时崩溃:

  • gl转换为一个EGL11类型,而它没有实现该接口。
  • 您使用 in 中的config成员EGLContext glContext = ((EGL11) gl).eglCreateContext(dpy, config, EGL11.EGL_NO_CONTEXT, attribList);,而它尚未初始化(它为 null,因为您的成员的条目configs未构造)
  • gl分配在哪里?从上下文类之外?
  • 您使用该gl成员,然后重新分配它gl = (GL11)glContext.getGL()
  • ...

简而言之,我不认为gl一开始就被分配了一个值,但是如果没有其余的代码就很难说清楚。

于 2011-08-12T03:22:27.743 回答