2010-08-17 1 views
7

Tôi đang cố gắng hiển thị một kết cấu quad đơn giản trên Android 2.2 bằng cách sử dụng GLSurfaceView. Tôi đang tải một hình ảnh BMP (128x128) với BitmapFactory.decodeResource() - điều này dường như hoạt động. Nhưng bất cứ khi nào tôi cố gắng đặt bitmap này vào một kết cấu OpenGL bằng cách sử dụng GLUtils.glTexImage2D Tôi nhận được lỗi OpenGL: glGetError() trả về 1280, GL_INVALID_ENUM. Tôi đang làm gì sai? Đây là mã cho Renderer của tôi:Android Opengl ES: GLUtils.glTexImage2D gây 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) { 
     // ... 
    } 
} 

Trả lời

4

Nó có lẽ nên được một cái gì đó như:

gl.glBindTexture(GL10.GL_TEXTURE_2D, id); 
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0); 
+0

D'oh! Bạn đúng –