我正在尝试在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或者您认为问题出在其他地方?
答案 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
首先被分配了一个值,但如果没有剩下的代码则很难说清楚。