Почему мой контекст OpenGL все еще возвращает ноль? - PullRequest
0 голосов
/ 10 августа 2011

Я пытаюсь создать контекст в 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 выбрасывается при сбое моего приложения).

Мой контекст инициализирован плохо, так что он возвращает ноль, или вы думаете, что проблема в другом месте?

1 Ответ

1 голос
/ 12 августа 2011

Я сомневаюсь, что конструктор 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 было присвоено значение в первую очередь, но трудно сказать без остального кода.

...