#ifndef _OPENGL_H_
#define _OPENGL_H_

#ifdef LC_WINDOWS
#include "stdafx.h"
#include <GL/gl.h>
#include "win_gl.h"
#else
#define APIENTRY
#endif

#ifdef LC_LINUX
#include <GL/gl.h>
#include <GL/glx.h>
#include "linux_gl.h"
#endif 

#ifdef LC_MACOSX
#include <OpenGL/gl.h>
#include <AGL/agl.h>
#endif

//#include <GL/glu.h> // TODO: remove all glu calls
void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez,
		GLdouble centerx, GLdouble centery, GLdouble centerz,
		GLdouble upx, GLdouble upy, GLdouble upz);
void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
GLint gluProject (GLdouble objx, GLdouble objy, GLdouble objz,
		  const GLdouble model[16], const GLdouble proj[16],
		  const GLint viewport[4],
		  GLdouble *winx, GLdouble *winy, GLdouble *winz);
GLint gluUnProject (GLdouble winx, GLdouble winy, GLdouble winz,
		    const GLdouble model[16], const GLdouble proj[16],
		    const GLint viewport[4],
		    GLdouble *objx, GLdouble *objy, GLdouble *objz);

bool GL_Initialize (const char* libname);
void GL_Shutdown ();
bool GL_InitializeExtensions ();

int  GL_GetMultiTextures ();
bool GL_HasCompiledVertexArrays ();
bool GL_HasClampToEdge ();
bool GL_HasPointParameters ();

// =============================================================================
// OpenGL functions typedefs

