1 package org.pileus.spades;
3 import java.nio.ByteBuffer;
4 import java.nio.ByteOrder;
5 import java.nio.FloatBuffer;
7 import javax.microedition.khronos.egl.EGLConfig;
8 import javax.microedition.khronos.opengles.GL10;
10 import android.opengl.GLES20;
11 import android.opengl.GLSurfaceView;
13 import android.content.Context;
15 public class Cards extends GLSurfaceView implements GLSurfaceView.Renderer
18 private final String vertSource =
19 "attribute vec4 vPosition;" +
21 " gl_Position = vPosition;" +
24 private final String fragSource =
25 "precision mediump float;" +
26 "uniform vec4 vColor;" +
28 " gl_FragColor = vColor;" +
32 private final float coords[] = {
38 private final float color[] = { 1, 0, 0, 1 };
42 private FloatBuffer vertBuf;
45 private int loadShader(int type, String code)
47 int shader = GLES20.glCreateShader(type);
48 GLES20.glShaderSource(shader, code);
49 GLES20.glCompileShader(shader);
53 /* GLSurfaceView Methods */
54 public Cards(Context context)
57 Os.debug("Cards create");
59 this.setEGLContextClientVersion(2);
60 this.setRenderer(this);
61 this.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
64 /* Renderer methods */
66 public void onSurfaceCreated(GL10 unused, EGLConfig config)
68 /* Initialize shaders */
69 int vertShader = this.loadShader(GLES20.GL_VERTEX_SHADER, vertSource);
70 int fragShader = this.loadShader(GLES20.GL_FRAGMENT_SHADER, fragSource);
72 /* Link shaders into an OpenGL program */
73 this.program = GLES20.glCreateProgram();
74 GLES20.glAttachShader(program, vertShader);
75 GLES20.glAttachShader(program, fragShader);
76 GLES20.glLinkProgram(program);
78 /* Create Vertex Array */
79 ByteBuffer byteBuf = ByteBuffer.allocateDirect(coords.length * 4);
80 byteBuf.order(ByteOrder.nativeOrder());
82 this.vertBuf = byteBuf.asFloatBuffer();
83 this.vertBuf.put(coords);
84 this.vertBuf.position(0);
88 public void onDrawFrame(GL10 unused)
90 /* Turn on the program */
91 GLES20.glUseProgram(program);
92 int posHandle = GLES20.glGetAttribLocation(program, "vPosition");
93 int clrHandle = GLES20.glGetUniformLocation(program, "vColor");
96 GLES20.glClearColor(0, 0, 0, 1);
97 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
98 GLES20.glEnableVertexAttribArray(posHandle);
99 GLES20.glVertexAttribPointer(posHandle, 3, GLES20.GL_FLOAT, false, 3*4, vertBuf);
100 GLES20.glUniform4fv(clrHandle, 1, color, 0);
101 GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
102 GLES20.glDisableVertexAttribArray(posHandle);
106 public void onSurfaceChanged(GL10 unused, int width, int height)
108 GLES20.glViewport(0, 0, width, height);