title: Why does my android openGL ES test renderer crash
body: <p>Once again I'm trying to get into openGL, but as usual I choke when passing around vertices/vertixes/whatever and every little detail can lead to disaster (wrong format, initialization not properly set up, where memory are saved, etc.).</p>
  
  <p>My main goal is to use openGL for 2D graphics to speed up performance compared to regular cpu drawing.</p>
  
  <p>Anyways, my openGL Renderer looks like this:</p>
  
  <pre><code>package com.derp.testopengl;
  
  
  import java.nio.Buffer;
  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.opengl.GLU;
  import android.opengl.GLSurfaceView.Renderer;
  
  public class OpenGLRenderer implements Renderer {
  
      public void onSurfaceCreated(GL10 gl, EGLConfig config) {
          // Set the background color to black ( rgba ).
          gl.glClearColor(1.0f, 0.0f, 0.0f, 0.5f);  // OpenGL docs.
          // Enable Smooth Shading, default not really needed.
          gl.glShadeModel(GL10.GL_SMOOTH);// OpenGL docs.
          // Depth buffer setup.
          gl.glClearDepthf(1.0f);// OpenGL docs.
          // Enables depth testing.
          gl.glEnable(GL10.GL_DEPTH_TEST);// OpenGL docs.
          // The type of depth testing to do.
          gl.glDepthFunc(GL10.GL_LEQUAL);// OpenGL docs.
          // Really nice perspective calculations.
          gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, // OpenGL docs.
                            GL10.GL_NICEST);
      }
  
  
      public void onDrawFrame(GL10 gl) {
          // Clears the screen and depth buffer.
          gl.glClear(GL10.GL_COLOR_BUFFER_BIT | // OpenGL docs.
                             GL10.GL_DEPTH_BUFFER_BIT);
  
          // Define the points of my triangle
          float floatbuff[] = {
                  1.0f,0.0f,0.0f,
                  0.0f,1.0f,0.0f,
                  -1.0f,0.0f,0.0f
                  };
          // Create memory on the heap
          ByteBuffer vbb = ByteBuffer.allocateDirect(3 * 3 * 4);
          vbb.order(ByteOrder.nativeOrder());
          FloatBuffer vertices = vbb.asFloatBuffer();
  
          // Insert points into floatbuffer
          vertices.put(floatbuff);
          // Reset position
          vertices.position(0);
  
          gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  
          // Change color to green
          gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
  
          // Pass vertices to openGL
          gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertices);
  
          // Draw 'em
          gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
  
          gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
      }
  
  
      public void onSurfaceChanged(GL10 gl, int width, int height) {
          // Sets the current view port to the new size.
          gl.glViewport(0, 0, width, height);// OpenGL docs.
          // Select the projection matrix
          gl.glMatrixMode(GL10.GL_PROJECTION);// OpenGL docs.
          // Reset the projection matrix
          gl.glLoadIdentity();// OpenGL docs.
  
          // Should give a 2D coordinate system that responds to the screen
          gl.glOrthof(0.0f, width, 0.0f, height, 0, 200.0f);
  
          gl.glMatrixMode(GL10.GL_MODELVIEW); 
          gl.glLoadIdentity();// OpenGL docs.
      }
  }
  </code></pre>
  
  <p>It currently crash on the line:</p>
  
  <pre><code>gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
  </code></pre>
  
  <p>With an IndexOutOfBoundsException, but I'm sure there are more problems with the code.</p>
  
  <p>Thankful for any help!</p>