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) {
// ...
}
}
D' 오! 네가 옳아 –