Android Opengl ES: GLUtils.glTexImage2D, вызывающий GL_INVALID_ENUM

Я пытаюсь визуализировать простой текстурированный квад на Android 2.2, используя GLSurfaceView . Я загружаю изображение BMP (128x128) с BitmapFactory.decodeResource () - похоже, это работает. Но всякий раз, когда я пытаюсь поместить это растровое изображение в текстуру OpenGL, используя GLUtils.glTexImage2D , я получаю ошибку OpenGL: glGetError () возвращает 1280, GL_INVALID_ENUM . Что я делаю неправильно? Я загружаю изображение BMP (128x128) с BitmapFactory.decodeResource () - похоже, это работает. Но всякий раз, когда я пытаюсь поместить это растровое изображение в текстуру OpenGL, используя GLUtils.glTexImage2D , я получаю ошибку OpenGL: glGetError () возвращает 1280, GL_INVALID_ENUM . Что я делаю неправильно? Я загружаю изображение BMP (128x128) с BitmapFactory.decodeResource () - похоже, это работает. Но всякий раз, когда я пытаюсь поместить это растровое изображение в текстуру OpenGL, используя GLUtils.glTexImage2D , я получаю ошибку OpenGL: glGetError () возвращает 1280, GL_INVALID_ENUM . Что я делаю неправильно? Это код моего рендерера:

public class MyRenderer implements GLSurfaceView.Renderer {
    Context context;
    int texId;

    public MyRenderer(Context c) {
        this.context = c;
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glEnable(GL10.GL_TEXTURE_2D);
        this.texId = loadTexture(gl);       
    }

    int loadTexture(GL10 gl) {      
        int[] tmp = new int[1];
        gl.glGenTextures(1, tmp, 0);
        int id = tmp[0];

        Bitmap bmp = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.myimage);
        gl.glGetError();
        GLUtils.texImage2D(id, 0, bmp, 0);
        int err = gl.glGetError();
        if (err != 0) {
            // err == 1280, prints "invalid enum":
            System.err.println(GLU.gluErrorString(err));
        }

        return id;
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {      
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl, 0, width, height, 0);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();            
    }

    @Override
    public void onDrawFrame(GL10 gl) {
       // ...
    }
}
8
задан Marvin Killing 17 August 2010 в 10:39
поделиться