Back to project page OpenGL-Sample-Android.
The source code is released under:
GNU General Public License
If you think the Android project OpenGL-Sample-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.soft.wz.sample.primitives; /*from www .j ava 2 s . c om*/ import android.opengl.GLES20; import com.soft.wz.sample.utils.GlHelper; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.ShortBuffer; public class Cube implements Shape { private final String vertexShaderCode = "uniform mat4 mvpMatrix;" + "attribute vec4 vPosition;" + "void main() {" + " gl_Position = mvpMatrix * vPosition;" + "}"; private final String fragmentShaderCode = "precision mediump float;" + "uniform vec4 vColor;" + "void main() {" + " gl_FragColor = vColor;" + "}"; private final FloatBuffer vertexBuffer; private final ShortBuffer drawListBuffer; private final int program; private int positionHandle; private int colorHandle; private int mvpMatrixHandle; // number of coordinates per vertex in this array private static final int COORDINATES_PER_VERTEX = 3; private static final float SQUARE_COORDINATES[] = { -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f }; private final static short INDICES[] = { 0, 4, 5, 0, 5, 1, 1, 5, 6, 1, 6, 2, 2, 6, 7, 2, 7, 3, 3, 7, 4, 3, 4, 0, 4, 7, 6, 4, 6, 5, 3, 0, 1, 3, 1, 2 }; private final int vertexStride = COORDINATES_PER_VERTEX * 4; public Cube() { ByteBuffer bb = ByteBuffer.allocateDirect(SQUARE_COORDINATES.length * 4); bb.order(ByteOrder.nativeOrder()); vertexBuffer = bb.asFloatBuffer(); vertexBuffer.put(SQUARE_COORDINATES); vertexBuffer.position(0); ByteBuffer dlb = ByteBuffer.allocateDirect( INDICES.length * 2); dlb.order(ByteOrder.nativeOrder()); drawListBuffer = dlb.asShortBuffer(); drawListBuffer.put(INDICES); drawListBuffer.position(0); int vertexShader = GlHelper.loadShader( GLES20.GL_VERTEX_SHADER, vertexShaderCode); int fragmentShader = GlHelper.loadShader( GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); program = GLES20.glCreateProgram(); GLES20.glAttachShader(program, vertexShader); GLES20.glAttachShader(program, fragmentShader); GLES20.glLinkProgram(program); } public void draw(float[] mvpMatrix) { GLES20.glUseProgram(program); positionHandle = GLES20.glGetAttribLocation(program, "vPosition"); GLES20.glEnableVertexAttribArray(positionHandle); GLES20.glVertexAttribPointer( positionHandle, COORDINATES_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); colorHandle = GLES20.glGetUniformLocation(program, "vColor"); GLES20.glUniform4fv(colorHandle, 1, Colors.VIOLET, 0); mvpMatrixHandle = GLES20.glGetUniformLocation(program, "mvpMatrix"); GlHelper.checkGlError("glGetUniformLocation"); GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, mvpMatrix, 0); GlHelper.checkGlError("glUniformMatrix4fv"); GLES20.glDrawElements(GLES20.GL_TRIANGLES, INDICES.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer); GLES20.glUniform4fv(colorHandle, 1, Colors.LIGHTLY_BLUE, 0); GLES20.glDrawElements( GLES20.GL_LINE_STRIP, INDICES.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer); GLES20.glDisableVertexAttribArray(positionHandle); } }