Square.java :  » Game » gridgame » com » game » grid » Android Open Source

Android Open Source » Game » gridgame 
gridgame » com » game » grid » Square.java
package com.game.grid;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;

import javax.microedition.khronos.opengles.GL10;

public class Square {
  // Our vertices.
  private int mSize = 0;
  private float vertices[] = {
        0,  0, 0f,  // 0, Top Left
        0, 1f, 0f,  // 1, Bottom Left
        1f, 1f, 0f,  // 2, Bottom Right
        1f,  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 Square(int w, int h) {
    mSize = h;
    vertices[4] = h;
    vertices[7] = h;
    vertices[6] = w;
    vertices[9] = w;
    // 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); // OpenGL docs
    // Enable face culling.
    gl.glEnable(GL10.GL_CULL_FACE); // OpenGL docs
    // What faces to remove with the face culling.
    gl.glCullFace(GL10.GL_BACK); // OpenGL docs
    // Enabled the vertices buffer for writing and to be used during
    // rendering.
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);// OpenGL docs.
    // Specifies the location and data format of an array of vertex
    // coordinates to use when rendering.
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, // OpenGL docs
                                 vertexBuffer);

    
    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,// OpenGL docs
          GL10.GL_UNSIGNED_SHORT, indexBuffer);
    
    // Disable the vertices buffer.
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); // OpenGL docs
    // Disable face culling.
    gl.glDisable(GL10.GL_CULL_FACE); // OpenGL docs
    
    
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.