2010-08-17 4 views
7

GLSurfaceView을 사용하여 Android 2.2에서 간단한 질감 쿼드를 렌더링하려고합니다. BitmapFactory.decodeResource()과 함께 BMP 이미지 (128x128)를로드 중입니다. 작동하는 것 같습니다. 그러나 언제든지이 비트 맵을 GLUtils.glTexImage2D을 사용하는 OpenGL 텍스처에 넣으려고하면 OpenGL 오류가 발생합니다. glGetError()은 1280, GL_INVALID_ENUM을 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Android OpenGL ES : GL_INVALID_ENUM을 (를) 일으키는 GLUtils.glTexImage2D

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) { 
     // ... 
    } 
} 

답변

4

그것은 아마 뭔가 같이해야한다 : 이 내 렌더러 코드입니다

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

D' 오! 네가 옳아 –