Linked Questions

Popular Questions

Why does my android openGL ES test renderer crash

Asked by At

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.).

My main goal is to use openGL for 2D graphics to speed up performance compared to regular cpu drawing.

Anyways, my openGL Renderer looks like this:

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.

    public void onDrawFrame(GL10 gl) {
        // Clears the screen and depth buffer.
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | // OpenGL docs.

        // Define the points of my triangle
        float floatbuff[] = {
        // Create memory on the heap
        ByteBuffer vbb = ByteBuffer.allocateDirect(3 * 3 * 4);
        FloatBuffer vertices = vbb.asFloatBuffer();

        // Insert points into floatbuffer
        // Reset position


        // 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);


    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.glLoadIdentity();// OpenGL docs.

It currently crash on the line:

gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);

With an IndexOutOfBoundsException, but I'm sure there are more problems with the code.

Thankful for any help!

Related Questions