这个问题通常是由于OpenGL ES上下文没有正确地设置或使用错误的GLSurfaceView引起的。下面是一个示例代码,可确保正确设置OpenGL ES上下文和GLSurfaceView:
public class MyGLSurfaceView extends GLSurfaceView {
private final MyGLRenderer mRenderer;
public MyGLSurfaceView(Context context) {
super(context);
// Create an OpenGL ES 2.0 context
setEGLContextClientVersion(2);
mRenderer = new MyGLRenderer();
// Set the Renderer for drawing on the GLSurfaceView
setRenderer(mRenderer);
// Render the view only when there is a change in the drawing data
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
}
然后,在你的GLRenderer中,添加以下几行代码:
public class MyGLRenderer implements GLSurfaceView.Renderer {
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// Set the background clear color
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// Set the viewport size
GLES20.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
// Clear the screen
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// Draw your geometry here..
}
}
在这个示例代码中,我们明确地调用GLSurfaceView的setEGLContextClientVersion(2),告诉Android使用OpenGL ES 2.0。然后,我们在GLRenderer的onSurfaceCreated方法中设置背景颜色,确保在第一帧绘制之前清除屏幕。最后,在onDrawFrame方法中,我们调用glClear方法将屏幕清除为我们定义的背景颜色,并在此之后绘制我们的几何