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) {
// ...
}
}
D'oh! Bạn đúng –