@Override
  public void draw(GL10 glUnused) {
    super.draw(glUnused);
    GLES20.glDisable(GLES20.GL_CULL_FACE);
    calcMVP();
    GLES20.glUniformMatrix4fv(getUniform(ShaderVal.MVP_MATRIX), 1, false, MVP, 0);
    GLES20.glEnableVertexAttribArray(ShaderVal.POSITION.loc);
    GLES20.glVertexAttribPointer(ShaderVal.POSITION.loc, 3, GLES20.GL_FLOAT, false, 0, vertices);

    if (useVertexColors) {
      GLES20.glEnableVertexAttribArray(ShaderVal.ATTRIB_COLOR.loc);
      GLES20.glVertexAttribPointer(
          ShaderVal.ATTRIB_COLOR.loc, 4, GLES20.GL_FLOAT, false, 0, colors);
    } else {
      GLES20.glUniform4f(
          getUniform(ShaderVal.UNIFORM_COLOR),
          color.getRed(),
          color.getGreen(),
          color.getBlue(),
          color.getAlpha());
    }

    GLES20.glDrawArrays(drawMode, 0, vertexCount);
    GLES20.glEnable(GLES20.GL_CULL_FACE);
  }
  public GenericColoredShape(Camera cam, int drawMode, float[] vertices) {
    super(cam);
    this.drawMode = drawMode;
    this.vertices = Vertices.toFloatBuffer(vertices);
    this.colors = null;

    vertexCount = vertices.length / 3;

    useVertexColors = false;
    super.setProgram(GLSLProgram.FlatColor());
  }
  @Override
  public void draw(GL10 gl) {
    super.draw(gl);
    gl.glColor4f(
        getColor().getRed(), getColor().getGreen(), getColor().getBlue(), getColor().getAlpha());

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertices);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

    gl.glNormalPointer(GL10.GL_FLOAT, 0, normals);
    gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

    gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, indices.limit(), GL10.GL_UNSIGNED_SHORT, indices);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
  }