package org.lwjgl.test.opengles.util; import org.lwjgl.test.opengles.util.BufferObjectArray; import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.List; import static org.lwjgl.opengles.GLES20.*; public class Geometry { protected BufferObjectArray bo; protected final List<DrawCommand> drawCommands = new ArrayList<DrawCommand>(4); public Geometry() { } public Geometry(final FloatBuffer buffer) { update(buffer); } public void update(final FloatBuffer buffer) { if ( bo != null ) destroy(); bo = new BufferObjectArray(GL_STATIC_DRAW, buffer); } public void bind() { bo.enable(); } public void draw() { for ( DrawCommand command : drawCommands ) command.draw(); } public void destroy() { bo.destroy(); bo = null; drawCommands.clear(); } public int addDrawCommand(final int mode, final int first, final int count) { drawCommands.add(new DrawCommand(mode, first, count)); return count; } public static float sin(final float r) { return (float)Math.sin(r); } public static float cos(final float r) { return (float)Math.cos(r); } protected static class DrawCommand { private int mode; private int first; private int count; private DrawCommand(final int mode, final int first, final int count) { this.mode = mode; this.first = first; this.count = count; } void draw() { glDrawArrays(mode, first, count); } } }