#ifndef OPEN_GL_H
#define OPEN_GL_H

// Linux Path to OpenGLES2
//#include <GLES2/gl2.h>

#ifdef USE_OPENGLES2
#  include <OpenGLES/ES2/gl.h>
#  include <OpenGLES/ES2/glext.h>
#  include <GLKit/GLKMathTypes.h>
#else
#  define GL_GLEXT_PROTOTYPES
#  include <GL/gl.h>
#  include <GL/glext.h>
#  include <GLKMatrix.h>
#  define glGenVertexArraysOES     glGenVertexArrays
#  define glBindVertexArrayOES     glBindVertexArray
#  define glDeleteVertexArraysOES  glDeleteVertexArrays
#endif



//namespace Math
//{
//  typedef GLKMatrix4 mat4;
//  typedef GLKMatrix3 mat3;
//}


struct mat4 //: public GLKMatrix4
{
  mat4& operator=(const GLKMatrix4& other)
  {
    for (int i = 0; i < 16; i++)
      m[i] = other.m[i];
    return *this;
  }
  mat4& operator=(const float* other)
  {
    for (int i = 0; i < 16; i++)
      m[i] = other[i];
    return *this;
  }
  union
  {
    struct
    {
      float m00, m01, m02, m03;
      float m10, m11, m12, m13;
      float m20, m21, m22, m23;
      float m30, m31, m32, m33;
    };
    float m[16];
  } __attribute__((aligned(16)));
};


struct mat3 // : public GLKMatrix3
{
  mat3& operator=(const float* other)
  {
    for (int i = 0; i < 9; i++)
      m[i] = other[i];
    return *this;
  }
  union
  {
    struct
    {
      float m00, m01, m02;
      float m10, m11, m12;
      float m20, m21, m22;
    };
    float m[9];
  };
};



#endif // OPEN_GL_H

