#pragma once

#if defined(_WINDOWS) && !defined(_MINGW)
#include <windows.h>
#endif

#ifdef _MINGW 
#include "GLee.h"
typedef GLEEPFNGLACTIVETEXTUREPROC PFNGLACTIVETEXTUREPROC;
typedef GLEEPFNGLMULTITEXCOORD2FPROC PFNGLMULTITEXCOORD2FPROC;
typedef GLEEPFNGLMULTITEXCOORD3FPROC PFNGLMULTITEXCOORD3FPROC;
typedef GLEEPFNGLBINDBUFFERARBPROC PFNGLBINDBUFFERARBPROC;
typedef GLEEPFNGLDELETEBUFFERSARBPROC PFNGLDELETEBUFFERSARBPROC;
typedef GLEEPFNGLGENBUFFERSARBPROC PFNGLGENBUFFERSARBPROC;
typedef GLEEPFNGLISBUFFERARBPROC PFNGLISBUFFERARBPROC;
typedef GLEEPFNGLBUFFERDATAARBPROC PFNGLBUFFERDATAARBPROC;
typedef GLEEPFNGLBUFFERSUBDATAARBPROC PFNGLBUFFERSUBDATAARBPROC;
typedef GLEEPFNGLGETBUFFERSUBDATAARBPROC PFNGLGETBUFFERSUBDATAARBPROC;
typedef GLEEPFNGLMAPBUFFERARBPROC PFNGLMAPBUFFERARBPROC;
typedef GLEEPFNGLUNMAPBUFFERARBPROC PFNGLUNMAPBUFFERARBPROC;
typedef GLEEPFNGLGETBUFFERPARAMETERIVARBPROC PFNGLGETBUFFERPARAMETERIVARBPROC;
typedef GLEEPFNGLGETBUFFERPOINTERVARBPROC PFNGLGETBUFFERPOINTERVARBPROC;
typedef GLEEPFNGLISRENDERBUFFEREXTPROC PFNGLISRENDERBUFFEREXTPROC;
typedef GLEEPFNGLBINDRENDERBUFFEREXTPROC PFNGLBINDRENDERBUFFEREXTPROC;
typedef GLEEPFNGLDELETERENDERBUFFERSEXTPROC PFNGLDELETERENDERBUFFERSEXTPROC;
typedef GLEEPFNGLGENRENDERBUFFERSEXTPROC PFNGLGENRENDERBUFFERSEXTPROC;
typedef GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC PFNGLRENDERBUFFERSTORAGEEXTPROC;
typedef GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC;
typedef GLEEPFNGLISFRAMEBUFFEREXTPROC PFNGLISFRAMEBUFFEREXTPROC;
typedef GLEEPFNGLBINDFRAMEBUFFEREXTPROC PFNGLBINDFRAMEBUFFEREXTPROC;
typedef GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC PFNGLDELETEFRAMEBUFFERSEXTPROC;
typedef GLEEPFNGLGENFRAMEBUFFERSEXTPROC PFNGLGENFRAMEBUFFERSEXTPROC;
typedef GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC PFNGLFRAMEBUFFERTEXTURE1DEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC PFNGLFRAMEBUFFERTEXTURE2DEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC PFNGLFRAMEBUFFERTEXTURE3DEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC;
typedef GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC;
typedef GLEEPFNGLGENERATEMIPMAPEXTPROC PFNGLGENERATEMIPMAPEXTPROC;
typedef GLEEPFNGLACTIVETEXTUREPROC PFNGLACTIVETEXTUREPROC;
typedef GLEEPFNGLMULTITEXCOORD2FPROC PFNGLMULTITEXCOORD2FPROC;
typedef GLEEPFNGLMULTITEXCOORD3FPROC PFNGLMULTITEXCOORD3FPROC;
typedef GLEEPFNGLBINDBUFFERARBPROC PFNGLBINDBUFFERARBPROC;
typedef GLEEPFNGLDELETEBUFFERSARBPROC PFNGLDELETEBUFFERSARBPROC;
typedef GLEEPFNGLGENBUFFERSARBPROC PFNGLGENBUFFERSARBPROC;
typedef GLEEPFNGLISBUFFERARBPROC PFNGLISBUFFERARBPROC;
typedef GLEEPFNGLBUFFERDATAARBPROC PFNGLBUFFERDATAARBPROC;
typedef GLEEPFNGLBUFFERSUBDATAARBPROC PFNGLBUFFERSUBDATAARBPROC;
typedef GLEEPFNGLGETBUFFERSUBDATAARBPROC PFNGLGETBUFFERSUBDATAARBPROC;
typedef GLEEPFNGLMAPBUFFERARBPROC PFNGLMAPBUFFERARBPROC;
typedef GLEEPFNGLUNMAPBUFFERARBPROC PFNGLUNMAPBUFFERARBPROC;
typedef GLEEPFNGLGETBUFFERPARAMETERIVARBPROC PFNGLGETBUFFERPARAMETERIVARBPROC;
typedef GLEEPFNGLGETBUFFERPOINTERVARBPROC PFNGLGETBUFFERPOINTERVARBPROC;
typedef GLEEPFNGLISRENDERBUFFEREXTPROC PFNGLISRENDERBUFFEREXTPROC;
typedef GLEEPFNGLBINDRENDERBUFFEREXTPROC PFNGLBINDRENDERBUFFEREXTPROC;
typedef GLEEPFNGLDELETERENDERBUFFERSEXTPROC PFNGLDELETERENDERBUFFERSEXTPROC;
typedef GLEEPFNGLGENRENDERBUFFERSEXTPROC PFNGLGENRENDERBUFFERSEXTPROC;
typedef GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC PFNGLRENDERBUFFERSTORAGEEXTPROC;
typedef GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC;
typedef GLEEPFNGLISFRAMEBUFFEREXTPROC PFNGLISFRAMEBUFFEREXTPROC;
typedef GLEEPFNGLBINDFRAMEBUFFEREXTPROC PFNGLBINDFRAMEBUFFEREXTPROC;
typedef GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC PFNGLDELETEFRAMEBUFFERSEXTPROC;
typedef GLEEPFNGLGENFRAMEBUFFERSEXTPROC PFNGLGENFRAMEBUFFERSEXTPROC;
typedef GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC PFNGLFRAMEBUFFERTEXTURE1DEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC PFNGLFRAMEBUFFERTEXTURE2DEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC PFNGLFRAMEBUFFERTEXTURE3DEXTPROC;
typedef GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC;
typedef GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC;
typedef GLEEPFNGLGENERATEMIPMAPEXTPROC PFNGLGENERATEMIPMAPEXTPROC;
typedef GLEEPFNGLUSEPROGRAMPROC PFNGLUSEPROGRAMPROC;
typedef GLEEPFNGLUNIFORM1IPROC PFNGLUNIFORM1IPROC;
typedef GLEEPFNGLGETUNIFORMLOCATIONARBPROC PFNGLGETUNIFORMLOCATIONARBPROC;
typedef GLEEPFNGLCREATESHADERPROC PFNGLCREATESHADERPROC;
typedef GLEEPFNGLSHADERSOURCEPROC PFNGLSHADERSOURCEPROC;
typedef GLEEPFNGLCOMPILESHADERPROC PFNGLCOMPILESHADERPROC;
typedef GLEEPFNGLCREATEPROGRAMPROC PFNGLCREATEPROGRAMPROC;
typedef GLEEPFNGLATTACHSHADERPROC PFNGLATTACHSHADERPROC;
typedef GLEEPFNGLLINKPROGRAMPROC PFNGLLINKPROGRAMPROC;
typedef GLEEPFNGLDETACHSHADERPROC PFNGLDETACHSHADERPROC;
typedef GLEEPFNGLDELETESHADERPROC PFNGLDELETESHADERPROC;
typedef GLEEPFNGLDELETEPROGRAMPROC PFNGLDELETEPROGRAMPROC;
typedef GLEEPFNGLUNIFORM1FPROC PFNGLUNIFORM1FPROC;
typedef GLEEPFNGLUNIFORM3FPROC PFNGLUNIFORM3FPROC;
typedef GLEEPFNGLUNIFORMMATRIX4FVPROC PFNGLUNIFORMMATRIX4FVPROC;
typedef GLEEPFNGLGETSHADERIVPROC PFNGLGETSHADERIVPROC;
typedef GLEEPFNGLGETSHADERINFOLOGPROC PFNGLGETSHADERINFOLOGPROC;
typedef GLEEPFNGLUNIFORMMATRIX4FVPROC PFNGLUNIFORMMATRIX4FVPROC;
typedef GLEEPFNGLGETSHADERIVPROC PFNGLGETSHADERIVPROC;
typedef GLEEPFNGLGETSHADERINFOLOGPROC PFNGLGETSHADERINFOLOGPROC;
typedef GLEEPFNWGLCHOOSEPIXELFORMATARBPROC PFNWGLCHOOSEPIXELFORMATARBPROC;
typedef GLEEPFNGLVERTEXATTRIBPOINTERPROC PFNGLVERTEXATTRIBPOINTERPROC;
typedef GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC PFNGLENABLEVERTEXATTRIBARRAYARBPROC;
typedef GLEEPFNGLBINDATTRIBLOCATIONPROC PFNGLBINDATTRIBLOCATIONPROC;
typedef GLEEPFNGLVERTEXATTRIBPOINTERPROC PFNGLVERTEXATTRIBPOINTERPROC;
typedef GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC PFNGLENABLEVERTEXATTRIBARRAYARBPROC;
typedef GLEEPFNGLBINDATTRIBLOCATIONPROC PFNGLBINDATTRIBLOCATIONPROC;
typedef GLEEPFNGLUNIFORM2FPROC PFNGLUNIFORM2FPROC;
typedef GLEEPFNWGLSWAPINTERVALEXTPROC PFNWGLSWAPINTERVALEXTPROC;
typedef GLEEPFNWGLGETSWAPINTERVALEXTPROC PFNWGLGETSWAPINTERVALEXTPROC;
typedef GLEEPFNGLGETPROGRAMIVPROC PFNGLGETPROGRAMIVPROC;
typedef GLEEPFNGLGETACTIVEUNIFORMPROC PFNGLGETACTIVEUNIFORMPROC;
#endif

#if defined(__APPLE__) && defined(__MACH__)
#include <OpenGL/gl.h>
#include <OpenGL/glext.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glext.h>

#if defined(_WINDOWS) && !defined(_MINGW)
#include <GL/wglext.h>
#endif
#endif
