I have written a game using the Android 2d graphics stuff - like canvas.drawRect() using the 2d shapes from ShapeDrawable package. However this runs VERY slowly - so wanted to transfer it over to OpenGL.
I have written a demo which draws a square to the screen - but I cannot work out how to position it - and how to set its dimensions. Using the android ShapeDrawable, i would do set size - setPosition - but obviously OpenGL is much lower level than this.
Taking this into account - here is my "SuperBlock" - open gl Square. Can anybody suggest to me any code I could add to this class in order to achieve setting different sizes - positions on screen.
Thanks
Using java Syntax Highlighting
- package com.andy.td.GameMechanics;
- import java.nio.ByteBuffer;
- import java.nio.ByteOrder;
- import java.nio.FloatBuffer;
- import java.nio.ShortBuffer;
- import javax.microedition.khronos.opengles.GL10;
- public class SuperBlock {
- // Our vertices.
- private float vertices[] = {
- -1.0f, 1.0f, 0.0f, // 0, Top Left
- -1.0f, -1.0f, 0.0f, // 1, Bottom Left
- 1.0f, -1.0f, 0.0f, // 2, Bottom Right
- 1.0f, 1.0f, 0.0f, // 3, Top Right
- };
- // The order we like to connect them.
- private short[] indices = { 0, 1, 2, 0, 2, 3 };
- // Our vertex buffer.
- private FloatBuffer vertexBuffer;
- // Our index buffer.
- private ShortBuffer indexBuffer;
- public SuperBlock() {
- // a float is 4 bytes, therefore we multiply the number if
- // vertices with 4.
- ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
- vbb.order(ByteOrder.nativeOrder());
- vertexBuffer = vbb.asFloatBuffer();
- vertexBuffer.put(vertices);
- vertexBuffer.position(0);
- // short is 2 bytes, therefore we multiply the number if
- // vertices with 2.
- ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
- ibb.order(ByteOrder.nativeOrder());
- indexBuffer = ibb.asShortBuffer();
- indexBuffer.put(indices);
- indexBuffer.position(0);
- }
- /**
- * This function draws our square on screen.
- * @param gl
- */
- public void draw(GL10 gl) {
- // Counter-clockwise winding.
- gl.glFrontFace(GL10.GL_CCW);
- // Enable face culling.
- gl.glEnable(GL10.GL_CULL_FACE);
- // What faces to remove with the face culling.
- gl.glCullFace(GL10.GL_BACK);
- // Enabled the vertices buffer for writing and to be used during
- // rendering.
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
- // Specifies the location and data format of an array of vertex
- // coordinates to use when rendering.
- gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vertexBuffer);
- gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,
- GL10.GL_UNSIGNED_SHORT, indexBuffer);
- // Disable the vertices buffer.
- gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
- // Disable face culling.
- gl.glDisable(GL10.GL_CULL_FACE);
- }
- }
Parsed in 0.039 seconds, using GeSHi 1.0.8.4



