這是我爲了使2D繪圖工作而編寫的代碼。活動以及視圖和渲染器的設置都是正確的。我得到一個完全黑色的屏幕,但沒有多邊形。沒有畫。這是關於我逼瘋......無法讓opengl ES在Android上以2D繪製任何東西
public class OpenGLActivity extends Activity {
private GLSurfaceView surfaceView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
this.surfaceView = new OpenGLSurfaceView(this);
setContentView(this.surfaceView);
}
@Override
protected void onPause() {
super.onPause();
surfaceView.onPause();
}
@Override
protected void onResume() {
super.onResume();
surfaceView.onResume();
}
}
public class OpenGLSurfaceView extends GLSurfaceView {
private OpenGLSurfaceRenderer renderer;
public OpenGLSurfaceView(Context context) {
super(context);
this.renderer = new OpenGLSurfaceRenderer();
setRenderer(renderer);
}
}
public class OpenGLSurfaceRenderer implements Renderer {
private FloatBuffer vertexBuffer;
private float[] vertices = {
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f,
1.0f, 0.0f, 0.0f,
0.0f, 10.0f, 0.0f,
0.0f, 0.0f, 0.0f,
10.0f, 10.0f, 0.0f,
10.0f, 0.0f, 0.0f
};
public OpenGLSurfaceRenderer() {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(vertices.length * (Float.SIZE >> 3));
vertexBuffer = byteBuffer.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(0.0f, 0.0f, 0.0f, 1);
gl.glShadeModel(GL10.GL_FLAT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_LIGHTING);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
}
public void onDrawFrame(GL10 gl) {
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
gl.glTranslatef(0.0f, 0.0f, 0.5f);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
// Clear the projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
// Set up orthographic projection mode (2D drawing)
gl.glOrthof(0, width, height, 0, 0, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
}
您的活動代碼在哪裏? ...實例化GLSurfaceView並將其渲染器設置爲OpenGLSurfaceRenderer, – 2012-02-11 16:05:35
添加了我的活動和視圖代碼。 – 2012-02-11 16:10:39