// Miscellaneous
typedef void (APIENTRY *PFNGLCLEARINDEX) (GLfloat c);
typedef void (APIENTRY *PFNGLCLEARCOLOR) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef void (APIENTRY *PFNGLCLEAR) (GLbitfield mask);
typedef void (APIENTRY *PFNGLINDEXMASK) (GLuint mask);
typedef void (APIENTRY *PFNGLCOLORMASK) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
typedef void (APIENTRY *PFNGLALPHAFUNC) (GLenum func, GLclampf ref);
typedef void (APIENTRY *PFNGLBLENDFUNC) (GLenum sfactor, GLenum dfactor);
typedef void (APIENTRY *PFNGLLOGICOP) (GLenum opcode);
typedef void (APIENTRY *PFNGLCULLFACE) (GLenum mode);
typedef void (APIENTRY *PFNGLFRONTFACE) (GLenum mode);
typedef void (APIENTRY *PFNGLPOINTSIZE) (GLfloat size);
typedef void (APIENTRY *PFNGLLINEWIDTH) (GLfloat width);
typedef void (APIENTRY *PFNGLLINESTIPPLE) (GLint factor, GLushort pattern);
typedef void (APIENTRY *PFNGLPOLYGONMODE) (GLenum face, GLenum mode);
typedef void (APIENTRY *PFNGLPOLYGONOFFSET) (GLfloat factor, GLfloat units);
typedef void (APIENTRY *PFNGLPOLYGONSTIPPLE) (const GLubyte *mask);
typedef void (APIENTRY *PFNGLGETPOLYGONSTIPPLE) (GLubyte *mask);
typedef void (APIENTRY *PFNGLEDGEFLAG) (GLboolean flag);
typedef void (APIENTRY *PFNGLEDGEFLAGV) (const GLboolean *flag);
typedef void (APIENTRY *PFNGLSCISSOR) (GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (APIENTRY *PFNGLCLIPPLANE) (GLenum plane, const GLdouble *equation);
typedef void (APIENTRY *PFNGLGETCLIPPLANE) (GLenum plane, GLdouble *equation);
typedef void (APIENTRY *PFNGLDRAWBUFFER) (GLenum mode);
typedef void (APIENTRY *PFNGLREADBUFFER) (GLenum mode);
typedef void (APIENTRY *PFNGLENABLE) (GLenum cap);
typedef void (APIENTRY *PFNGLDISABLE) (GLenum cap);
typedef GLboolean (APIENTRY *PFNGLISENABLED) (GLenum cap);
typedef void (APIENTRY *PFNGLENABLECLIENTSTATE) (GLenum cap);
typedef void (APIENTRY *PFNGLDISABLECLIENTSTATE) (GLenum cap);
typedef void (APIENTRY *PFNGLGETBOOLEANV) (GLenum pname, GLboolean *params);
typedef void (APIENTRY *PFNGLGETDOUBLEV) (GLenum pname, GLdouble *params);
typedef void (APIENTRY *PFNGLGETFLOATV) (GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETINTEGERV) (GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLPUSHATTRIB) (GLbitfield mask);
typedef void (APIENTRY *PFNGLPOPATTRIB) (void);
typedef void (APIENTRY *PFNGLPUSHCLIENTATTRIB) (GLbitfield mask);
typedef void (APIENTRY *PFNGLPOPCLIENTATTRIB) (void);
typedef GLint (APIENTRY *PFNGLRENDERMODE) (GLenum mode);
typedef GLenum (APIENTRY *PFNGLGETERROR) (void);
typedef const GLubyte* (APIENTRY *PFNGLGETSTRING) (GLenum name);
typedef void (APIENTRY *PFNGLFINISH) (void);
typedef void (APIENTRY *PFNGLFLUSH) (void);
typedef void (APIENTRY *PFNGLHINT) (GLenum target, GLenum mode);

// Depth Buffer
typedef void (APIENTRY *PFNGLCLEARDEPTH) (GLclampd depth);
typedef void (APIENTRY *PFNGLDEPTHFUNC) (GLenum func);
typedef void (APIENTRY *PFNGLDEPTHMASK) (GLboolean flag);
typedef void (APIENTRY *PFNGLDEPTHRANGE) (GLclampd near_val, GLclampd far_val);

// Accumulation Buffer
typedef void (APIENTRY *PFNGLCLEARACCUM) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
typedef void (APIENTRY *PFNGLACCUM) (GLenum op, GLfloat value);

// Transformation
typedef void (APIENTRY *PFNGLMATRIXMODE) (GLenum mode);
typedef void (APIENTRY *PFNGLORTHO) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
typedef void (APIENTRY *PFNGLFRUSTUM) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
typedef void (APIENTRY *PFNGLVIEWPORT) (GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (APIENTRY *PFNGLPUSHMATRIX) (void);
typedef void (APIENTRY *PFNGLPOPMATRIX) (void);
typedef void (APIENTRY *PFNGLLOADIDENTITY) (void);
typedef void (APIENTRY *PFNGLLOADMATRIXD) (const GLdouble *m);
typedef void (APIENTRY *PFNGLLOADMATRIXF) (const GLfloat *m);
typedef void (APIENTRY *PFNGLMULTMATRIXD) (const GLdouble *m);
typedef void (APIENTRY *PFNGLMULTMATRIXF) (const GLfloat *m);
typedef void (APIENTRY *PFNGLROTATED) (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
typedef void (APIENTRY *PFNGLROTATEF) (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
typedef void (APIENTRY *PFNGLSCALED) (GLdouble x, GLdouble y, GLdouble z);
typedef void (APIENTRY *PFNGLSCALEF) (GLfloat x, GLfloat y, GLfloat z);
typedef void (APIENTRY *PFNGLTRANSLATED) (GLdouble x, GLdouble y, GLdouble z);
typedef void (APIENTRY *PFNGLTRANSLATEF) (GLfloat x, GLfloat y, GLfloat z);

// Display Lists
typedef GLboolean (APIENTRY *PFNGLISLIST) (GLuint list);
typedef void (APIENTRY *PFNGLDELETELISTS) (GLuint list, GLsizei range);
typedef GLuint (APIENTRY *PFNGLGENLISTS) (GLsizei range);
typedef void (APIENTRY *PFNGLNEWLIST) (GLuint list, GLenum mode);
typedef void (APIENTRY *PFNGLENDLIST) (void);
typedef void (APIENTRY *PFNGLCALLLIST) (GLuint list);
typedef void (APIENTRY *PFNGLCALLLISTS) (GLsizei n, GLenum type, const GLvoid *lists);
typedef void (APIENTRY *PFNGLLISTBASE) (GLuint base);

// Drawing Functions
typedef void (APIENTRY *PFNGLBEGIN) (GLenum mode);
typedef void (APIENTRY *PFNGLEND) (void);
typedef void (APIENTRY *PFNGLVERTEX2D) (GLdouble x, GLdouble y);
typedef void (APIENTRY *PFNGLVERTEX2F) (GLfloat x, GLfloat y);
typedef void (APIENTRY *PFNGLVERTEX2I) (GLint x, GLint y);
typedef void (APIENTRY *PFNGLVERTEX2S) (GLshort x, GLshort y);
typedef void (APIENTRY *PFNGLVERTEX3D) (GLdouble x, GLdouble y, GLdouble z);
typedef void (APIENTRY *PFNGLVERTEX3F) (GLfloat x, GLfloat y, GLfloat z);
typedef void (APIENTRY *PFNGLVERTEX3I) (GLint x, GLint y, GLint z);
typedef void (APIENTRY *PFNGLVERTEX3S) (GLshort x, GLshort y, GLshort z);
typedef void (APIENTRY *PFNGLVERTEX4D) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
typedef void (APIENTRY *PFNGLVERTEX4F) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
typedef void (APIENTRY *PFNGLVERTEX4I) (GLint x, GLint y, GLint z, GLint w);
typedef void (APIENTRY *PFNGLVERTEX4S) (GLshort x, GLshort y, GLshort z, GLshort w);
typedef void (APIENTRY *PFNGLVERTEX2DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLVERTEX2FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLVERTEX2IV) (const GLint *v);
typedef void (APIENTRY *PFNGLVERTEX2SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLVERTEX3DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLVERTEX3FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLVERTEX3IV) (const GLint *v);
typedef void (APIENTRY *PFNGLVERTEX3SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLVERTEX4DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLVERTEX4FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLVERTEX4IV) (const GLint *v);
typedef void (APIENTRY *PFNGLVERTEX4SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLNORMAL3B) (GLbyte nx, GLbyte ny, GLbyte nz);
typedef void (APIENTRY *PFNGLNORMAL3D) (GLdouble nx, GLdouble ny, GLdouble nz);
typedef void (APIENTRY *PFNGLNORMAL3F) (GLfloat nx, GLfloat ny, GLfloat nz);
typedef void (APIENTRY *PFNGLNORMAL3I) (GLint nx, GLint ny, GLint nz);
typedef void (APIENTRY *PFNGLNORMAL3S) (GLshort nx, GLshort ny, GLshort nz);
typedef void (APIENTRY *PFNGLNORMAL3BV) (const GLbyte *v);
typedef void (APIENTRY *PFNGLNORMAL3DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLNORMAL3FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLNORMAL3IV) (const GLint *v);
typedef void (APIENTRY *PFNGLNORMAL3SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLINDEXD) (GLdouble c);
typedef void (APIENTRY *PFNGLINDEXF) (GLfloat c);
typedef void (APIENTRY *PFNGLINDEXI) (GLint c);
typedef void (APIENTRY *PFNGLINDEXS) (GLshort c);
typedef void (APIENTRY *PFNGLINDEXUB) (GLubyte c);
typedef void (APIENTRY *PFNGLINDEXDV) (const GLdouble *c);
typedef void (APIENTRY *PFNGLINDEXFV) (const GLfloat *c);
typedef void (APIENTRY *PFNGLINDEXIV) (const GLint *c);
typedef void (APIENTRY *PFNGLINDEXSV) (const GLshort *c);
typedef void (APIENTRY *PFNGLINDEXUBV) (const GLubyte *c);
typedef void (APIENTRY *PFNGLCOLOR3B) (GLbyte red, GLbyte green, GLbyte blue);
typedef void (APIENTRY *PFNGLCOLOR3D) (GLdouble red, GLdouble green, GLdouble blue);
typedef void (APIENTRY *PFNGLCOLOR3F) (GLfloat red, GLfloat green, GLfloat blue);
typedef void (APIENTRY *PFNGLCOLOR3I) (GLint red, GLint green, GLint blue);
typedef void (APIENTRY *PFNGLCOLOR3S) (GLshort red, GLshort green, GLshort blue);
typedef void (APIENTRY *PFNGLCOLOR3UB) (GLubyte red, GLubyte green, GLubyte blue);
typedef void (APIENTRY *PFNGLCOLOR3UI) (GLuint red, GLuint green, GLuint blue);
typedef void (APIENTRY *PFNGLCOLOR3US) (GLushort red, GLushort green, GLushort blue);
typedef void (APIENTRY *PFNGLCOLOR4B) (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
typedef void (APIENTRY *PFNGLCOLOR4D) (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
typedef void (APIENTRY *PFNGLCOLOR4F) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
typedef void (APIENTRY *PFNGLCOLOR4I) (GLint red, GLint green, GLint blue, GLint alpha);
typedef void (APIENTRY *PFNGLCOLOR4S) (GLshort red, GLshort green, GLshort blue, GLshort alpha);
typedef void (APIENTRY *PFNGLCOLOR4UB) (GLubyte red, GLubyte green,GLubyte blue, GLubyte alpha);
typedef void (APIENTRY *PFNGLCOLOR4UI) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
typedef void (APIENTRY *PFNGLCOLOR4US) (GLushort red, GLushort green, GLushort blue, GLushort alpha);
typedef void (APIENTRY *PFNGLCOLOR3BV) (const GLbyte *v);
typedef void (APIENTRY *PFNGLCOLOR3DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLCOLOR3FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLCOLOR3IV) (const GLint *v);
typedef void (APIENTRY *PFNGLCOLOR3SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLCOLOR3UBV) (const GLubyte *v);
typedef void (APIENTRY *PFNGLCOLOR3UIV) (const GLuint *v);
typedef void (APIENTRY *PFNGLCOLOR3USV) (const GLushort *v);
typedef void (APIENTRY *PFNGLCOLOR4BV) (const GLbyte *v);
typedef void (APIENTRY *PFNGLCOLOR4DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLCOLOR4FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLCOLOR4IV) (const GLint *v);
typedef void (APIENTRY *PFNGLCOLOR4SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLCOLOR4UBV) (const GLubyte *v);
typedef void (APIENTRY *PFNGLCOLOR4UIV) (const GLuint *v);
typedef void (APIENTRY *PFNGLCOLOR4USV) (const GLushort *v);
typedef void (APIENTRY *PFNGLTEXCOORD1D) (GLdouble s);
typedef void (APIENTRY *PFNGLTEXCOORD1F) (GLfloat s);
typedef void (APIENTRY *PFNGLTEXCOORD1I) (GLint s);
typedef void (APIENTRY *PFNGLTEXCOORD1S) (GLshort s);
typedef void (APIENTRY *PFNGLTEXCOORD2D) (GLdouble s, GLdouble t);
typedef void (APIENTRY *PFNGLTEXCOORD2F) (GLfloat s, GLfloat t);
typedef void (APIENTRY *PFNGLTEXCOORD2I) (GLint s, GLint t);
typedef void (APIENTRY *PFNGLTEXCOORD2S) (GLshort s, GLshort t);
typedef void (APIENTRY *PFNGLTEXCOORD3D) (GLdouble s, GLdouble t, GLdouble r);
typedef void (APIENTRY *PFNGLTEXCOORD3F) (GLfloat s, GLfloat t, GLfloat r);
typedef void (APIENTRY *PFNGLTEXCOORD3I) (GLint s, GLint t, GLint r);
typedef void (APIENTRY *PFNGLTEXCOORD3S) (GLshort s, GLshort t, GLshort r);
typedef void (APIENTRY *PFNGLTEXCOORD4D) (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
typedef void (APIENTRY *PFNGLTEXCOORD4F) (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
typedef void (APIENTRY *PFNGLTEXCOORD4I) (GLint s, GLint t, GLint r, GLint q);
typedef void (APIENTRY *PFNGLTEXCOORD4S) (GLshort s, GLshort t, GLshort r, GLshort q);
typedef void (APIENTRY *PFNGLTEXCOORD1DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLTEXCOORD1FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLTEXCOORD1IV) (const GLint *v);
typedef void (APIENTRY *PFNGLTEXCOORD1SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLTEXCOORD2DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLTEXCOORD2FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLTEXCOORD2IV) (const GLint *v);
typedef void (APIENTRY *PFNGLTEXCOORD2SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLTEXCOORD3DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLTEXCOORD3FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLTEXCOORD3IV) (const GLint *v);
typedef void (APIENTRY *PFNGLTEXCOORD3SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLTEXCOORD4DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLTEXCOORD4FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLTEXCOORD4IV) (const GLint *v);
typedef void (APIENTRY *PFNGLTEXCOORD4SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLRASTERPOS2D) (GLdouble x, GLdouble y);
typedef void (APIENTRY *PFNGLRASTERPOS2F) (GLfloat x, GLfloat y);
typedef void (APIENTRY *PFNGLRASTERPOS2I) (GLint x, GLint y);
typedef void (APIENTRY *PFNGLRASTERPOS2S) (GLshort x, GLshort y);
typedef void (APIENTRY *PFNGLRASTERPOS3D) (GLdouble x, GLdouble y, GLdouble z);
typedef void (APIENTRY *PFNGLRASTERPOS3F) (GLfloat x, GLfloat y, GLfloat z);
typedef void (APIENTRY *PFNGLRASTERPOS3I) (GLint x, GLint y, GLint z);
typedef void (APIENTRY *PFNGLRASTERPOS3S) (GLshort x, GLshort y, GLshort z);
typedef void (APIENTRY *PFNGLRASTERPOS4D) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
typedef void (APIENTRY *PFNGLRASTERPOS4F) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
typedef void (APIENTRY *PFNGLRASTERPOS4I) (GLint x, GLint y, GLint z, GLint w);
typedef void (APIENTRY *PFNGLRASTERPOS4S) (GLshort x, GLshort y, GLshort z, GLshort w);
typedef void (APIENTRY *PFNGLRASTERPOS2DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLRASTERPOS2FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLRASTERPOS2IV) (const GLint *v);
typedef void (APIENTRY *PFNGLRASTERPOS2SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLRASTERPOS3DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLRASTERPOS3FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLRASTERPOS3IV) (const GLint *v);
typedef void (APIENTRY *PFNGLRASTERPOS3SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLRASTERPOS4DV) (const GLdouble *v);
typedef void (APIENTRY *PFNGLRASTERPOS4FV) (const GLfloat *v);
typedef void (APIENTRY *PFNGLRASTERPOS4IV) (const GLint *v);
typedef void (APIENTRY *PFNGLRASTERPOS4SV) (const GLshort *v);
typedef void (APIENTRY *PFNGLRECTD) (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
typedef void (APIENTRY *PFNGLRECTF) (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
typedef void (APIENTRY *PFNGLRECTI) (GLint x1, GLint y1, GLint x2, GLint y2);
typedef void (APIENTRY *PFNGLRECTS) (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
typedef void (APIENTRY *PFNGLRECTDV) (const GLdouble *v1, const GLdouble *v2);
typedef void (APIENTRY *PFNGLRECTFV) (const GLfloat *v1, const GLfloat *v2);
typedef void (APIENTRY *PFNGLRECTIV) (const GLint *v1, const GLint *v2);
typedef void (APIENTRY *PFNGLRECTSV) (const GLshort *v1, const GLshort *v2);

// Vertex Arrays
typedef void (APIENTRY *PFNGLVERTEXPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (APIENTRY *PFNGLNORMALPOINTER) (GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (APIENTRY *PFNGLCOLORPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (APIENTRY *PFNGLINDEXPOINTER) (GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (APIENTRY *PFNGLTEXCOORDPOINTER) (GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
typedef void (APIENTRY *PFNGLEDGEFLAGPOINTER) (GLsizei stride, const GLvoid *ptr);
typedef void (APIENTRY *PFNGLGETPOINTERV) (GLenum pname, void **params);
typedef void (APIENTRY *PFNGLARRAYELEMENT) (GLint i);
typedef void (APIENTRY *PFNGLDRAWARRAYS) (GLenum mode, GLint first, GLsizei count);
typedef void (APIENTRY *PFNGLDRAWELEMENTS) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
typedef void (APIENTRY *PFNGLINTERLEAVEDARRAYS) (GLenum format, GLsizei stride, const GLvoid *pointer);

// Lighting
typedef void (APIENTRY *PFNGLSHADEMODEL) (GLenum mode);
typedef void (APIENTRY *PFNGLLIGHTF) (GLenum light, GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLLIGHTI) (GLenum light, GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLLIGHTFV) (GLenum light, GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLLIGHTIV) (GLenum light, GLenum pname, const GLint *params);
typedef void (APIENTRY *PFNGLGETLIGHTFV) (GLenum light, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETLIGHTIV) (GLenum light, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLLIGHTMODELF) (GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLLIGHTMODELI) (GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLLIGHTMODELFV) (GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLLIGHTMODELIV) (GLenum pname, const GLint *params);
typedef void (APIENTRY *PFNGLMATERIALF) (GLenum face, GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLMATERIALI) (GLenum face, GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLMATERIALFV) (GLenum face, GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLMATERIALIV) (GLenum face, GLenum pname, const GLint *params);
typedef void (APIENTRY *PFNGLGETMATERIALFV) (GLenum face, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETMATERIALIV) (GLenum face, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLCOLORMATERIAL) (GLenum face, GLenum mode);

// Raster functions
typedef void (APIENTRY *PFNGLPIXELZOOM) (GLfloat xfactor, GLfloat yfactor);
typedef void (APIENTRY *PFNGLPIXELSTOREF) (GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLPIXELSTOREI) (GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLPIXELTRANSFERF) (GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLPIXELTRANSFERI) (GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLPIXELMAPFV) (GLenum map, GLint mapsize, const GLfloat *values);
typedef void (APIENTRY *PFNGLPIXELMAPUIV) (GLenum map, GLint mapsize, const GLuint *values);
typedef void (APIENTRY *PFNGLPIXELMAPUSV) (GLenum map, GLint mapsize, const GLushort *values);
typedef void (APIENTRY *PFNGLGETPIXELMAPFV) (GLenum map, GLfloat *values);
typedef void (APIENTRY *PFNGLGETPIXELMAPUIV) (GLenum map, GLuint *values);
typedef void (APIENTRY *PFNGLGETPIXELMAPUSV) (GLenum map, GLushort *values);
typedef void (APIENTRY *PFNGLBITMAP) (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );
typedef void (APIENTRY *PFNGLREADPIXELS) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
typedef void (APIENTRY *PFNGLDRAWPIXELS) (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRY *PFNGLCOPYPIXELS) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);

// Stenciling
typedef void (APIENTRY *PFNGLSTENCILFUNC) (GLenum func, GLint ref, GLuint mask);
typedef void (APIENTRY *PFNGLSTENCILMASK) (GLuint mask);
typedef void (APIENTRY *PFNGLSTENCILOP) (GLenum fail, GLenum zfail, GLenum zpass);
typedef void (APIENTRY *PFNGLCLEARSTENCIL) (GLint s);

// Texture mapping
typedef void (APIENTRY *PFNGLTEXGEND) (GLenum coord, GLenum pname, GLdouble param);
typedef void (APIENTRY *PFNGLTEXGENF) (GLenum coord, GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLTEXGENI) (GLenum coord, GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLTEXGENDV) (GLenum coord, GLenum pname, const GLdouble *params);
typedef void (APIENTRY *PFNGLTEXGENFV) (GLenum coord, GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLTEXGENIV) (GLenum coord, GLenum pname, const GLint *params);
typedef void (APIENTRY *PFNGLGETTEXGENDV) (GLenum coord, GLenum pname, GLdouble *params);
typedef void (APIENTRY *PFNGLGETTEXGENFV) (GLenum coord, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETTEXGENIV) (GLenum coord, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLTEXENVF) (GLenum target, GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLTEXENVI) (GLenum target, GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLTEXENVFV) (GLenum target, GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLTEXENVIV) (GLenum target, GLenum pname, const GLint *params);
typedef void (APIENTRY *PFNGLGETTEXENVFV) (GLenum target, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETTEXENVIV) (GLenum target, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLTEXPARAMETERF) (GLenum target, GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLTEXPARAMETERI) (GLenum target, GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLTEXPARAMETERFV) (GLenum target, GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLTEXPARAMETERIV) (GLenum target, GLenum pname, const GLint *params);
typedef void (APIENTRY *PFNGLGETTEXPARAMETERFV) (GLenum target, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETTEXPARAMETERIV) (GLenum target, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLGETTEXLEVELPARAMETERFV) (GLenum target, GLint level, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETTEXLEVELPARAMETERIV) (GLenum target, GLint level, GLenum pname, GLint *params);
typedef void (APIENTRY *PFNGLTEXIMAGE1D) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRY *PFNGLTEXIMAGE2D) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRY *PFNGLGETTEXIMAGE) (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
typedef void (APIENTRY *PFNGLGENTEXTURES) (GLsizei n, GLuint *textures);
typedef void (APIENTRY *PFNGLDELETETEXTURES) (GLsizei n, const GLuint *textures);
typedef void (APIENTRY *PFNGLBINDTEXTURE) (GLenum target, GLuint texture);
typedef void (APIENTRY *PFNGLPRIORITIZETEXTURES) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
typedef GLboolean (APIENTRY *PFNGLARETEXTURESRESIDENT) (GLsizei n, const GLuint *textures, GLboolean *residences);
typedef GLboolean (APIENTRY *PFNGLISTEXTURE) (GLuint texture);
typedef void (APIENTRY *PFNGLTEXSUBIMAGE1D) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRY *PFNGLTEXSUBIMAGE2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRY *PFNGLCOPYTEXIMAGE1D) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
typedef void (APIENTRY *PFNGLCOPYTEXIMAGE2D) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
typedef void (APIENTRY *PFNGLCOPYTEXSUBIMAGE1D) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
typedef void (APIENTRY *PFNGLCOPYTEXSUBIMAGE2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);

// Evaluators
typedef void (APIENTRY *PFNGLMAP1D) (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
typedef void (APIENTRY *PFNGLMAP1F) (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
typedef void (APIENTRY *PFNGLMAP2D) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
typedef void (APIENTRY *PFNGLMAP2F) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
typedef void (APIENTRY *PFNGLGETMAPDV) (GLenum target, GLenum query, GLdouble *v);
typedef void (APIENTRY *PFNGLGETMAPFV) (GLenum target, GLenum query, GLfloat *v);
typedef void (APIENTRY *PFNGLGETMAPIV) (GLenum target, GLenum query, GLint *v);
typedef void (APIENTRY *PFNGLEVALCOORD1D) (GLdouble u);
typedef void (APIENTRY *PFNGLEVALCOORD1F) (GLfloat u);
typedef void (APIENTRY *PFNGLEVALCOORD1DV) (const GLdouble *u);
typedef void (APIENTRY *PFNGLEVALCOORD1FV) (const GLfloat *u);
typedef void (APIENTRY *PFNGLEVALCOORD2D) (GLdouble u, GLdouble v);
typedef void (APIENTRY *PFNGLEVALCOORD2F) (GLfloat u, GLfloat v);
typedef void (APIENTRY *PFNGLEVALCOORD2DV) (const GLdouble *u);
typedef void (APIENTRY *PFNGLEVALCOORD2FV) (const GLfloat *u);
typedef void (APIENTRY *PFNGLMAPGRID1D) (GLint un, GLdouble u1, GLdouble u2);
typedef void (APIENTRY *PFNGLMAPGRID1F) (GLint un, GLfloat u1, GLfloat u2);
typedef void (APIENTRY *PFNGLMAPGRID2D) (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
typedef void (APIENTRY *PFNGLMAPGRID2F) (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
typedef void (APIENTRY *PFNGLEVALPOINT1) (GLint i);
typedef void (APIENTRY *PFNGLEVALPOINT2) (GLint i, GLint j);
typedef void (APIENTRY *PFNGLEVALMESH1) (GLenum mode, GLint i1, GLint i2);
typedef void (APIENTRY *PFNGLEVALMESH2) (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);

// Fog
typedef void (APIENTRY *PFNGLFOGF) (GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLFOGI) (GLenum pname, GLint param);
typedef void (APIENTRY *PFNGLFOGFV) (GLenum pname, const GLfloat *params);
typedef void (APIENTRY *PFNGLFOGIV) (GLenum pname, const GLint *params);

// Selection and Feedback
typedef void (APIENTRY *PFNGLFEEDBACKBUFFER) (GLsizei size, GLenum type, GLfloat *buffer);
typedef void (APIENTRY *PFNGLPASSTHROUGH) (GLfloat token);
typedef void (APIENTRY *PFNGLSELECTBUFFER) (GLsizei size, GLuint *buffer);
typedef void (APIENTRY *PFNGLINITNAMES) (void);
typedef void (APIENTRY *PFNGLLOADNAME) (GLuint name);
typedef void (APIENTRY *PFNGLPUSHNAME) (GLuint name);
typedef void (APIENTRY *PFNGLPOPNAME) (void);

// GL_ARB_multitexture
typedef void (APIENTRY *PFNGLACTIVETEXTUREARB) (GLenum texture);
typedef void (APIENTRY *PFNGLCLIENTACTIVETEXTUREARB) (GLenum texture);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1DARB) (GLenum target, GLdouble s);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1DVARB) (GLenum target, const GLdouble *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1FARB) (GLenum target, GLfloat s);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1FVARB) (GLenum target, const GLfloat *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1IARB) (GLenum target, GLint s);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1IVARB) (GLenum target, const GLint *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1SARB) (GLenum target, GLshort s);
typedef void (APIENTRY *PFNGLMULTITEXCOORD1SVARB) (GLenum target, const GLshort *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2DARB) (GLenum target, GLdouble s, GLdouble t);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2DVARB) (GLenum target, const GLdouble *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2FARB) (GLenum target, GLfloat s, GLfloat t);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2FVARB) (GLenum target, const GLfloat *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2IARB) (GLenum target, GLint s, GLint t);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2IVARB) (GLenum target, const GLint *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2SARB) (GLenum target, GLshort s, GLshort t);
typedef void (APIENTRY *PFNGLMULTITEXCOORD2SVARB) (GLenum target, const GLshort *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3DARB) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3DVARB) (GLenum target, const GLdouble *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3FARB) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3FVARB) (GLenum target, const GLfloat *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3IARB) (GLenum target, GLint s, GLint t, GLint r);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3IVARB) (GLenum target, const GLint *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3SARB) (GLenum target, GLshort s, GLshort t, GLshort r);
typedef void (APIENTRY *PFNGLMULTITEXCOORD3SVARB) (GLenum target, const GLshort *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4DARB) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4DVARB) (GLenum target, const GLdouble *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4FARB) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4FVARB) (GLenum target, const GLfloat *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4IARB) (GLenum target, GLint s, GLint t, GLint r, GLint q);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4IVARB) (GLenum target, const GLint *v);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4SARB) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
typedef void (APIENTRY *PFNGLMULTITEXCOORD4SVARB) (GLenum target, const GLshort *v);

#ifndef GL_ARB_multitexture
#define GL_TEXTURE0_ARB                   0x84C0
#define GL_TEXTURE1_ARB                   0x84C1
#define GL_TEXTURE2_ARB                   0x84C2
#define GL_TEXTURE3_ARB                   0x84C3
#define GL_TEXTURE4_ARB                   0x84C4
#define GL_TEXTURE5_ARB                   0x84C5
#define GL_TEXTURE6_ARB                   0x84C6
#define GL_TEXTURE7_ARB                   0x84C7
#define GL_TEXTURE8_ARB                   0x84C8
#define GL_TEXTURE9_ARB                   0x84C9
#define GL_TEXTURE10_ARB                  0x84CA
#define GL_TEXTURE11_ARB                  0x84CB
#define GL_TEXTURE12_ARB                  0x84CC
#define GL_TEXTURE13_ARB                  0x84CD
#define GL_TEXTURE14_ARB                  0x84CE
#define GL_TEXTURE15_ARB                  0x84CF
#define GL_TEXTURE16_ARB                  0x84D0
#define GL_TEXTURE17_ARB                  0x84D1
#define GL_TEXTURE18_ARB                  0x84D2
#define GL_TEXTURE19_ARB                  0x84D3
#define GL_TEXTURE20_ARB                  0x84D4
#define GL_TEXTURE21_ARB                  0x84D5
#define GL_TEXTURE22_ARB                  0x84D6
#define GL_TEXTURE23_ARB                  0x84D7
#define GL_TEXTURE24_ARB                  0x84D8
#define GL_TEXTURE25_ARB                  0x84D9
#define GL_TEXTURE26_ARB                  0x84DA
#define GL_TEXTURE27_ARB                  0x84DB
#define GL_TEXTURE28_ARB                  0x84DC
#define GL_TEXTURE29_ARB                  0x84DD
#define GL_TEXTURE30_ARB                  0x84DE
#define GL_TEXTURE31_ARB                  0x84DF
#define GL_ACTIVE_TEXTURE_ARB             0x84E0
#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1
#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2
#endif

// GL_EXT_point_parameters
typedef void (APIENTRY *PFNGLPOINTPARAMETERFEXT) (GLenum pname, GLfloat param);
typedef void (APIENTRY *PFNGLPOINTPARAMETERFVEXT) (GLenum pname, const GLfloat *params);

#ifndef GL_SGIS_point_parameters
#define GL_POINT_SIZE_MIN_EXT             0x8126
#define GL_POINT_SIZE_MIN_SGIS            0x8126
#define GL_POINT_SIZE_MAX_EXT             0x8127
#define GL_POINT_SIZE_MAX_SGIS            0x8127
#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128
#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
#define GL_DISTANCE_ATTENUATION_EXT       0x8129
#define GL_DISTANCE_ATTENUATION_SGIS      0x8129
#endif

// GL_EXT_compiled_vertex_array
typedef void (APIENTRY *PFNGLLOCKARRAYSEXT) (GLint first, GLsizei count);
typedef void (APIENTRY *PFNGLUNLOCKARRAYSEXT) (void);

#ifndef GL_EXT_compiled_vertex_array
#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8
#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9
#endif

// GL_SGIS_texture_edge_clamp
#ifndef GL_SGIS_texture_edge_clamp
#define GL_CLAMP_TO_EDGE_SGIS             0x812F
#endif

// =============================================================================
// OpenGL extern declarations

extern PFNGLCLEARINDEX pfnglClearIndex;
extern PFNGLCLEARCOLOR pfnglClearColor;
extern PFNGLCLEAR pfnglClear;
extern PFNGLINDEXMASK pfnglIndexMask;
extern PFNGLCOLORMASK pfnglColorMask;
extern PFNGLALPHAFUNC pfnglAlphaFunc;
extern PFNGLBLENDFUNC pfnglBlendFunc;
extern PFNGLLOGICOP pfnglLogicOp;
extern PFNGLCULLFACE pfnglCullFace;
extern PFNGLFRONTFACE pfnglFrontFace;
extern PFNGLPOINTSIZE pfnglPointSize;
extern PFNGLLINEWIDTH pfnglLineWidth;
extern PFNGLLINESTIPPLE pfnglLineStipple;
extern PFNGLPOLYGONMODE pfnglPolygonMode;
extern PFNGLPOLYGONOFFSET pfnglPolygonOffset;
extern PFNGLPOLYGONSTIPPLE pfnglPolygonStipple;
extern PFNGLGETPOLYGONSTIPPLE pfnglGetPolygonStipple;
extern PFNGLEDGEFLAG pfnglEdgeFlag;
extern PFNGLEDGEFLAGV pfnglEdgeFlagv;
extern PFNGLSCISSOR pfnglScissor;
extern PFNGLCLIPPLANE pfnglClipPlane;
extern PFNGLGETCLIPPLANE pfnglGetClipPlane;
extern PFNGLDRAWBUFFER pfnglDrawBuffer;
extern PFNGLREADBUFFER pfnglReadBuffer;
extern PFNGLENABLE pfnglEnable;
extern PFNGLDISABLE pfnglDisable;
extern PFNGLISENABLED pfnglIsEnabled;
extern PFNGLENABLECLIENTSTATE pfnglEnableClientState;
extern PFNGLDISABLECLIENTSTATE pfnglDisableClientState;
extern PFNGLGETBOOLEANV pfnglGetBooleanv;
extern PFNGLGETDOUBLEV pfnglGetDoublev;
extern PFNGLGETFLOATV pfnglGetFloatv;
extern PFNGLGETINTEGERV pfnglGetIntegerv;
extern PFNGLPUSHATTRIB pfnglPushAttrib;
extern PFNGLPOPATTRIB pfnglPopAttrib;
extern PFNGLPUSHCLIENTATTRIB pfnglPushClientAttrib;
extern PFNGLPOPCLIENTATTRIB pfnglPopClientAttrib;
extern PFNGLRENDERMODE pfnglRenderMode;
extern PFNGLGETERROR pfnglGetError;
extern PFNGLGETSTRING pfnglGetString;
extern PFNGLFINISH pfnglFinish;
extern PFNGLFLUSH pfnglFlush;
extern PFNGLHINT pfnglHint;
extern PFNGLCLEARDEPTH pfnglClearDepth;
extern PFNGLDEPTHFUNC pfnglDepthFunc;
extern PFNGLDEPTHMASK pfnglDepthMask;
extern PFNGLDEPTHRANGE pfnglDepthRange;
extern PFNGLCLEARACCUM pfnglClearAccum;
extern PFNGLACCUM pfnglAccum;
extern PFNGLMATRIXMODE pfnglMatrixMode;
extern PFNGLORTHO pfnglOrtho;
extern PFNGLFRUSTUM pfnglFrustum;
extern PFNGLVIEWPORT pfnglViewport;
extern PFNGLPUSHMATRIX pfnglPushMatrix;
extern PFNGLPOPMATRIX pfnglPopMatrix;
extern PFNGLLOADIDENTITY pfnglLoadIdentity;
extern PFNGLLOADMATRIXD pfnglLoadMatrixd;
extern PFNGLLOADMATRIXF pfnglLoadMatrixf;
extern PFNGLMULTMATRIXD pfnglMultMatrixd;
extern PFNGLMULTMATRIXF pfnglMultMatrixf;
extern PFNGLROTATED pfnglRotated;
extern PFNGLROTATEF pfnglRotatef;
extern PFNGLSCALED pfnglScaled;
extern PFNGLSCALEF pfnglScalef;
extern PFNGLTRANSLATED pfnglTranslated;
extern PFNGLTRANSLATEF pfnglTranslatef;
extern PFNGLISLIST pfnglIsList;
extern PFNGLDELETELISTS pfnglDeleteLists;
extern PFNGLGENLISTS pfnglGenLists;
extern PFNGLNEWLIST pfnglNewList;
extern PFNGLENDLIST pfnglEndList;
extern PFNGLCALLLIST pfnglCallList;
extern PFNGLCALLLISTS pfnglCallLists;
extern PFNGLLISTBASE pfnglListBase;
extern PFNGLBEGIN pfnglBegin;
extern PFNGLEND pfnglEnd;
extern PFNGLVERTEX2D pfnglVertex2d;
extern PFNGLVERTEX2F pfnglVertex2f;
extern PFNGLVERTEX2I pfnglVertex2i;
extern PFNGLVERTEX2S pfnglVertex2s;
extern PFNGLVERTEX3D pfnglVertex3d;
extern PFNGLVERTEX3F pfnglVertex3f;
extern PFNGLVERTEX3I pfnglVertex3i;
extern PFNGLVERTEX3S pfnglVertex3s;
extern PFNGLVERTEX4D pfnglVertex4d;
extern PFNGLVERTEX4F pfnglVertex4f;
extern PFNGLVERTEX4I pfnglVertex4i;
extern PFNGLVERTEX4S pfnglVertex4s;
extern PFNGLVERTEX2DV pfnglVertex2dv;
extern PFNGLVERTEX2FV pfnglVertex2fv;
extern PFNGLVERTEX2IV pfnglVertex2iv;
extern PFNGLVERTEX2SV pfnglVertex2sv;
extern PFNGLVERTEX3DV pfnglVertex3dv;
extern PFNGLVERTEX3FV pfnglVertex3fv;
extern PFNGLVERTEX3IV pfnglVertex3iv;
extern PFNGLVERTEX3SV pfnglVertex3sv;
extern PFNGLVERTEX4DV pfnglVertex4dv;
extern PFNGLVERTEX4FV pfnglVertex4fv;
extern PFNGLVERTEX4IV pfnglVertex4iv;
extern PFNGLVERTEX4SV pfnglVertex4sv;
extern PFNGLNORMAL3B pfnglNormal3b;
extern PFNGLNORMAL3D pfnglNormal3d;
extern PFNGLNORMAL3F pfnglNormal3f;
extern PFNGLNORMAL3I pfnglNormal3i;
extern PFNGLNORMAL3S pfnglNormal3s;
extern PFNGLNORMAL3BV pfnglNormal3bv;
extern PFNGLNORMAL3DV pfnglNormal3dv;
extern PFNGLNORMAL3FV pfnglNormal3fv;
extern PFNGLNORMAL3IV pfnglNormal3iv;
extern PFNGLNORMAL3SV pfnglNormal3sv;
extern PFNGLINDEXD pfnglIndexd;
extern PFNGLINDEXF pfnglIndexf;
extern PFNGLINDEXI pfnglIndexi;
extern PFNGLINDEXS pfnglIndexs;
extern PFNGLINDEXUB pfnglIndexub;
extern PFNGLINDEXDV pfnglIndexdv;
extern PFNGLINDEXFV pfnglIndexfv;
extern PFNGLINDEXIV pfnglIndexiv;
extern PFNGLINDEXSV pfnglIndexsv;
extern PFNGLINDEXUBV pfnglIndexubv;
extern PFNGLCOLOR3B pfnglColor3b;
extern PFNGLCOLOR3D pfnglColor3d;
extern PFNGLCOLOR3F pfnglColor3f;
extern PFNGLCOLOR3I pfnglColor3i;
extern PFNGLCOLOR3S pfnglColor3s;
extern PFNGLCOLOR3UB pfnglColor3ub;
extern PFNGLCOLOR3UI pfnglColor3ui;
extern PFNGLCOLOR3US pfnglColor3us;
extern PFNGLCOLOR4B pfnglColor4b;
extern PFNGLCOLOR4D pfnglColor4d;
extern PFNGLCOLOR4F pfnglColor4f;
extern PFNGLCOLOR4I pfnglColor4i;
extern PFNGLCOLOR4S pfnglColor4s;
extern PFNGLCOLOR4UB pfnglColor4ub;
extern PFNGLCOLOR4UI pfnglColor4ui;
extern PFNGLCOLOR4US pfnglColor4us;
extern PFNGLCOLOR3BV pfnglColor3bv;
extern PFNGLCOLOR3DV pfnglColor3dv;
extern PFNGLCOLOR3FV pfnglColor3fv;
extern PFNGLCOLOR3IV pfnglColor3iv;
extern PFNGLCOLOR3SV pfnglColor3sv;
extern PFNGLCOLOR3UBV pfnglColor3ubv;
extern PFNGLCOLOR3UIV pfnglColor3uiv;
extern PFNGLCOLOR3USV pfnglColor3usv;
extern PFNGLCOLOR4BV pfnglColor4bv;
extern PFNGLCOLOR4DV pfnglColor4dv;
extern PFNGLCOLOR4FV pfnglColor4fv;
extern PFNGLCOLOR4IV pfnglColor4iv;
extern PFNGLCOLOR4SV pfnglColor4sv;
extern PFNGLCOLOR4UBV pfnglColor4ubv;
extern PFNGLCOLOR4UIV pfnglColor4uiv;
extern PFNGLCOLOR4USV pfnglColor4usv;
extern PFNGLTEXCOORD1D pfnglTexCoord1d;
extern PFNGLTEXCOORD1F pfnglTexCoord1f;
extern PFNGLTEXCOORD1I pfnglTexCoord1i;
extern PFNGLTEXCOORD1S pfnglTexCoord1s;
extern PFNGLTEXCOORD2D pfnglTexCoord2d;
extern PFNGLTEXCOORD2F pfnglTexCoord2f;
extern PFNGLTEXCOORD2I pfnglTexCoord2i;
extern PFNGLTEXCOORD2S pfnglTexCoord2s;
extern PFNGLTEXCOORD3D pfnglTexCoord3d;
extern PFNGLTEXCOORD3F pfnglTexCoord3f;
extern PFNGLTEXCOORD3I pfnglTexCoord3i;
extern PFNGLTEXCOORD3S pfnglTexCoord3s;
extern PFNGLTEXCOORD4D pfnglTexCoord4d;
extern PFNGLTEXCOORD4F pfnglTexCoord4f;
extern PFNGLTEXCOORD4I pfnglTexCoord4i;
extern PFNGLTEXCOORD4S pfnglTexCoord4s;
extern PFNGLTEXCOORD1DV pfnglTexCoord1dv;
extern PFNGLTEXCOORD1FV pfnglTexCoord1fv;
extern PFNGLTEXCOORD1IV pfnglTexCoord1iv;
extern PFNGLTEXCOORD1SV pfnglTexCoord1sv;
extern PFNGLTEXCOORD2DV pfnglTexCoord2dv;
extern PFNGLTEXCOORD2FV pfnglTexCoord2fv;
extern PFNGLTEXCOORD2IV pfnglTexCoord2iv;
extern PFNGLTEXCOORD2SV pfnglTexCoord2sv;
extern PFNGLTEXCOORD3DV pfnglTexCoord3dv;
extern PFNGLTEXCOORD3FV pfnglTexCoord3fv;
extern PFNGLTEXCOORD3IV pfnglTexCoord3iv;
extern PFNGLTEXCOORD3SV pfnglTexCoord3sv;
extern PFNGLTEXCOORD4DV pfnglTexCoord4dv;
extern PFNGLTEXCOORD4FV pfnglTexCoord4fv;
extern PFNGLTEXCOORD4IV pfnglTexCoord4iv;
extern PFNGLTEXCOORD4SV pfnglTexCoord4sv;
extern PFNGLRASTERPOS2D pfnglRasterPos2d;
extern PFNGLRASTERPOS2F pfnglRasterPos2f;
extern PFNGLRASTERPOS2I pfnglRasterPos2i;
extern PFNGLRASTERPOS2S pfnglRasterPos2s;
extern PFNGLRASTERPOS3D pfnglRasterPos3d;
extern PFNGLRASTERPOS3F pfnglRasterPos3f;
extern PFNGLRASTERPOS3I pfnglRasterPos3i;
extern PFNGLRASTERPOS3S pfnglRasterPos3s;
extern PFNGLRASTERPOS4D pfnglRasterPos4d;
extern PFNGLRASTERPOS4F pfnglRasterPos4f;
extern PFNGLRASTERPOS4I pfnglRasterPos4i;
extern PFNGLRASTERPOS4S pfnglRasterPos4s;
extern PFNGLRASTERPOS2DV pfnglRasterPos2dv;
extern PFNGLRASTERPOS2FV pfnglRasterPos2fv;
extern PFNGLRASTERPOS2IV pfnglRasterPos2iv;
extern PFNGLRASTERPOS2SV pfnglRasterPos2sv;
extern PFNGLRASTERPOS3DV pfnglRasterPos3dv;
extern PFNGLRASTERPOS3FV pfnglRasterPos3fv;
extern PFNGLRASTERPOS3IV pfnglRasterPos3iv;
extern PFNGLRASTERPOS3SV pfnglRasterPos3sv;
extern PFNGLRASTERPOS4DV pfnglRasterPos4dv;
extern PFNGLRASTERPOS4FV pfnglRasterPos4fv;
extern PFNGLRASTERPOS4IV pfnglRasterPos4iv;
extern PFNGLRASTERPOS4SV pfnglRasterPos4sv;
extern PFNGLRECTD pfnglRectd;
extern PFNGLRECTF pfnglRectf;
extern PFNGLRECTI pfnglRecti;
extern PFNGLRECTS pfnglRects;
extern PFNGLRECTDV pfnglRectdv;
extern PFNGLRECTFV pfnglRectfv;
extern PFNGLRECTIV pfnglRectiv;
extern PFNGLRECTSV pfnglRectsv;
extern PFNGLVERTEXPOINTER pfnglVertexPointer;
extern PFNGLNORMALPOINTER pfnglNormalPointer;
extern PFNGLCOLORPOINTER pfnglColorPointer;
extern PFNGLINDEXPOINTER pfnglIndexPointer;
extern PFNGLTEXCOORDPOINTER pfnglTexCoordPointer;
extern PFNGLEDGEFLAGPOINTER pfnglEdgeFlagPointer;
extern PFNGLGETPOINTERV pfnglGetPointerv;
extern PFNGLARRAYELEMENT pfnglArrayElement;
extern PFNGLDRAWARRAYS pfnglDrawArrays;
extern PFNGLDRAWELEMENTS pfnglDrawElements;
extern PFNGLINTERLEAVEDARRAYS pfnglInterleavedArrays;
extern PFNGLSHADEMODEL pfnglShadeModel;
extern PFNGLLIGHTF pfnglLightf;
extern PFNGLLIGHTI pfnglLighti;
extern PFNGLLIGHTFV pfnglLightfv;
extern PFNGLLIGHTIV pfnglLightiv;
extern PFNGLGETLIGHTFV pfnglGetLightfv;
extern PFNGLGETLIGHTIV pfnglGetLightiv;
extern PFNGLLIGHTMODELF pfnglLightModelf;
extern PFNGLLIGHTMODELI pfnglLightModeli;
extern PFNGLLIGHTMODELFV pfnglLightModelfv;
extern PFNGLLIGHTMODELIV pfnglLightModeliv;
extern PFNGLMATERIALF pfnglMaterialf;
extern PFNGLMATERIALI pfnglMateriali;
extern PFNGLMATERIALFV pfnglMaterialfv;
extern PFNGLMATERIALIV pfnglMaterialiv;
extern PFNGLGETMATERIALFV pfnglGetMaterialfv;
extern PFNGLGETMATERIALIV pfnglGetMaterialiv;
extern PFNGLCOLORMATERIAL pfnglColorMaterial;
extern PFNGLPIXELZOOM pfnglPixelZoom;
extern PFNGLPIXELSTOREF pfnglPixelStoref;
extern PFNGLPIXELSTOREI pfnglPixelStorei;
extern PFNGLPIXELTRANSFERF pfnglPixelTransferf;
extern PFNGLPIXELTRANSFERI pfnglPixelTransferi;
extern PFNGLPIXELMAPFV pfnglPixelMapfv;
extern PFNGLPIXELMAPUIV pfnglPixelMapuiv;
extern PFNGLPIXELMAPUSV pfnglPixelMapusv;
extern PFNGLGETPIXELMAPFV pfnglGetPixelMapfv;
extern PFNGLGETPIXELMAPUIV pfnglGetPixelMapuiv;
extern PFNGLGETPIXELMAPUSV pfnglGetPixelMapusv;
extern PFNGLBITMAP pfnglBitmap;
extern PFNGLREADPIXELS pfnglReadPixels;
extern PFNGLDRAWPIXELS pfnglDrawPixels;
extern PFNGLCOPYPIXELS pfnglCopyPixels;
extern PFNGLSTENCILFUNC pfnglStencilFunc;
extern PFNGLSTENCILMASK pfnglStencilMask;
extern PFNGLSTENCILOP pfnglStencilOp;
extern PFNGLCLEARSTENCIL pfnglClearStencil;
extern PFNGLTEXGEND pfnglTexGend;
extern PFNGLTEXGENF pfnglTexGenf;
extern PFNGLTEXGENI pfnglTexGeni;
extern PFNGLTEXGENDV pfnglTexGendv;
extern PFNGLTEXGENFV pfnglTexGenfv;
extern PFNGLTEXGENIV pfnglTexGeniv;
extern PFNGLGETTEXGENDV pfnglGetTexGendv;
extern PFNGLGETTEXGENFV pfnglGetTexGenfv;
extern PFNGLGETTEXGENIV pfnglGetTexGeniv;
extern PFNGLTEXENVF pfnglTexEnvf;
extern PFNGLTEXENVI pfnglTexEnvi;
extern PFNGLTEXENVFV pfnglTexEnvfv;
extern PFNGLTEXENVIV pfnglTexEnviv;
extern PFNGLGETTEXENVFV pfnglGetTexEnvfv;
extern PFNGLGETTEXENVIV pfnglGetTexEnviv;
extern PFNGLTEXPARAMETERF pfnglTexParameterf;
extern PFNGLTEXPARAMETERI pfnglTexParameteri;
extern PFNGLTEXPARAMETERFV pfnglTexParameterfv;
extern PFNGLTEXPARAMETERIV pfnglTexParameteriv;
extern PFNGLGETTEXPARAMETERFV pfnglGetTexParameterfv;
extern PFNGLGETTEXPARAMETERIV pfnglGetTexParameteriv;
extern PFNGLGETTEXLEVELPARAMETERFV pfnglGetTexLevelParameterfv;
extern PFNGLGETTEXLEVELPARAMETERIV pfnglGetTexLevelParameteriv;
extern PFNGLTEXIMAGE1D pfnglTexImage1D;
extern PFNGLTEXIMAGE2D pfnglTexImage2D;
extern PFNGLGETTEXIMAGE pfnglGetTexImage;
extern PFNGLGENTEXTURES pfnglGenTextures;
extern PFNGLDELETETEXTURES pfnglDeleteTextures;
extern PFNGLBINDTEXTURE pfnglBindTexture;
extern PFNGLPRIORITIZETEXTURES pfnglPrioritizeTextures;
extern PFNGLARETEXTURESRESIDENT pfnglAreTexturesResident;
extern PFNGLISTEXTURE pfnglIsTexture;
extern PFNGLTEXSUBIMAGE1D pfnglTexSubImage1D;
extern PFNGLTEXSUBIMAGE2D pfnglTexSubImage2D;
extern PFNGLCOPYTEXIMAGE1D pfnglCopyTexImage1D;
extern PFNGLCOPYTEXIMAGE2D pfnglCopyTexImage2D;
extern PFNGLCOPYTEXSUBIMAGE1D pfnglCopyTexSubImage1D;
extern PFNGLCOPYTEXSUBIMAGE2D pfnglCopyTexSubImage2D;
extern PFNGLMAP1D pfnglMap1d;
extern PFNGLMAP1F pfnglMap1f;
extern PFNGLMAP2D pfnglMap2d;
extern PFNGLMAP2F pfnglMap2f;
extern PFNGLGETMAPDV pfnglGetMapdv;
extern PFNGLGETMAPFV pfnglGetMapfv;
extern PFNGLGETMAPIV pfnglGetMapiv;
extern PFNGLEVALCOORD1D pfnglEvalCoord1d;
extern PFNGLEVALCOORD1F pfnglEvalCoord1f;
extern PFNGLEVALCOORD1DV pfnglEvalCoord1dv;
extern PFNGLEVALCOORD1FV pfnglEvalCoord1fv;
extern PFNGLEVALCOORD2D pfnglEvalCoord2d;
extern PFNGLEVALCOORD2F pfnglEvalCoord2f;
extern PFNGLEVALCOORD2DV pfnglEvalCoord2dv;
extern PFNGLEVALCOORD2FV pfnglEvalCoord2fv;
extern PFNGLMAPGRID1D pfnglMapGrid1d;
extern PFNGLMAPGRID1F pfnglMapGrid1f;
extern PFNGLMAPGRID2D pfnglMapGrid2d;
extern PFNGLMAPGRID2F pfnglMapGrid2f;
extern PFNGLEVALPOINT1 pfnglEvalPoint1;
extern PFNGLEVALPOINT2 pfnglEvalPoint2;
extern PFNGLEVALMESH1 pfnglEvalMesh1;
extern PFNGLEVALMESH2 pfnglEvalMesh2;
extern PFNGLFOGF pfnglFogf;
extern PFNGLFOGI pfnglFogi;
extern PFNGLFOGFV pfnglFogfv;
extern PFNGLFOGIV pfnglFogiv;
extern PFNGLFEEDBACKBUFFER pfnglFeedbackBuffer;
extern PFNGLPASSTHROUGH pfnglPassThrough;
extern PFNGLSELECTBUFFER pfnglSelectBuffer;
extern PFNGLINITNAMES pfnglInitNames;
extern PFNGLLOADNAME pfnglLoadName;
extern PFNGLPUSHNAME pfnglPushName;
extern PFNGLPOPNAME pfnglPopName;

extern PFNGLACTIVETEXTUREARB pfnglActiveTextureARB;
extern PFNGLCLIENTACTIVETEXTUREARB pfnglClientActiveTextureARB;
extern PFNGLMULTITEXCOORD1DARB pfnglMultiTexCoord1dARB;
extern PFNGLMULTITEXCOORD1DVARB pfnglMultiTexCoord1dvARB;
extern PFNGLMULTITEXCOORD1FARB pfnglMultiTexCoord1fARB;
extern PFNGLMULTITEXCOORD1FVARB pfnglMultiTexCoord1fvARB;
extern PFNGLMULTITEXCOORD1IARB pfnglMultiTexCoord1iARB;
extern PFNGLMULTITEXCOORD1IVARB pfnglMultiTexCoord1ivARB;
extern PFNGLMULTITEXCOORD1SARB pfnglMultiTexCoord1sARB;
extern PFNGLMULTITEXCOORD1SVARB pfnglMultiTexCoord1svARB;
extern PFNGLMULTITEXCOORD2DARB pfnglMultiTexCoord2dARB;
extern PFNGLMULTITEXCOORD2DVARB pfnglMultiTexCoord2dvARB;
extern PFNGLMULTITEXCOORD2FARB pfnglMultiTexCoord2fARB;
extern PFNGLMULTITEXCOORD2FVARB pfnglMultiTexCoord2fvARB;
extern PFNGLMULTITEXCOORD2IARB pfnglMultiTexCoord2iARB;
extern PFNGLMULTITEXCOORD2IVARB pfnglMultiTexCoord2ivARB;
extern PFNGLMULTITEXCOORD2SARB pfnglMultiTexCoord2sARB;
extern PFNGLMULTITEXCOORD2SVARB pfnglMultiTexCoord2svARB;
extern PFNGLMULTITEXCOORD3DARB pfnglMultiTexCoord3dARB;
extern PFNGLMULTITEXCOORD3DVARB pfnglMultiTexCoord3dvARB;
extern PFNGLMULTITEXCOORD3FARB pfnglMultiTexCoord3fARB;
extern PFNGLMULTITEXCOORD3FVARB pfnglMultiTexCoord3fvARB;
extern PFNGLMULTITEXCOORD3IARB pfnglMultiTexCoord3iARB;
extern PFNGLMULTITEXCOORD3IVARB pfnglMultiTexCoord3ivARB;
extern PFNGLMULTITEXCOORD3SARB pfnglMultiTexCoord3sARB;
extern PFNGLMULTITEXCOORD3SVARB pfnglMultiTexCoord3svARB;
extern PFNGLMULTITEXCOORD4DARB pfnglMultiTexCoord4dARB;
extern PFNGLMULTITEXCOORD4DVARB pfnglMultiTexCoord4dvARB;
extern PFNGLMULTITEXCOORD4FARB pfnglMultiTexCoord4fARB;
extern PFNGLMULTITEXCOORD4FVARB pfnglMultiTexCoord4fvARB;
extern PFNGLMULTITEXCOORD4IARB pfnglMultiTexCoord4iARB;
extern PFNGLMULTITEXCOORD4IVARB pfnglMultiTexCoord4ivARB;
extern PFNGLMULTITEXCOORD4SARB pfnglMultiTexCoord4sARB;
extern PFNGLMULTITEXCOORD4SVARB pfnglMultiTexCoord4svARB;
extern PFNGLPOINTPARAMETERFEXT pfnglPointParameterfEXT;
extern PFNGLPOINTPARAMETERFVEXT pfnglPointParameterfvEXT;
extern PFNGLLOCKARRAYSEXT pfnglLockArraysEXT;
extern PFNGLUNLOCKARRAYSEXT pfnglUnlockArraysEXT;

// =============================================================================
// Replace OpenGL function names with the dynamic functions

#define glClearIndex pfnglClearIndex
#define glClearColor pfnglClearColor
#define glClear pfnglClear
#define glIndexMask pfnglIndexMask
#define glColorMask pfnglColorMask
#define glAlphaFunc pfnglAlphaFunc
#define glBlendFunc pfnglBlendFunc
#define glLogicOp pfnglLogicOp
#define glCullFace pfnglCullFace
#define glFrontFace pfnglFrontFace
#define glPointSize pfnglPointSize
#define glLineWidth pfnglLineWidth
#define glLineStipple pfnglLineStipple
#define glPolygonMode pfnglPolygonMode
#define glPolygonOffset pfnglPolygonOffset
#define glPolygonStipple pfnglPolygonStipple
#define glGetPolygonStipple pfnglGetPolygonStipple
#define glEdgeFlag pfnglEdgeFlag
#define glEdgeFlagv pfnglEdgeFlagv
#define glScissor pfnglScissor
#define glClipPlane pfnglClipPlane
#define glGetClipPlane pfnglGetClipPlane
#define glDrawBuffer pfnglDrawBuffer
#define glReadBuffer pfnglReadBuffer
#define glEnable pfnglEnable
#define glDisable pfnglDisable
#define glIsEnabled pfnglIsEnabled
#define glEnableClientState pfnglEnableClientState
#define glDisableClientState pfnglDisableClientState
#define glGetBooleanv pfnglGetBooleanv
#define glGetDoublev pfnglGetDoublev
#define glGetFloatv pfnglGetFloatv
#define glGetIntegerv pfnglGetIntegerv
#define glPushAttrib pfnglPushAttrib
#define glPopAttrib pfnglPopAttrib
#define glPushClientAttrib pfnglPushClientAttrib
#define glPopClientAttrib pfnglPopClientAttrib
#define glRenderMode pfnglRenderMode
#define glGetError pfnglGetError
#define glGetString pfnglGetString
#define glFinish pfnglFinish
#define glFlush pfnglFlush
#define glHint pfnglHint
#define glClearDepth pfnglClearDepth
#define glDepthFunc pfnglDepthFunc
#define glDepthMask pfnglDepthMask
#define glDepthRange pfnglDepthRange
#define glClearAccum pfnglClearAccum
#define glAccum pfnglAccum
#define glMatrixMode pfnglMatrixMode
#define glOrtho pfnglOrtho
#define glFrustum pfnglFrustum
#define glViewport pfnglViewport
#define glPushMatrix pfnglPushMatrix
#define glPopMatrix pfnglPopMatrix
#define glLoadIdentity pfnglLoadIdentity
#define glLoadMatrixd pfnglLoadMatrixd
#define glLoadMatrixf pfnglLoadMatrixf
#define glMultMatrixd pfnglMultMatrixd
#define glMultMatrixf pfnglMultMatrixf
#define glRotated pfnglRotated
#define glRotatef pfnglRotatef
#define glScaled pfnglScaled
#define glScalef pfnglScalef
#define glTranslated pfnglTranslated
#define glTranslatef pfnglTranslatef
#define glIsList pfnglIsList
#define glDeleteLists pfnglDeleteLists
#define glGenLists pfnglGenLists
#define glNewList pfnglNewList
#define glEndList pfnglEndList
#define glCallList pfnglCallList
#define glCallLists pfnglCallLists
#define glListBase pfnglListBase
#define glBegin pfnglBegin
#define glEnd pfnglEnd
#define glVertex2d pfnglVertex2d
#define glVertex2f pfnglVertex2f
#define glVertex2i pfnglVertex2i
#define glVertex2s pfnglVertex2s
#define glVertex3d pfnglVertex3d
#define glVertex3f pfnglVertex3f
#define glVertex3i pfnglVertex3i
#define glVertex3s pfnglVertex3s
#define glVertex4d pfnglVertex4d
#define glVertex4f pfnglVertex4f
#define glVertex4i pfnglVertex4i
#define glVertex4s pfnglVertex4s
#define glVertex2dv pfnglVertex2dv
#define glVertex2fv pfnglVertex2fv
#define glVertex2iv pfnglVertex2iv
#define glVertex2sv pfnglVertex2sv
#define glVertex3dv pfnglVertex3dv
#define glVertex3fv pfnglVertex3fv
#define glVertex3iv pfnglVertex3iv
#define glVertex3sv pfnglVertex3sv
#define glVertex4dv pfnglVertex4dv
#define glVertex4fv pfnglVertex4fv
#define glVertex4iv pfnglVertex4iv
#define glVertex4sv pfnglVertex4sv
#define glNormal3b pfnglNormal3b
#define glNormal3d pfnglNormal3d
#define glNormal3f pfnglNormal3f
#define glNormal3i pfnglNormal3i
#define glNormal3s pfnglNormal3s
#define glNormal3bv pfnglNormal3bv
#define glNormal3dv pfnglNormal3dv
#define glNormal3fv pfnglNormal3fv
#define glNormal3iv pfnglNormal3iv
#define glNormal3sv pfnglNormal3sv
#define glIndexd pfnglIndexd
#define glIndexf pfnglIndexf
#define glIndexi pfnglIndexi
#define glIndexs pfnglIndexs
#define glIndexub pfnglIndexub
#define glIndexdv pfnglIndexdv
#define glIndexfv pfnglIndexfv
#define glIndexiv pfnglIndexiv
#define glIndexsv pfnglIndexsv
#define glIndexubv pfnglIndexubv
#define glColor3b pfnglColor3b
#define glColor3d pfnglColor3d
#define glColor3f pfnglColor3f
#define glColor3i pfnglColor3i
#define glColor3s pfnglColor3s
#define glColor3ub pfnglColor3ub
#define glColor3ui pfnglColor3ui
#define glColor3us pfnglColor3us
#define glColor4b pfnglColor4b
#define glColor4d pfnglColor4d
#define glColor4f pfnglColor4f
#define glColor4i pfnglColor4i
#define glColor4s pfnglColor4s
#define glColor4ub pfnglColor4ub
#define glColor4ui pfnglColor4ui
#define glColor4us pfnglColor4us
#define glColor3bv pfnglColor3bv
#define glColor3dv pfnglColor3dv
#define glColor3fv pfnglColor3fv
#define glColor3iv pfnglColor3iv
#define glColor3sv pfnglColor3sv
#define glColor3ubv pfnglColor3ubv
#define glColor3uiv pfnglColor3uiv
#define glColor3usv pfnglColor3usv
#define glColor4bv pfnglColor4bv
#define glColor4dv pfnglColor4dv
#define glColor4fv pfnglColor4fv
#define glColor4iv pfnglColor4iv
#define glColor4sv pfnglColor4sv
#define glColor4ubv pfnglColor4ubv
#define glColor4uiv pfnglColor4uiv
#define glColor4usv pfnglColor4usv
#define glTexCoord1d pfnglTexCoord1d
#define glTexCoord1f pfnglTexCoord1f
#define glTexCoord1i pfnglTexCoord1i
#define glTexCoord1s pfnglTexCoord1s
#define glTexCoord2d pfnglTexCoord2d
#define glTexCoord2f pfnglTexCoord2f
#define glTexCoord2i pfnglTexCoord2i
#define glTexCoord2s pfnglTexCoord2s
#define glTexCoord3d pfnglTexCoord3d
#define glTexCoord3f pfnglTexCoord3f
#define glTexCoord3i pfnglTexCoord3i
#define glTexCoord3s pfnglTexCoord3s
#define glTexCoord4d pfnglTexCoord4d
#define glTexCoord4f pfnglTexCoord4f
#define glTexCoord4i pfnglTexCoord4i
#define glTexCoord4s pfnglTexCoord4s
#define glTexCoord1dv pfnglTexCoord1dv
#define glTexCoord1fv pfnglTexCoord1fv
#define glTexCoord1iv pfnglTexCoord1iv
#define glTexCoord1sv pfnglTexCoord1sv
#define glTexCoord2dv pfnglTexCoord2dv
#define glTexCoord2fv pfnglTexCoord2fv
#define glTexCoord2iv pfnglTexCoord2iv
#define glTexCoord2sv pfnglTexCoord2sv
#define glTexCoord3dv pfnglTexCoord3dv
#define glTexCoord3fv pfnglTexCoord3fv
#define glTexCoord3iv pfnglTexCoord3iv
#define glTexCoord3sv pfnglTexCoord3sv
#define glTexCoord4dv pfnglTexCoord4dv
#define glTexCoord4fv pfnglTexCoord4fv
#define glTexCoord4iv pfnglTexCoord4iv
#define glTexCoord4sv pfnglTexCoord4sv
#define glRasterPos2d pfnglRasterPos2d
#define glRasterPos2f pfnglRasterPos2f
#define glRasterPos2i pfnglRasterPos2i
#define glRasterPos2s pfnglRasterPos2s
#define glRasterPos3d pfnglRasterPos3d
#define glRasterPos3f pfnglRasterPos3f
#define glRasterPos3i pfnglRasterPos3i
#define glRasterPos3s pfnglRasterPos3s
#define glRasterPos4d pfnglRasterPos4d
#define glRasterPos4f pfnglRasterPos4f
#define glRasterPos4i pfnglRasterPos4i
#define glRasterPos4s pfnglRasterPos4s
#define glRasterPos2dv pfnglRasterPos2dv
#define glRasterPos2fv pfnglRasterPos2fv
#define glRasterPos2iv pfnglRasterPos2iv
#define glRasterPos2sv pfnglRasterPos2sv
#define glRasterPos3dv pfnglRasterPos3dv
#define glRasterPos3fv pfnglRasterPos3fv
#define glRasterPos3iv pfnglRasterPos3iv
#define glRasterPos3sv pfnglRasterPos3sv
#define glRasterPos4dv pfnglRasterPos4dv
#define glRasterPos4fv pfnglRasterPos4fv
#define glRasterPos4iv pfnglRasterPos4iv
#define glRasterPos4sv pfnglRasterPos4sv
#define glRectd pfnglRectd
#define glRectf pfnglRectf
#define glRecti pfnglRecti
#define glRects pfnglRects
#define glRectdv pfnglRectdv
#define glRectfv pfnglRectfv
#define glRectiv pfnglRectiv
#define glRectsv pfnglRectsv
#define glVertexPointer pfnglVertexPointer
#define glNormalPointer pfnglNormalPointer
#define glColorPointer pfnglColorPointer
#define glIndexPointer pfnglIndexPointer
#define glTexCoordPointer pfnglTexCoordPointer
#define glEdgeFlagPointer pfnglEdgeFlagPointer
#define glGetPointerv pfnglGetPointerv
#define glArrayElement pfnglArrayElement
#define glDrawArrays pfnglDrawArrays
#define glDrawElements pfnglDrawElements
#define glInterleavedArrays pfnglInterleavedArrays
#define glShadeModel pfnglShadeModel
#define glLightf pfnglLightf
#define glLighti pfnglLighti
#define glLightfv pfnglLightfv
#define glLightiv pfnglLightiv
#define glGetLightfv pfnglGetLightfv
#define glGetLightiv pfnglGetLightiv
#define glLightModelf pfnglLightModelf
#define glLightModeli pfnglLightModeli
#define glLightModelfv pfnglLightModelfv
#define glLightModeliv pfnglLightModeliv
#define glMaterialf pfnglMaterialf
#define glMateriali pfnglMateriali
#define glMaterialfv pfnglMaterialfv
#define glMaterialiv pfnglMaterialiv
#define glGetMaterialfv pfnglGetMaterialfv
#define glGetMaterialiv pfnglGetMaterialiv
#define glColorMaterial pfnglColorMaterial
#define glPixelZoom pfnglPixelZoom
#define glPixelStoref pfnglPixelStoref
#define glPixelStorei pfnglPixelStorei
#define glPixelTransferf pfnglPixelTransferf
#define glPixelTransferi pfnglPixelTransferi
#define glPixelMapfv pfnglPixelMapfv
#define glPixelMapuiv pfnglPixelMapuiv
#define glPixelMapusv pfnglPixelMapusv
#define glGetPixelMapfv pfnglGetPixelMapfv
#define glGetPixelMapuiv pfnglGetPixelMapuiv
#define glGetPixelMapusv pfnglGetPixelMapusv
#define glBitmap pfnglBitmap
#define glReadPixels pfnglReadPixels
#define glDrawPixels pfnglDrawPixels
#define glCopyPixels pfnglCopyPixels
#define glStencilFunc pfnglStencilFunc
#define glStencilMask pfnglStencilMask
#define glStencilOp pfnglStencilOp
#define glClearStencil pfnglClearStencil
#define glTexGend pfnglTexGend
#define glTexGenf pfnglTexGenf
#define glTexGeni pfnglTexGeni
#define glTexGendv pfnglTexGendv
#define glTexGenfv pfnglTexGenfv
#define glTexGeniv pfnglTexGeniv
#define glGetTexGendv pfnglGetTexGendv
#define glGetTexGenfv pfnglGetTexGenfv
#define glGetTexGeniv pfnglGetTexGeniv
#define glTexEnvf pfnglTexEnvf
#define glTexEnvi pfnglTexEnvi
#define glTexEnvfv pfnglTexEnvfv
#define glTexEnviv pfnglTexEnviv
#define glGetTexEnvfv pfnglGetTexEnvfv
#define glGetTexEnviv pfnglGetTexEnviv
#define glTexParameterf pfnglTexParameterf
#define glTexParameteri pfnglTexParameteri
#define glTexParameterfv pfnglTexParameterfv
#define glTexParameteriv pfnglTexParameteriv
#define glGetTexParameterfv pfnglGetTexParameterfv
#define glGetTexParameteriv pfnglGetTexParameteriv
#define glGetTexLevelParameterfv pfnglGetTexLevelParameterfv
#define glGetTexLevelParameteriv pfnglGetTexLevelParameteriv
#define glTexImage1D pfnglTexImage1D
#define glTexImage2D pfnglTexImage2D
#define glGetTexImage pfnglGetTexImage
#define glGenTextures pfnglGenTextures
#define glDeleteTextures pfnglDeleteTextures
#define glBindTexture pfnglBindTexture
#define glPrioritizeTextures pfnglPrioritizeTextures
#define glAreTexturesResident pfnglAreTexturesResident
#define glIsTexture pfnglIsTexture
#define glTexSubImage1D pfnglTexSubImage1D
#define glTexSubImage2D pfnglTexSubImage2D
#define glCopyTexImage1D pfnglCopyTexImage1D
#define glCopyTexImage2D pfnglCopyTexImage2D
#define glCopyTexSubImage1D pfnglCopyTexSubImage1D
#define glCopyTexSubImage2D pfnglCopyTexSubImage2D
#define glMap1d pfnglMap1d
#define glMap1f pfnglMap1f
#define glMap2d pfnglMap2d
#define glMap2f pfnglMap2f
#define glGetMapdv pfnglGetMapdv
#define glGetMapfv pfnglGetMapfv
#define glGetMapiv pfnglGetMapiv
#define glEvalCoord1d pfnglEvalCoord1d
#define glEvalCoord1f pfnglEvalCoord1f
#define glEvalCoord1dv pfnglEvalCoord1dv
#define glEvalCoord1fv pfnglEvalCoord1fv
#define glEvalCoord2d pfnglEvalCoord2d
#define glEvalCoord2f pfnglEvalCoord2f
#define glEvalCoord2dv pfnglEvalCoord2dv
#define glEvalCoord2fv pfnglEvalCoord2fv
#define glMapGrid1d pfnglMapGrid1d
#define glMapGrid1f pfnglMapGrid1f
#define glMapGrid2d pfnglMapGrid2d
#define glMapGrid2f pfnglMapGrid2f
#define glEvalPoint1 pfnglEvalPoint1
#define glEvalPoint2 pfnglEvalPoint2
#define glEvalMesh1 pfnglEvalMesh1
#define glEvalMesh2 pfnglEvalMesh2
#define glFogf pfnglFogf
#define glFogi pfnglFogi
#define glFogfv pfnglFogfv
#define glFogiv pfnglFogiv
#define glFeedbackBuffer pfnglFeedbackBuffer
#define glPassThrough pfnglPassThrough
#define glSelectBuffer pfnglSelectBuffer
#define glInitNames pfnglInitNames
#define glLoadName pfnglLoadName
#define glPushName pfnglPushName
#define glPopName pfnglPopName

#define glActiveTextureARB pfnglActiveTextureARB
#define glClientActiveTextureARB pfnglClientActiveTextureARB
#define glMultiTexCoord1dARB pfnglMultiTexCoord1dARB
#define glMultiTexCoord1dvARB pfnglMultiTexCoord1dvARB
#define glMultiTexCoord1fARB pfnglMultiTexCoord1fARB
#define glMultiTexCoord1fvARB pfnglMultiTexCoord1fvARB
#define glMultiTexCoord1iARB pfnglMultiTexCoord1iARB
#define glMultiTexCoord1ivARB pfnglMultiTexCoord1ivARB
#define glMultiTexCoord1sARB pfnglMultiTexCoord1sARB
#define glMultiTexCoord1svARB pfnglMultiTexCoord1svARB
#define glMultiTexCoord2dARB pfnglMultiTexCoord2dARB
#define glMultiTexCoord2dvARB pfnglMultiTexCoord2dvARB
#define glMultiTexCoord2fARB pfnglMultiTexCoord2fARB
#define glMultiTexCoord2fvARB pfnglMultiTexCoord2fvARB
#define glMultiTexCoord2iARB pfnglMultiTexCoord2iARB
#define glMultiTexCoord2ivARB pfnglMultiTexCoord2ivARB
#define glMultiTexCoord2sARB pfnglMultiTexCoord2sARB
#define glMultiTexCoord2svARB pfnglMultiTexCoord2svARB
#define glMultiTexCoord3dARB pfnglMultiTexCoord3dARB
#define glMultiTexCoord3dvARB pfnglMultiTexCoord3dvARB
#define glMultiTexCoord3fARB pfnglMultiTexCoord3fARB
#define glMultiTexCoord3fvARB pfnglMultiTexCoord3fvARB
#define glMultiTexCoord3iARB pfnglMultiTexCoord3iARB
#define glMultiTexCoord3ivARB pfnglMultiTexCoord3ivARB
#define glMultiTexCoord3sARB pfnglMultiTexCoord3sARB
#define glMultiTexCoord3svARB pfnglMultiTexCoord3svARB
#define glMultiTexCoord4dARB pfnglMultiTexCoord4dARB
#define glMultiTexCoord4dvARB pfnglMultiTexCoord4dvARB
#define glMultiTexCoord4fARB pfnglMultiTexCoord4fARB
#define glMultiTexCoord4fvARB pfnglMultiTexCoord4fvARB
#define glMultiTexCoord4iARB pfnglMultiTexCoord4iARB
#define glMultiTexCoord4ivARB pfnglMultiTexCoord4ivARB
#define glMultiTexCoord4sARB pfnglMultiTexCoord4sARB
#define glMultiTexCoord4svARB pfnglMultiTexCoord4svARB
#define glPointParameterfEXT pfnglPointParameterfEXT
#define glPointParameterfvEXT pfnglPointParameterfvEXT
#define glLockArraysEXT pfnglLockArraysEXT
#define glUnlockArraysEXT pfnglUnlockArraysEXT

#endif // _OPENGL_H_
