为什么我的OpenGL上下文仍然返回null?

时间:2011-08-10 18:03:13

标签: android opengl-es null openglcontext

我正在尝试在opengl-es中为android创建一个上下文,我对它有点困惑。我已经在一个完全独立的类中初始化了我的上下文,而不是我的渲染器和我的启动活动。

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或者您认为问题出在其他地方?

1 个答案:

答案 0 :(得分:1)

我怀疑在你的代码中的任何地方调用了Context构造函数;如果它确实会在那时崩溃:

  • 您将gl转换为EGL11类型,但未实现该接口。
  • 您使用config中的EGLContext glContext = ((EGL11) gl).eglCreateContext(dpy, config, EGL11.EGL_NO_CONTEXT, attribList);成员,但未初始化(因为configs成员的条目未构建,因此为空)
  • gl在哪里分配?从Context类外部?
  • 您使用gl成员,然后在gl = (GL11)glContext.getGL()
  • 中重新分配
  • ...

简而言之,我不认为gl首先被分配了一个值,但如果没有剩下的代码则很难说清楚。