天天看點

安卓GLSurfaceView使用簡單範例

在AndroidManifest.xml要設定:

<uses-feature    android:glEsVersion="0x00020000" android:required="true"   />      

代碼:

package net.quantum6.camerafps;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
 
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
 
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.AttributeSet;
 
 
public class GLSurfaceViewRedSquire extends GLSurfaceView {
    public GLSurfaceViewRedSquire(Context context) {
        this(context, null);
    }
 
    public GLSurfaceViewRedSquire(Context context, AttributeSet attrs) {
        super(context, attrs);
 
        setRenderer(new MyRender());
    }
 
    private static class MyRender implements Renderer {
        private FloatBuffer mVB;
 
        MyRender() {
            float coords[] = {
                    -0.5f,  0.5f, 0.0f,
                    -0.5f, -0.5f, 0.0f,
                     0.5f, -0.5f, 0.0f,
                     0.5f, -0.5f, 0.0f,
                     0.5f,  0.5f, 0.0f,
                    -0.5f,  0.5f, 0.0f
            };
 
            ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4);
            vbb.order(ByteOrder.nativeOrder());
            mVB = vbb.asFloatBuffer();
            mVB.put(coords);
            mVB.position(0);
        }
 
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        }
 
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            gl.glViewport(0, 0, width, height);
        }
 
        @Override
        public void onDrawFrame(GL10 gl) {
            gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
            gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
            gl.glColor4f   (1.0f, 0.0f, 0.0f, 1.0f);
            gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVB);
            gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);
        }
    }
}      

繼續閱讀