engine/platformLinux/linuxGL.cc
2024-01-07 04:36:33 +00:00

2410 lines
96 KiB
C++

//-----------------------------------------------------------------------------
// V12 Engine
//
// Copyright (c) 2001 GarageGames.Com
// Portions Copyright (c) 2001 by Sierra Online, Inc.
//-----------------------------------------------------------------------------
#include <time.h>
#include <math.h>
#include <SDL/SDL.h>
#include "PlatformWin32/platformGL.h"
#include "platformLinux/platformLinux.h"
#include "console/console.h"
#include "console/consoleTypes.h"
//
// Externally referencable GL renderer state.
//
GLState gGLState;
bool gOpenGLDisablePT = false;
bool gOpenGLDisableCVA = false;
bool gOpenGLDisableTEC = false;
bool gOpenGLDisableARBMT = false;
bool gOpenGLDisableFC = false;
bool gOpenGLDisableTCompress = false;
bool gOpenGLNoEnvColor = false;
float gOpenGLGammaCorrection = 0.5;
bool gOpenGLNoDrawArraysAlpha = false;
typedef const GLubyte* (*gluErrorString_t) (GLenum errCode);
gluErrorString_t gluErrorString;
typedef const GLubyte* (*gluGetString_t) (GLenum name);
gluGetString_t gluGetString;
typedef void (*gluOrtho2D_t) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
gluOrtho2D_t gluOrtho2D;
typedef void (*gluPerspective_t) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
gluPerspective_t gluPerspective;
typedef void (*gluPickMatrix_t) (GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]);
gluPickMatrix_t gluPickMatrix;
typedef void (*gluLookAt_t) (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz);
gluLookAt_t gluLookAt;
typedef int (*gluProject_t) (GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz);
gluProject_t gluProject;
typedef int (*gluUnProject_t) (GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz);
gluUnProject_t gluUnProject;
typedef int (*gluScaleImage_t) (GLenum format, GLint widthin, GLint heightin, GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout);
gluScaleImage_t gluScaleImage;
typedef int (*gluBuild1DMipmaps_t) (GLenum target, GLint components, GLint width, GLenum format, GLenum type, const void *data);
gluBuild1DMipmaps_t gluBuild1DMipmaps;
typedef int (*gluBuild2DMipmaps_t) (GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, const void *data);
gluBuild2DMipmaps_t gluBuild2DMipmaps;
//------------------------------------------------------------------------------
// GL Functions
typedef void (*glAccum_t )(GLenum op, GLfloat value);
glAccum_t glAccum;
typedef void (*glAlphaFunc_t )(GLenum func, GLclampf ref);
glAlphaFunc_t glAlphaFunc;
typedef GLboolean (*glAreTexturesResident_t )(GLsizei n, const GLuint *textures, GLboolean *residences);
glAreTexturesResident_t glAreTexturesResident;
typedef void (*glArrayElement_t )(GLint i);
glArrayElement_t glArrayElement;
typedef void (*glBegin_t )(GLenum mode);
glBegin_t glBegin;
typedef void (*glBindTexture_t )(GLenum target, GLuint texture);
glBindTexture_t glBindTexture;
typedef void (*glBitmap_t )(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
glBitmap_t glBitmap;
typedef void (*glBlendFunc_t )(GLenum sfactor, GLenum dfactor);
glBlendFunc_t glBlendFunc;
typedef void (*glCallList_t )(GLuint list);
glCallList_t glCallList;
typedef void (*glCallLists_t )(GLsizei n, GLenum type, const GLvoid *lists);
glCallLists_t glCallLists;
typedef void (*glClear_t )(GLbitfield mask);
glClear_t glClear;
typedef void (*glClearAccum_t )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
glClearAccum_t glClearAccum;
typedef void (*glClearColor_t )(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
glClearColor_t glClearColor;
typedef void (*glClearDepth_t )(GLclampd depth);
glClearDepth_t glClearDepth;
typedef void (*glClearIndex_t )(GLfloat c);
glClearIndex_t glClearIndex;
typedef void (*glClearStencil_t )(GLint s);
glClearStencil_t glClearStencil;
typedef void (*glClipPlane_t )(GLenum plane, const GLdouble *equation);
glClipPlane_t glClipPlane;
typedef void (*glColor3b_t )(GLbyte red, GLbyte green, GLbyte blue);
glColor3b_t glColor3b;
typedef void (*glColor3bv_t )(const GLbyte *v);
glColor3bv_t glColor3bv;
typedef void (*glColor3d_t )(GLdouble red, GLdouble green, GLdouble blue);
glColor3d_t glColor3d;
typedef void (*glColor3dv_t )(const GLdouble *v);
glColor3dv_t glColor3dv;
typedef void (*glColor3f_t )(GLfloat red, GLfloat green, GLfloat blue);
glColor3f_t glColor3f;
typedef void (*glColor3fv_t )(const GLfloat *v);
glColor3fv_t glColor3fv;
typedef void (*glColor3i_t )(GLint red, GLint green, GLint blue);
glColor3i_t glColor3i;
typedef void (*glColor3iv_t )(const GLint *v);
glColor3iv_t glColor3iv;
typedef void (*glColor3s_t )(GLshort red, GLshort green, GLshort blue);
glColor3s_t glColor3s;
typedef void (*glColor3sv_t )(const GLshort *v);
glColor3sv_t glColor3sv;
typedef void (*glColor3ub_t )(GLubyte red, GLubyte green, GLubyte blue);
glColor3ub_t glColor3ub;
typedef void (*glColor3ubv_t )(const GLubyte *v);
glColor3ubv_t glColor3ubv;
typedef void (*glColor3ui_t )(GLuint red, GLuint green, GLuint blue);
glColor3ui_t glColor3ui;
typedef void (*glColor3uiv_t )(const GLuint *v);
glColor3uiv_t glColor3uiv;
typedef void (*glColor3us_t )(GLushort red, GLushort green, GLushort blue);
glColor3us_t glColor3us;
typedef void (*glColor3usv_t )(const GLushort *v);
glColor3usv_t glColor3usv;
typedef void (*glColor4b_t )(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
glColor4b_t glColor4b;
typedef void (*glColor4bv_t )(const GLbyte *v);
glColor4bv_t glColor4bv;
typedef void (*glColor4d_t )(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
glColor4d_t glColor4d;
typedef void (*glColor4dv_t )(const GLdouble *v);
glColor4dv_t glColor4dv;
typedef void (*glColor4f_t )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
glColor4f_t glColor4f;
typedef void (*glColor4fv_t )(const GLfloat *v);
glColor4fv_t glColor4fv;
typedef void (*glColor4i_t )(GLint red, GLint green, GLint blue, GLint alpha);
glColor4i_t glColor4i;
typedef void (*glColor4iv_t )(const GLint *v);
glColor4iv_t glColor4iv;
typedef void (*glColor4s_t )(GLshort red, GLshort green, GLshort blue, GLshort alpha);
glColor4s_t glColor4s;
typedef void (*glColor4sv_t )(const GLshort *v);
glColor4sv_t glColor4sv;
typedef void (*glColor4ub_t )(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
glColor4ub_t glColor4ub;
typedef void (*glColor4ubv_t )(const GLubyte *v);
glColor4ubv_t glColor4ubv;
typedef void (*glColor4ui_t )(GLuint red, GLuint green, GLuint blue, GLuint alpha);
glColor4ui_t glColor4ui;
typedef void (*glColor4uiv_t )(const GLuint *v);
glColor4uiv_t glColor4uiv;
typedef void (*glColor4us_t )(GLushort red, GLushort green, GLushort blue, GLushort alpha);
glColor4us_t glColor4us;
typedef void (*glColor4usv_t )(const GLushort *v);
glColor4usv_t glColor4usv;
typedef void (*glColorMask_t )(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
glColorMask_t glColorMask;
typedef void (*glColorMaterial_t )(GLenum face, GLenum mode);
glColorMaterial_t glColorMaterial;
typedef void (*glColorPointer_t )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
glColorPointer_t glColorPointer;
typedef void (*glCopyPixels_t )(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
glCopyPixels_t glCopyPixels;
typedef void (*glCopyTexImage1D_t )(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border);
glCopyTexImage1D_t glCopyTexImage1D;
typedef void (*glCopyTexImage2D_t )(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
glCopyTexImage2D_t glCopyTexImage2D;
typedef void (*glCopyTexSubImage1D_t )(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
glCopyTexSubImage1D_t glCopyTexSubImage1D;
typedef void (*glCopyTexSubImage2D_t )(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
glCopyTexSubImage2D_t glCopyTexSubImage2D;
typedef void (*glCullFace_t )(GLenum mode);
glCullFace_t glCullFace;
typedef void (*glDeleteLists_t )(GLuint list, GLsizei range);
glDeleteLists_t glDeleteLists;
typedef void (*glDeleteTextures_t )(GLsizei n, const GLuint *textures);
glDeleteTextures_t glDeleteTextures;
typedef void (*glDepthFunc_t )(GLenum func);
glDepthFunc_t glDepthFunc;
typedef void (*glDepthMask_t )(GLboolean flag);
glDepthMask_t glDepthMask;
typedef void (*glDepthRange_t )(GLclampd zNear, GLclampd zFar);
glDepthRange_t glDepthRange;
typedef void (*glDisable_t )(GLenum cap);
glDisable_t glDisable;
typedef void (*glDisableClientState_t )(GLenum array);
glDisableClientState_t glDisableClientState;
typedef void (*glDrawArrays_t )(GLenum mode, GLint first, GLsizei count);
glDrawArrays_t glDrawArrays;
typedef void (*glDrawBuffer_t )(GLenum mode);
glDrawBuffer_t glDrawBuffer;
typedef void (*glDrawElements_t )(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
glDrawElements_t glDrawElements;
typedef void (*glDrawPixels_t )(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
glDrawPixels_t glDrawPixels;
typedef void (*glEdgeFlag_t )(GLboolean flag);
glEdgeFlag_t glEdgeFlag;
typedef void (*glEdgeFlagPointer_t )(GLsizei stride, const GLvoid *pointer);
glEdgeFlagPointer_t glEdgeFlagPointer;
typedef void (*glEdgeFlagv_t )(const GLboolean *flag);
glEdgeFlagv_t glEdgeFlagv;
typedef void (*glEnable_t )(GLenum cap);
glEnable_t glEnable;
typedef void (*glEnableClientState_t )(GLenum array);
glEnableClientState_t glEnableClientState;
typedef void (*glEnd_t )(void);
glEnd_t glEnd;
typedef void (*glEndList_t )(void);
glEndList_t glEndList;
typedef void (*glEvalCoord1d_t )(GLdouble u);
glEvalCoord1d_t glEvalCoord1d;
typedef void (*glEvalCoord1dv_t )(const GLdouble *u);
glEvalCoord1dv_t glEvalCoord1dv;
typedef void (*glEvalCoord1f_t )(GLfloat u);
glEvalCoord1f_t glEvalCoord1f;
typedef void (*glEvalCoord1fv_t )(const GLfloat *u);
glEvalCoord1fv_t glEvalCoord1fv;
typedef void (*glEvalCoord2d_t )(GLdouble u, GLdouble v);
glEvalCoord2d_t glEvalCoord2d;
typedef void (*glEvalCoord2dv_t )(const GLdouble *u);
glEvalCoord2dv_t glEvalCoord2dv;
typedef void (*glEvalCoord2f_t )(GLfloat u, GLfloat v);
glEvalCoord2f_t glEvalCoord2f;
typedef void (*glEvalCoord2fv_t )(const GLfloat *u);
glEvalCoord2fv_t glEvalCoord2fv;
typedef void (*glEvalMesh1_t )(GLenum mode, GLint i1, GLint i2);
glEvalMesh1_t glEvalMesh1;
typedef void (*glEvalMesh2_t )(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
glEvalMesh2_t glEvalMesh2;
typedef void (*glEvalPoint1_t )(GLint i);
glEvalPoint1_t glEvalPoint1;
typedef void (*glEvalPoint2_t )(GLint i, GLint j);
glEvalPoint2_t glEvalPoint2;
typedef void (*glFeedbackBuffer_t )(GLsizei size, GLenum type, GLfloat *buffer);
glFeedbackBuffer_t glFeedbackBuffer;
typedef void (*glFinish_t )(void);
glFinish_t glFinish;
typedef void (*glFlush_t )(void);
glFlush_t glFlush;
typedef void (*glFogf_t )(GLenum pname, GLfloat param);
glFogf_t glFogf;
typedef void (*glFogfv_t )(GLenum pname, const GLfloat *params);
glFogfv_t glFogfv;
typedef void (*glFogi_t )(GLenum pname, GLint param);
glFogi_t glFogi;
typedef void (*glFogiv_t )(GLenum pname, const GLint *params);
glFogiv_t glFogiv;
typedef void (*glFrontFace_t )(GLenum mode);
glFrontFace_t glFrontFace;
typedef void (*glFrustum_t )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
glFrustum_t glFrustum;
typedef GLuint (*glGenLists_t )(GLsizei range);
glGenLists_t glGenLists;
typedef void (*glGenTextures_t )(GLsizei n, GLuint *textures);
glGenTextures_t glGenTextures;
typedef void (*glGetBooleanv_t )(GLenum pname, GLboolean *params);
glGetBooleanv_t glGetBooleanv;
typedef void (*glGetClipPlane_t )(GLenum plane, GLdouble *equation);
glGetClipPlane_t glGetClipPlane;
typedef void (*glGetDoublev_t )(GLenum pname, GLdouble *params);
glGetDoublev_t glGetDoublev;
typedef GLenum (*glGetError_t )(void);
glGetError_t glGetError;
typedef void (*glGetFloatv_t )(GLenum pname, GLfloat *params);
glGetFloatv_t glGetFloatv;
typedef void (*glGetIntegerv_t )(GLenum pname, GLint *params);
glGetIntegerv_t glGetIntegerv;
typedef void (*glGetLightfv_t )(GLenum light, GLenum pname, GLfloat *params);
glGetLightfv_t glGetLightfv;
typedef void (*glGetLightiv_t )(GLenum light, GLenum pname, GLint *params);
glGetLightiv_t glGetLightiv;
typedef void (*glGetMapdv_t )(GLenum target, GLenum query, GLdouble *v);
glGetMapdv_t glGetMapdv;
typedef void (*glGetMapfv_t )(GLenum target, GLenum query, GLfloat *v);
glGetMapfv_t glGetMapfv;
typedef void (*glGetMapiv_t )(GLenum target, GLenum query, GLint *v);
glGetMapiv_t glGetMapiv;
typedef void (*glGetMaterialfv_t )(GLenum face, GLenum pname, GLfloat *params);
glGetMaterialfv_t glGetMaterialfv;
typedef void (*glGetMaterialiv_t )(GLenum face, GLenum pname, GLint *params);
glGetMaterialiv_t glGetMaterialiv;
typedef void (*glGetPixelMapfv_t )(GLenum map, GLfloat *values);
glGetPixelMapfv_t glGetPixelMapfv;
typedef void (*glGetPixelMapuiv_t )(GLenum map, GLuint *values);
glGetPixelMapuiv_t glGetPixelMapuiv;
typedef void (*glGetPixelMapusv_t )(GLenum map, GLushort *values);
glGetPixelMapusv_t glGetPixelMapusv;
typedef void (*glGetPointerv_t )(GLenum pname, GLvoid* *params);
glGetPointerv_t glGetPointerv;
typedef void (*glGetPolygonStipple_t )(GLubyte *mask);
glGetPolygonStipple_t glGetPolygonStipple;
typedef const GLubyte * (*glGetString_t )(GLenum name);
glGetString_t glGetString;
typedef void (*glGetTexEnvfv_t )(GLenum target, GLenum pname, GLfloat *params);
glGetTexEnvfv_t glGetTexEnvfv;
typedef void (*glGetTexEnviv_t )(GLenum target, GLenum pname, GLint *params);
glGetTexEnviv_t glGetTexEnviv;
typedef void (*glGetTexGendv_t )(GLenum coord, GLenum pname, GLdouble *params);
glGetTexGendv_t glGetTexGendv;
typedef void (*glGetTexGenfv_t )(GLenum coord, GLenum pname, GLfloat *params);
glGetTexGenfv_t glGetTexGenfv;
typedef void (*glGetTexGeniv_t )(GLenum coord, GLenum pname, GLint *params);
glGetTexGeniv_t glGetTexGeniv;
typedef void (*glGetTexImage_t )(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);
glGetTexImage_t glGetTexImage;
typedef void (*glGetTexLevelParameterfv_t )(GLenum target, GLint level, GLenum pname, GLfloat *params);
glGetTexLevelParameterfv_t glGetTexLevelParameterfv;
typedef void (*glGetTexLevelParameteriv_t )(GLenum target, GLint level, GLenum pname, GLint *params);
glGetTexLevelParameteriv_t glGetTexLevelParameteriv;
typedef void (*glGetTexParameterfv_t )(GLenum target, GLenum pname, GLfloat *params);
glGetTexParameterfv_t glGetTexParameterfv;
typedef void (*glGetTexParameteriv_t )(GLenum target, GLenum pname, GLint *params);
glGetTexParameteriv_t glGetTexParameteriv;
typedef void (*glHint_t )(GLenum target, GLenum mode);
glHint_t glHint;
typedef void (*glIndexMask_t )(GLuint mask);
glIndexMask_t glIndexMask;
typedef void (*glIndexPointer_t )(GLenum type, GLsizei stride, const GLvoid *pointer);
glIndexPointer_t glIndexPointer;
typedef void (*glIndexd_t )(GLdouble c);
glIndexd_t glIndexd;
typedef void (*glIndexdv_t )(const GLdouble *c);
glIndexdv_t glIndexdv;
typedef void (*glIndexf_t )(GLfloat c);
glIndexf_t glIndexf;
typedef void (*glIndexfv_t )(const GLfloat *c);
glIndexfv_t glIndexfv;
typedef void (*glIndexi_t )(GLint c);
glIndexi_t glIndexi;
typedef void (*glIndexiv_t )(const GLint *c);
glIndexiv_t glIndexiv;
typedef void (*glIndexs_t )(GLshort c);
glIndexs_t glIndexs;
typedef void (*glIndexsv_t )(const GLshort *c);
glIndexsv_t glIndexsv;
typedef void (*glIndexub_t )(GLubyte c);
glIndexub_t glIndexub;
typedef void (*glIndexubv_t )(const GLubyte *c);
glIndexubv_t glIndexubv;
typedef void (*glInitNames_t )(void);
glInitNames_t glInitNames;
typedef void (*glInterleavedArrays_t )(GLenum format, GLsizei stride, const GLvoid *pointer);
glInterleavedArrays_t glInterleavedArrays;
typedef GLboolean (*glIsEnabled_t )(GLenum cap);
glIsEnabled_t glIsEnabled;
typedef GLboolean (*glIsList_t )(GLuint list);
glIsList_t glIsList;
typedef GLboolean (*glIsTexture_t )(GLuint texture);
glIsTexture_t glIsTexture;
typedef void (*glLightModelf_t )(GLenum pname, GLfloat param);
glLightModelf_t glLightModelf;
typedef void (*glLightModelfv_t )(GLenum pname, const GLfloat *params);
glLightModelfv_t glLightModelfv;
typedef void (*glLightModeli_t )(GLenum pname, GLint param);
glLightModeli_t glLightModeli;
typedef void (*glLightModeliv_t )(GLenum pname, const GLint *params);
glLightModeliv_t glLightModeliv;
typedef void (*glLightf_t )(GLenum light, GLenum pname, GLfloat param);
glLightf_t glLightf;
typedef void (*glLightfv_t )(GLenum light, GLenum pname, const GLfloat *params);
glLightfv_t glLightfv;
typedef void (*glLighti_t )(GLenum light, GLenum pname, GLint param);
glLighti_t glLighti;
typedef void (*glLightiv_t )(GLenum light, GLenum pname, const GLint *params);
glLightiv_t glLightiv;
typedef void (*glLineStipple_t )(GLint factor, GLushort pattern);
glLineStipple_t glLineStipple;
typedef void (*glLineWidth_t )(GLfloat width);
glLineWidth_t glLineWidth;
typedef void (*glListBase_t )(GLuint base);
glListBase_t glListBase;
typedef void (*glLoadIdentity_t )(void);
glLoadIdentity_t glLoadIdentity;
typedef void (*glLoadMatrixd_t )(const GLdouble *m);
glLoadMatrixd_t glLoadMatrixd;
typedef void (*glLoadMatrixf_t )(const GLfloat *m);
glLoadMatrixf_t glLoadMatrixf;
typedef void (*glLoadName_t )(GLuint name);
glLoadName_t glLoadName;
typedef void (*glLogicOp_t )(GLenum opcode);
glLogicOp_t glLogicOp;
typedef void (*glMap1d_t )(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
glMap1d_t glMap1d;
typedef void (*glMap1f_t )(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
glMap1f_t glMap1f;
typedef void (*glMap2d_t )(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
glMap2d_t glMap2d;
typedef void (*glMap2f_t )(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
glMap2f_t glMap2f;
typedef void (*glMapGrid1d_t )(GLint un, GLdouble u1, GLdouble u2);
glMapGrid1d_t glMapGrid1d;
typedef void (*glMapGrid1f_t )(GLint un, GLfloat u1, GLfloat u2);
glMapGrid1f_t glMapGrid1f;
typedef void (*glMapGrid2d_t )(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
glMapGrid2d_t glMapGrid2d;
typedef void (*glMapGrid2f_t )(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
glMapGrid2f_t glMapGrid2f;
typedef void (*glMaterialf_t )(GLenum face, GLenum pname, GLfloat param);
glMaterialf_t glMaterialf;
typedef void (*glMaterialfv_t )(GLenum face, GLenum pname, const GLfloat *params);
glMaterialfv_t glMaterialfv;
typedef void (*glMateriali_t )(GLenum face, GLenum pname, GLint param);
glMateriali_t glMateriali;
typedef void (*glMaterialiv_t )(GLenum face, GLenum pname, const GLint *params);
glMaterialiv_t glMaterialiv;
typedef void (*glMatrixMode_t )(GLenum mode);
glMatrixMode_t glMatrixMode;
typedef void (*glMultMatrixd_t )(const GLdouble *m);
glMultMatrixd_t glMultMatrixd;
typedef void (*glMultMatrixf_t )(const GLfloat *m);
glMultMatrixf_t glMultMatrixf;
typedef void (*glNewList_t )(GLuint list, GLenum mode);
glNewList_t glNewList;
typedef void (*glNormal3b_t )(GLbyte nx, GLbyte ny, GLbyte nz);
glNormal3b_t glNormal3b;
typedef void (*glNormal3bv_t )(const GLbyte *v);
glNormal3bv_t glNormal3bv;
typedef void (*glNormal3d_t )(GLdouble nx, GLdouble ny, GLdouble nz);
glNormal3d_t glNormal3d;
typedef void (*glNormal3dv_t )(const GLdouble *v);
glNormal3dv_t glNormal3dv;
typedef void (*glNormal3f_t )(GLfloat nx, GLfloat ny, GLfloat nz);
glNormal3f_t glNormal3f;
typedef void (*glNormal3fv_t )(const GLfloat *v);
glNormal3fv_t glNormal3fv;
typedef void (*glNormal3i_t )(GLint nx, GLint ny, GLint nz);
glNormal3i_t glNormal3i;
typedef void (*glNormal3iv_t )(const GLint *v);
glNormal3iv_t glNormal3iv;
typedef void (*glNormal3s_t )(GLshort nx, GLshort ny, GLshort nz);
glNormal3s_t glNormal3s;
typedef void (*glNormal3sv_t )(const GLshort *v);
glNormal3sv_t glNormal3sv;
typedef void (*glNormalPointer_t )(GLenum type, GLsizei stride, const GLvoid *pointer);
glNormalPointer_t glNormalPointer;
typedef void (*glOrtho_t )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
glOrtho_t glOrtho;
typedef void (*glPassThrough_t )(GLfloat token);
glPassThrough_t glPassThrough;
typedef void (*glPixelMapfv_t )(GLenum map, GLsizei mapsize, const GLfloat *values);
glPixelMapfv_t glPixelMapfv;
typedef void (*glPixelMapuiv_t )(GLenum map, GLsizei mapsize, const GLuint *values);
glPixelMapuiv_t glPixelMapuiv;
typedef void (*glPixelMapusv_t )(GLenum map, GLsizei mapsize, const GLushort *values);
glPixelMapusv_t glPixelMapusv;
typedef void (*glPixelStoref_t )(GLenum pname, GLfloat param);
glPixelStoref_t glPixelStoref;
typedef void (*glPixelStorei_t )(GLenum pname, GLint param);
glPixelStorei_t glPixelStorei;
typedef void (*glPixelTransferf_t )(GLenum pname, GLfloat param);
glPixelTransferf_t glPixelTransferf;
typedef void (*glPixelTransferi_t )(GLenum pname, GLint param);
glPixelTransferi_t glPixelTransferi;
typedef void (*glPixelZoom_t )(GLfloat xfactor, GLfloat yfactor);
glPixelZoom_t glPixelZoom;
typedef void (*glPointSize_t )(GLfloat size);
glPointSize_t glPointSize;
typedef void (*glPolygonMode_t )(GLenum face, GLenum mode);
glPolygonMode_t glPolygonMode;
typedef void (*glPolygonOffset_t )(GLfloat factor, GLfloat units);
glPolygonOffset_t glPolygonOffset;
typedef void (*glPolygonStipple_t )(const GLubyte *mask);
glPolygonStipple_t glPolygonStipple;
typedef void (*glPopAttrib_t )(void);
glPopAttrib_t glPopAttrib;
typedef void (*glPopClientAttrib_t )(void);
glPopClientAttrib_t glPopClientAttrib;
typedef void (*glPopMatrix_t )(void);
glPopMatrix_t glPopMatrix;
typedef void (*glPopName_t )(void);
glPopName_t glPopName;
typedef void (*glPrioritizeTextures_t )(GLsizei n, const GLuint *textures, const GLclampf *priorities);
glPrioritizeTextures_t glPrioritizeTextures;
typedef void (*glPushAttrib_t )(GLbitfield mask);
glPushAttrib_t glPushAttrib;
typedef void (*glPushClientAttrib_t )(GLbitfield mask);
glPushClientAttrib_t glPushClientAttrib;
typedef void (*glPushMatrix_t )(void);
glPushMatrix_t glPushMatrix;
typedef void (*glPushName_t )(GLuint name);
glPushName_t glPushName;
typedef void (*glRasterPos2d_t )(GLdouble x, GLdouble y);
glRasterPos2d_t glRasterPos2d;
typedef void (*glRasterPos2dv_t )(const GLdouble *v);
glRasterPos2dv_t glRasterPos2dv;
typedef void (*glRasterPos2f_t )(GLfloat x, GLfloat y);
glRasterPos2f_t glRasterPos2f;
typedef void (*glRasterPos2fv_t )(const GLfloat *v);
glRasterPos2fv_t glRasterPos2fv;
typedef void (*glRasterPos2i_t )(GLint x, GLint y);
glRasterPos2i_t glRasterPos2i;
typedef void (*glRasterPos2iv_t )(const GLint *v);
glRasterPos2iv_t glRasterPos2iv;
typedef void (*glRasterPos2s_t )(GLshort x, GLshort y);
glRasterPos2s_t glRasterPos2s;
typedef void (*glRasterPos2sv_t )(const GLshort *v);
glRasterPos2sv_t glRasterPos2sv;
typedef void (*glRasterPos3d_t )(GLdouble x, GLdouble y, GLdouble z);
glRasterPos3d_t glRasterPos3d;
typedef void (*glRasterPos3dv_t )(const GLdouble *v);
glRasterPos3dv_t glRasterPos3dv;
typedef void (*glRasterPos3f_t )(GLfloat x, GLfloat y, GLfloat z);
glRasterPos3f_t glRasterPos3f;
typedef void (*glRasterPos3fv_t )(const GLfloat *v);
glRasterPos3fv_t glRasterPos3fv;
typedef void (*glRasterPos3i_t )(GLint x, GLint y, GLint z);
glRasterPos3i_t glRasterPos3i;
typedef void (*glRasterPos3iv_t )(const GLint *v);
glRasterPos3iv_t glRasterPos3iv;
typedef void (*glRasterPos3s_t )(GLshort x, GLshort y, GLshort z);
glRasterPos3s_t glRasterPos3s;
typedef void (*glRasterPos3sv_t )(const GLshort *v);
glRasterPos3sv_t glRasterPos3sv;
typedef void (*glRasterPos4d_t )(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
glRasterPos4d_t glRasterPos4d;
typedef void (*glRasterPos4dv_t )(const GLdouble *v);
glRasterPos4dv_t glRasterPos4dv;
typedef void (*glRasterPos4f_t )(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
glRasterPos4f_t glRasterPos4f;
typedef void (*glRasterPos4fv_t )(const GLfloat *v);
glRasterPos4fv_t glRasterPos4fv;
typedef void (*glRasterPos4i_t )(GLint x, GLint y, GLint z, GLint w);
glRasterPos4i_t glRasterPos4i;
typedef void (*glRasterPos4iv_t )(const GLint *v);
glRasterPos4iv_t glRasterPos4iv;
typedef void (*glRasterPos4s_t )(GLshort x, GLshort y, GLshort z, GLshort w);
glRasterPos4s_t glRasterPos4s;
typedef void (*glRasterPos4sv_t )(const GLshort *v);
glRasterPos4sv_t glRasterPos4sv;
typedef void (*glReadBuffer_t )(GLenum mode);
glReadBuffer_t glReadBuffer;
typedef void (*glReadPixels_t )(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
glReadPixels_t glReadPixels;
typedef void (*glRectd_t )(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
glRectd_t glRectd;
typedef void (*glRectdv_t )(const GLdouble *v1, const GLdouble *v2);
glRectdv_t glRectdv;
typedef void (*glRectf_t )(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
glRectf_t glRectf;
typedef void (*glRectfv_t )(const GLfloat *v1, const GLfloat *v2);
glRectfv_t glRectfv;
typedef void (*glRecti_t )(GLint x1, GLint y1, GLint x2, GLint y2);
glRecti_t glRecti;
typedef void (*glRectiv_t )(const GLint *v1, const GLint *v2);
glRectiv_t glRectiv;
typedef void (*glRects_t )(GLshort x1, GLshort y1, GLshort x2, GLshort y2);
glRects_t glRects;
typedef void (*glRectsv_t )(const GLshort *v1, const GLshort *v2);
glRectsv_t glRectsv;
typedef GLint (*glRenderMode_t )(GLenum mode);
glRenderMode_t glRenderMode;
typedef void (*glRotated_t )(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
glRotated_t glRotated;
typedef void (*glRotatef_t )(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
glRotatef_t glRotatef;
typedef void (*glScaled_t )(GLdouble x, GLdouble y, GLdouble z);
glScaled_t glScaled;
typedef void (*glScalef_t )(GLfloat x, GLfloat y, GLfloat z);
glScalef_t glScalef;
typedef void (*glScissor_t )(GLint x, GLint y, GLsizei width, GLsizei height);
glScissor_t glScissor;
typedef void (*glSelectBuffer_t )(GLsizei size, GLuint *buffer);
glSelectBuffer_t glSelectBuffer;
typedef void (*glShadeModel_t )(GLenum mode);
glShadeModel_t glShadeModel;
typedef void (*glStencilFunc_t )(GLenum func, GLint ref, GLuint mask);
glStencilFunc_t glStencilFunc;
typedef void (*glStencilMask_t )(GLuint mask);
glStencilMask_t glStencilMask;
typedef void (*glStencilOp_t )(GLenum fail, GLenum zfail, GLenum zpass);
glStencilOp_t glStencilOp;
typedef void (*glTexCoord1d_t )(GLdouble s);
glTexCoord1d_t glTexCoord1d;
typedef void (*glTexCoord1dv_t )(const GLdouble *v);
glTexCoord1dv_t glTexCoord1dv;
typedef void (*glTexCoord1f_t )(GLfloat s);
glTexCoord1f_t glTexCoord1f;
typedef void (*glTexCoord1fv_t )(const GLfloat *v);
glTexCoord1fv_t glTexCoord1fv;
typedef void (*glTexCoord1i_t )(GLint s);
glTexCoord1i_t glTexCoord1i;
typedef void (*glTexCoord1iv_t )(const GLint *v);
glTexCoord1iv_t glTexCoord1iv;
typedef void (*glTexCoord1s_t )(GLshort s);
glTexCoord1s_t glTexCoord1s;
typedef void (*glTexCoord1sv_t )(const GLshort *v);
glTexCoord1sv_t glTexCoord1sv;
typedef void (*glTexCoord2d_t )(GLdouble s, GLdouble t);
glTexCoord2d_t glTexCoord2d;
typedef void (*glTexCoord2dv_t )(const GLdouble *v);
glTexCoord2dv_t glTexCoord2dv;
typedef void (*glTexCoord2f_t )(GLfloat s, GLfloat t);
glTexCoord2f_t glTexCoord2f;
typedef void (*glTexCoord2fv_t )(const GLfloat *v);
glTexCoord2fv_t glTexCoord2fv;
typedef void (*glTexCoord2i_t )(GLint s, GLint t);
glTexCoord2i_t glTexCoord2i;
typedef void (*glTexCoord2iv_t )(const GLint *v);
glTexCoord2iv_t glTexCoord2iv;
typedef void (*glTexCoord2s_t )(GLshort s, GLshort t);
glTexCoord2s_t glTexCoord2s;
typedef void (*glTexCoord2sv_t )(const GLshort *v);
glTexCoord2sv_t glTexCoord2sv;
typedef void (*glTexCoord3d_t )(GLdouble s, GLdouble t, GLdouble r);
glTexCoord3d_t glTexCoord3d;
typedef void (*glTexCoord3dv_t )(const GLdouble *v);
glTexCoord3dv_t glTexCoord3dv;
typedef void (*glTexCoord3f_t )(GLfloat s, GLfloat t, GLfloat r);
glTexCoord3f_t glTexCoord3f;
typedef void (*glTexCoord3fv_t )(const GLfloat *v);
glTexCoord3fv_t glTexCoord3fv;
typedef void (*glTexCoord3i_t )(GLint s, GLint t, GLint r);
glTexCoord3i_t glTexCoord3i;
typedef void (*glTexCoord3iv_t )(const GLint *v);
glTexCoord3iv_t glTexCoord3iv;
typedef void (*glTexCoord3s_t )(GLshort s, GLshort t, GLshort r);
glTexCoord3s_t glTexCoord3s;
typedef void (*glTexCoord3sv_t )(const GLshort *v);
glTexCoord3sv_t glTexCoord3sv;
typedef void (*glTexCoord4d_t )(GLdouble s, GLdouble t, GLdouble r, GLdouble q);
glTexCoord4d_t glTexCoord4d;
typedef void (*glTexCoord4dv_t )(const GLdouble *v);
glTexCoord4dv_t glTexCoord4dv;
typedef void (*glTexCoord4f_t )(GLfloat s, GLfloat t, GLfloat r, GLfloat q);
glTexCoord4f_t glTexCoord4f;
typedef void (*glTexCoord4fv_t )(const GLfloat *v);
glTexCoord4fv_t glTexCoord4fv;
typedef void (*glTexCoord4i_t )(GLint s, GLint t, GLint r, GLint q);
glTexCoord4i_t glTexCoord4i;
typedef void (*glTexCoord4iv_t )(const GLint *v);
glTexCoord4iv_t glTexCoord4iv;
typedef void (*glTexCoord4s_t )(GLshort s, GLshort t, GLshort r, GLshort q);
glTexCoord4s_t glTexCoord4s;
typedef void (*glTexCoord4sv_t )(const GLshort *v);
glTexCoord4sv_t glTexCoord4sv;
typedef void (*glTexCoordPointer_t )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
glTexCoordPointer_t glTexCoordPointer;
typedef void (*glTexEnvf_t )(GLenum target, GLenum pname, GLfloat param);
glTexEnvf_t glTexEnvf;
typedef void (*glTexEnvfv_t )(GLenum target, GLenum pname, const GLfloat *params);
glTexEnvfv_t glTexEnvfv;
typedef void (*glTexEnvi_t )(GLenum target, GLenum pname, GLint param);
glTexEnvi_t glTexEnvi;
typedef void (*glTexEnviv_t )(GLenum target, GLenum pname, const GLint *params);
glTexEnviv_t glTexEnviv;
typedef void (*glTexGend_t )(GLenum coord, GLenum pname, GLdouble param);
glTexGend_t glTexGend;
typedef void (*glTexGendv_t )(GLenum coord, GLenum pname, const GLdouble *params);
glTexGendv_t glTexGendv;
typedef void (*glTexGenf_t )(GLenum coord, GLenum pname, GLfloat param);
glTexGenf_t glTexGenf;
typedef void (*glTexGenfv_t )(GLenum coord, GLenum pname, const GLfloat *params);
glTexGenfv_t glTexGenfv;
typedef void (*glTexGeni_t )(GLenum coord, GLenum pname, GLint param);
glTexGeni_t glTexGeni;
typedef void (*glTexGeniv_t )(GLenum coord, GLenum pname, const GLint *params);
glTexGeniv_t glTexGeniv;
typedef void (*glTexImage1D_t )(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
glTexImage1D_t glTexImage1D;
typedef void (*glTexImage2D_t )(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
glTexImage2D_t glTexImage2D;
typedef void (*glTexParameterf_t )(GLenum target, GLenum pname, GLfloat param);
glTexParameterf_t glTexParameterf;
typedef void (*glTexParameterfv_t )(GLenum target, GLenum pname, const GLfloat *params);
glTexParameterfv_t glTexParameterfv;
typedef void (*glTexParameteri_t )(GLenum target, GLenum pname, GLint param);
glTexParameteri_t glTexParameteri;
typedef void (*glTexParameteriv_t )(GLenum target, GLenum pname, const GLint *params);
glTexParameteriv_t glTexParameteriv;
typedef void (*glTexSubImage1D_t )(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
glTexSubImage1D_t glTexSubImage1D;
typedef void (*glTexSubImage2D_t )(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
glTexSubImage2D_t glTexSubImage2D;
typedef void (*glTranslated_t )(GLdouble x, GLdouble y, GLdouble z);
glTranslated_t glTranslated;
typedef void (*glTranslatef_t )(GLfloat x, GLfloat y, GLfloat z);
glTranslatef_t glTranslatef;
typedef void (*glVertex2d_t )(GLdouble x, GLdouble y);
glVertex2d_t glVertex2d;
typedef void (*glVertex2dv_t )(const GLdouble *v);
glVertex2dv_t glVertex2dv;
typedef void (*glVertex2f_t )(GLfloat x, GLfloat y);
glVertex2f_t glVertex2f;
typedef void (*glVertex2fv_t )(const GLfloat *v);
glVertex2fv_t glVertex2fv;
typedef void (*glVertex2i_t )(GLint x, GLint y);
glVertex2i_t glVertex2i;
typedef void (*glVertex2iv_t )(const GLint *v);
glVertex2iv_t glVertex2iv;
typedef void (*glVertex2s_t )(GLshort x, GLshort y);
glVertex2s_t glVertex2s;
typedef void (*glVertex2sv_t )(const GLshort *v);
glVertex2sv_t glVertex2sv;
typedef void (*glVertex3d_t )(GLdouble x, GLdouble y, GLdouble z);
glVertex3d_t glVertex3d;
typedef void (*glVertex3dv_t )(const GLdouble *v);
glVertex3dv_t glVertex3dv;
typedef void (*glVertex3f_t )(GLfloat x, GLfloat y, GLfloat z);
glVertex3f_t glVertex3f;
typedef void (*glVertex3fv_t )(const GLfloat *v);
glVertex3fv_t glVertex3fv;
typedef void (*glVertex3i_t )(GLint x, GLint y, GLint z);
glVertex3i_t glVertex3i;
typedef void (*glVertex3iv_t )(const GLint *v);
glVertex3iv_t glVertex3iv;
typedef void (*glVertex3s_t )(GLshort x, GLshort y, GLshort z);
glVertex3s_t glVertex3s;
typedef void (*glVertex3sv_t )(const GLshort *v);
glVertex3sv_t glVertex3sv;
typedef void (*glVertex4d_t )(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
glVertex4d_t glVertex4d;
typedef void (*glVertex4dv_t )(const GLdouble *v);
glVertex4dv_t glVertex4dv;
typedef void (*glVertex4f_t )(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
glVertex4f_t glVertex4f;
typedef void (*glVertex4fv_t )(const GLfloat *v);
glVertex4fv_t glVertex4fv;
typedef void (*glVertex4i_t )(GLint x, GLint y, GLint z, GLint w);
glVertex4i_t glVertex4i;
typedef void (*glVertex4iv_t )(const GLint *v);
glVertex4iv_t glVertex4iv;
typedef void (*glVertex4s_t )(GLshort x, GLshort y, GLshort z, GLshort w);
glVertex4s_t glVertex4s;
typedef void (*glVertex4sv_t )(const GLshort *v);
glVertex4sv_t glVertex4sv;
typedef void (*glVertexPointer_t )(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
glVertexPointer_t glVertexPointer;
typedef void (*glViewport_t )(GLint x, GLint y, GLsizei width, GLsizei height);
glViewport_t glViewport;
/* EXT_paletted_texture */
typedef void (*glColorTable_t)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void* data);
glColorTable_t glColorTableEXT;
/* EXT_compiled_vertex_array */
typedef void (*glLockArrays_t)(GLint first, GLsizei count);
typedef void (*glUnlockArrays_t)();
glLockArrays_t glLockArraysEXT;
glUnlockArrays_t glUnlockArraysEXT;
/* ARB_multitexture */
typedef void (*glActiveTextureARB_t)(GLenum target);
typedef void (*glClientActiveTextureARB_t)(GLenum target);
typedef void (*glMultiTexCoord2fARB_t)(GLenum texture, GLfloat, GLfloat);
typedef void (*glMultiTexCoord2fvARB_t)(GLenum texture, const GLfloat*);
glActiveTextureARB_t glActiveTextureARB;
glClientActiveTextureARB_t glClientActiveTextureARB;
glMultiTexCoord2fARB_t glMultiTexCoord2fARB;
glMultiTexCoord2fvARB_t glMultiTexCoord2fvARB;
/* NV_vertex_array_range */
typedef void (*glVertexArrayRange_t)(GLsizei length, const GLvoid* pointer);
typedef void (*glFlushVertexArrayRange_t)();
typedef void* (*glXAllocateMemory_t)(GLsizei, GLfloat, GLfloat, GLfloat);
typedef void (*glXFreeMemory_t)(void*);
glVertexArrayRange_t glVertexArrayRangeNV;
glFlushVertexArrayRange_t glFlushVertexArrayRangeNV;
glXAllocateMemory_t glXAllocateMemoryNV;
glXFreeMemory_t glXFreeMemoryNV;
/* EXT_fog_coord */
typedef void (*glFogCoordf_t)(GLfloat);
typedef void (*glFogCoordPointer_t)(GLenum, GLsizei, const GLvoid*);
glFogCoordf_t glFogCoordfEXT;
glFogCoordPointer_t glFogCoordPointerEXT;
/* ARB_texture_compression */
typedef void (*glCompressedTexImage3DARB_t)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid*);
typedef void (*glCompressedTexImage2DARB_t)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid*);
typedef void (*glCompressedTexImage1DARB_t)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid*);
typedef void (*glCompressedTexSubImage3DARB_t)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid*);
typedef void (*glCompressedTexSubImage2DARB_t)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid*);
typedef void (*glCompressedTexSubImage1DARB_t)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid*);
typedef void (*glGetCompressedTexImageARB_t)(GLenum target, GLint lod, GLvoid* img);
glCompressedTexImage3DARB_t glCompressedTexImage3DARB;
glCompressedTexImage2DARB_t glCompressedTexImage2DARB;
glCompressedTexImage1DARB_t glCompressedTexImage1DARB;
glCompressedTexSubImage3DARB_t glCompressedTexSubImage3DARB;
glCompressedTexSubImage2DARB_t glCompressedTexSubImage2DARB;
glCompressedTexSubImage1DARB_t glCompressedTexSubImage1DARB;
glGetCompressedTexImageARB_t glGetCompressedTexImageARB;
/* EXT_vertex_buffer */
typedef GLboolean (*glAvailableVertexBufferEXT_t)();
typedef GLint (*glAllocateVertexBufferEXT_t)(GLsizei size, GLint format, GLboolean preserve);
typedef void* (*glLockVertexBufferEXT_t)(GLint handle, GLsizei size);
typedef void (*glUnlockVertexBufferEXT_t)(GLint handle);
typedef void (*glSetVertexBufferEXT_t)(GLint handle);
typedef void (*glOffsetVertexBufferEXT_t)(GLint handle, GLuint offset);
typedef void (*glFillVertexBufferEXT_t)(GLint handle, GLint first, GLsizei count);
typedef void (*glFreeVertexBufferEXT_t)(GLint handle);
glAvailableVertexBufferEXT_t glAvailableVertexBufferEXT;
glAllocateVertexBufferEXT_t glAllocateVertexBufferEXT;
glLockVertexBufferEXT_t glLockVertexBufferEXT;
glUnlockVertexBufferEXT_t glUnlockVertexBufferEXT;
glSetVertexBufferEXT_t glSetVertexBufferEXT;
glOffsetVertexBufferEXT_t glOffsetVertexBufferEXT;
glFillVertexBufferEXT_t glFillVertexBufferEXT;
glFreeVertexBufferEXT_t glFreeVertexBufferEXT;
// From the Mesa implementation of GLU. Used with permission from Brian Paul.
/*
* Transform a point (column vector) by a 4x4 matrix. I.e. out = m * in
* Input: m - the 4x4 matrix
* in - the 4x1 vector
* Output: out - the resulting 4x1 vector.
*/
static void
transform_point(GLdouble out[4], const GLdouble m[16], const GLdouble in[4])
{
#define M(row,col) m[col*4+row]
out[0] =
M(0, 0) * in[0] + M(0, 1) * in[1] + M(0, 2) * in[2] + M(0, 3) * in[3];
out[1] =
M(1, 0) * in[0] + M(1, 1) * in[1] + M(1, 2) * in[2] + M(1, 3) * in[3];
out[2] =
M(2, 0) * in[0] + M(2, 1) * in[1] + M(2, 2) * in[2] + M(2, 3) * in[3];
out[3] =
M(3, 0) * in[0] + M(3, 1) * in[1] + M(3, 2) * in[2] + M(3, 3) * in[3];
#undef M
}
/*
* Perform a 4x4 matrix multiplication (product = a x b).
* Input: a, b - matrices to multiply
* Output: product - product of a and b
*/
static void
matmul(GLdouble * product, const GLdouble * a, const GLdouble * b)
{
/* This matmul was contributed by Thomas Malik */
GLdouble temp[16];
GLint i;
#define A(row,col) a[(col<<2)+row]
#define B(row,col) b[(col<<2)+row]
#define T(row,col) temp[(col<<2)+row]
/* i-te Zeile */
for (i = 0; i < 4; i++) {
T(i, 0) =
A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) * B(2, 0) + A(i,
3) *
B(3, 0);
T(i, 1) =
A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) * B(2, 1) + A(i,
3) *
B(3, 1);
T(i, 2) =
A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) * B(2, 2) + A(i,
3) *
B(3, 2);
T(i, 3) =
A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) * B(2, 3) + A(i,
3) *
B(3, 3);
}
#undef A
#undef B
#undef T
memcpy(product, temp, 16 * sizeof(GLdouble));
}
/*
* Compute inverse of 4x4 transformation matrix.
* Code contributed by Jacques Leroy jle@star.be
* Return GL_TRUE for success, GL_FALSE for failure (singular matrix)
*/
static GLboolean
invert_matrix(const GLdouble * m, GLdouble * out)
{
/* NB. OpenGL Matrices are COLUMN major. */
#define SWAP_ROWS(a, b) { GLdouble *_tmp = a; (a)=(b); (b)=_tmp; }
#define MAT(m,r,c) (m)[(c)*4+(r)]
GLdouble wtmp[4][8];
GLdouble m0, m1, m2, m3, s;
GLdouble *r0, *r1, *r2, *r3;
r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3];
r0[0] = MAT(m, 0, 0), r0[1] = MAT(m, 0, 1),
r0[2] = MAT(m, 0, 2), r0[3] = MAT(m, 0, 3),
r0[4] = 1.0, r0[5] = r0[6] = r0[7] = 0.0,
r1[0] = MAT(m, 1, 0), r1[1] = MAT(m, 1, 1),
r1[2] = MAT(m, 1, 2), r1[3] = MAT(m, 1, 3),
r1[5] = 1.0, r1[4] = r1[6] = r1[7] = 0.0,
r2[0] = MAT(m, 2, 0), r2[1] = MAT(m, 2, 1),
r2[2] = MAT(m, 2, 2), r2[3] = MAT(m, 2, 3),
r2[6] = 1.0, r2[4] = r2[5] = r2[7] = 0.0,
r3[0] = MAT(m, 3, 0), r3[1] = MAT(m, 3, 1),
r3[2] = MAT(m, 3, 2), r3[3] = MAT(m, 3, 3),
r3[7] = 1.0, r3[4] = r3[5] = r3[6] = 0.0;
/* choose pivot - or die */
if (fabs(r3[0]) > fabs(r2[0]))
SWAP_ROWS(r3, r2);
if (fabs(r2[0]) > fabs(r1[0]))
SWAP_ROWS(r2, r1);
if (fabs(r1[0]) > fabs(r0[0]))
SWAP_ROWS(r1, r0);
if (0.0 == r0[0])
return GL_FALSE;
/* eliminate first variable */
m1 = r1[0] / r0[0];
m2 = r2[0] / r0[0];
m3 = r3[0] / r0[0];
s = r0[1];
r1[1] -= m1 * s;
r2[1] -= m2 * s;
r3[1] -= m3 * s;
s = r0[2];
r1[2] -= m1 * s;
r2[2] -= m2 * s;
r3[2] -= m3 * s;
s = r0[3];
r1[3] -= m1 * s;
r2[3] -= m2 * s;
r3[3] -= m3 * s;
s = r0[4];
if (s != 0.0) {
r1[4] -= m1 * s;
r2[4] -= m2 * s;
r3[4] -= m3 * s;
}
s = r0[5];
if (s != 0.0) {
r1[5] -= m1 * s;
r2[5] -= m2 * s;
r3[5] -= m3 * s;
}
s = r0[6];
if (s != 0.0) {
r1[6] -= m1 * s;
r2[6] -= m2 * s;
r3[6] -= m3 * s;
}
s = r0[7];
if (s != 0.0) {
r1[7] -= m1 * s;
r2[7] -= m2 * s;
r3[7] -= m3 * s;
}
/* choose pivot - or die */
if (fabs(r3[1]) > fabs(r2[1]))
SWAP_ROWS(r3, r2);
if (fabs(r2[1]) > fabs(r1[1]))
SWAP_ROWS(r2, r1);
if (0.0 == r1[1])
return GL_FALSE;
/* eliminate second variable */
m2 = r2[1] / r1[1];
m3 = r3[1] / r1[1];
r2[2] -= m2 * r1[2];
r3[2] -= m3 * r1[2];
r2[3] -= m2 * r1[3];
r3[3] -= m3 * r1[3];
s = r1[4];
if (0.0 != s) {
r2[4] -= m2 * s;
r3[4] -= m3 * s;
}
s = r1[5];
if (0.0 != s) {
r2[5] -= m2 * s;
r3[5] -= m3 * s;
}
s = r1[6];
if (0.0 != s) {
r2[6] -= m2 * s;
r3[6] -= m3 * s;
}
s = r1[7];
if (0.0 != s) {
r2[7] -= m2 * s;
r3[7] -= m3 * s;
}
/* choose pivot - or die */
if (fabs(r3[2]) > fabs(r2[2]))
SWAP_ROWS(r3, r2);
if (0.0 == r2[2])
return GL_FALSE;
/* eliminate third variable */
m3 = r3[2] / r2[2];
r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4],
r3[5] -= m3 * r2[5], r3[6] -= m3 * r2[6], r3[7] -= m3 * r2[7];
/* last check */
if (0.0 == r3[3])
return GL_FALSE;
s = 1.0 / r3[3]; /* now back substitute row 3 */
r3[4] *= s;
r3[5] *= s;
r3[6] *= s;
r3[7] *= s;
m2 = r2[3]; /* now back substitute row 2 */
s = 1.0 / r2[2];
r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2),
r2[6] = s * (r2[6] - r3[6] * m2), r2[7] = s * (r2[7] - r3[7] * m2);
m1 = r1[3];
r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1,
r1[6] -= r3[6] * m1, r1[7] -= r3[7] * m1;
m0 = r0[3];
r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0,
r0[6] -= r3[6] * m0, r0[7] -= r3[7] * m0;
m1 = r1[2]; /* now back substitute row 1 */
s = 1.0 / r1[1];
r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1),
r1[6] = s * (r1[6] - r2[6] * m1), r1[7] = s * (r1[7] - r2[7] * m1);
m0 = r0[2];
r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0,
r0[6] -= r2[6] * m0, r0[7] -= r2[7] * m0;
m0 = r0[1]; /* now back substitute row 0 */
s = 1.0 / r0[0];
r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0),
r0[6] = s * (r0[6] - r1[6] * m0), r0[7] = s * (r0[7] - r1[7] * m0);
MAT(out, 0, 0) = r0[4];
MAT(out, 0, 1) = r0[5], MAT(out, 0, 2) = r0[6];
MAT(out, 0, 3) = r0[7], MAT(out, 1, 0) = r1[4];
MAT(out, 1, 1) = r1[5], MAT(out, 1, 2) = r1[6];
MAT(out, 1, 3) = r1[7], MAT(out, 2, 0) = r2[4];
MAT(out, 2, 1) = r2[5], MAT(out, 2, 2) = r2[6];
MAT(out, 2, 3) = r2[7], MAT(out, 3, 0) = r3[4];
MAT(out, 3, 1) = r3[5], MAT(out, 3, 2) = r3[6];
MAT(out, 3, 3) = r3[7];
return GL_TRUE;
#undef MAT
#undef SWAP_ROWS
}
/* projection du point (objx,objy,obz) sur l'ecran (winx,winy,winz) */
GLint
mesa_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)
{
/* matrice de transformation */
GLdouble in[4], out[4];
/* initilise la matrice et le vecteur a transformer */
in[0] = objx;
in[1] = objy;
in[2] = objz;
in[3] = 1.0;
transform_point(out, model, in);
transform_point(in, proj, out);
/* d'ou le resultat normalise entre -1 et 1 */
if (in[3] == 0.0)
return GL_FALSE;
in[0] /= in[3];
in[1] /= in[3];
in[2] /= in[3];
/* en coordonnees ecran */
*winx = viewport[0] + (1 + in[0]) * viewport[2] / 2;
*winy = viewport[1] + (1 + in[1]) * viewport[3] / 2;
/* entre 0 et 1 suivant z */
*winz = (1 + in[2]) / 2;
return GL_TRUE;
}
/* transformation du point ecran (winx,winy,winz) en point objet */
GLint
mesa_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)
{
/* matrice de transformation */
GLdouble m[16], A[16];
GLdouble in[4], out[4];
/* transformation coordonnees normalisees entre -1 et 1 */
in[0] = (winx - viewport[0]) * 2 / viewport[2] - 1.0;
in[1] = (winy - viewport[1]) * 2 / viewport[3] - 1.0;
in[2] = 2 * winz - 1.0;
in[3] = 1.0;
/* calcul transformation inverse */
matmul(A, proj, model);
invert_matrix(A, m);
/* d'ou les coordonnees objets */
transform_point(out, m, in);
if (out[3] == 0.0)
return GL_FALSE;
*objx = out[0] / out[3];
*objy = out[1] / out[3];
*objz = out[2] / out[3];
return GL_TRUE;
}
void QGL_Shutdown( void )
{
// GLU Functions
gluErrorString = NULL;
gluGetString = NULL;
gluOrtho2D = NULL;
gluPerspective = NULL;
gluPickMatrix = NULL;
gluLookAt = NULL;
gluProject = NULL;
gluUnProject = NULL;
gluScaleImage = NULL;
gluBuild1DMipmaps = NULL;
gluBuild2DMipmaps = NULL;
// GL Functions
glAccum = NULL;
glAlphaFunc = NULL;
glAreTexturesResident = NULL;
glArrayElement = NULL;
glBegin = NULL;
glBindTexture = NULL;
glBitmap = NULL;
glBlendFunc = NULL;
glCallList = NULL;
glCallLists = NULL;
glClear = NULL;
glClearAccum = NULL;
glClearColor = NULL;
glClearDepth = NULL;
glClearIndex = NULL;
glClearStencil = NULL;
glClipPlane = NULL;
glColor3b = NULL;
glColor3bv = NULL;
glColor3d = NULL;
glColor3dv = NULL;
glColor3f = NULL;
glColor3fv = NULL;
glColor3i = NULL;
glColor3iv = NULL;
glColor3s = NULL;
glColor3sv = NULL;
glColor3ub = NULL;
glColor3ubv = NULL;
glColor3ui = NULL;
glColor3uiv = NULL;
glColor3us = NULL;
glColor3usv = NULL;
glColor4b = NULL;
glColor4bv = NULL;
glColor4d = NULL;
glColor4dv = NULL;
glColor4f = NULL;
glColor4fv = NULL;
glColor4i = NULL;
glColor4iv = NULL;
glColor4s = NULL;
glColor4sv = NULL;
glColor4ub = NULL;
glColor4ubv = NULL;
glColor4ui = NULL;
glColor4uiv = NULL;
glColor4us = NULL;
glColor4usv = NULL;
glColorMask = NULL;
glColorMaterial = NULL;
glColorPointer = NULL;
glCopyPixels = NULL;
glCopyTexImage1D = NULL;
glCopyTexImage2D = NULL;
glCopyTexSubImage1D = NULL;
glCopyTexSubImage2D = NULL;
glCullFace = NULL;
glDeleteLists = NULL;
glDeleteTextures = NULL;
glDepthFunc = NULL;
glDepthMask = NULL;
glDepthRange = NULL;
glDisable = NULL;
glDisableClientState = NULL;
glDrawArrays = NULL;
glDrawBuffer = NULL;
glDrawElements = NULL;
glDrawPixels = NULL;
glEdgeFlag = NULL;
glEdgeFlagPointer = NULL;
glEdgeFlagv = NULL;
glEnable = NULL;
glEnableClientState = NULL;
glEnd = NULL;
glEndList = NULL;
glEvalCoord1d = NULL;
glEvalCoord1dv = NULL;
glEvalCoord1f = NULL;
glEvalCoord1fv = NULL;
glEvalCoord2d = NULL;
glEvalCoord2dv = NULL;
glEvalCoord2f = NULL;
glEvalCoord2fv = NULL;
glEvalMesh1 = NULL;
glEvalMesh2 = NULL;
glEvalPoint1 = NULL;
glEvalPoint2 = NULL;
glFeedbackBuffer = NULL;
glFinish = NULL;
glFlush = NULL;
glFogf = NULL;
glFogfv = NULL;
glFogi = NULL;
glFogiv = NULL;
glFrontFace = NULL;
glFrustum = NULL;
glGenLists = NULL;
glGenTextures = NULL;
glGetBooleanv = NULL;
glGetClipPlane = NULL;
glGetDoublev = NULL;
glGetError = NULL;
glGetFloatv = NULL;
glGetIntegerv = NULL;
glGetLightfv = NULL;
glGetLightiv = NULL;
glGetMapdv = NULL;
glGetMapfv = NULL;
glGetMapiv = NULL;
glGetMaterialfv = NULL;
glGetMaterialiv = NULL;
glGetPixelMapfv = NULL;
glGetPixelMapuiv = NULL;
glGetPixelMapusv = NULL;
glGetPointerv = NULL;
glGetPolygonStipple = NULL;
glGetString = NULL;
glGetTexEnvfv = NULL;
glGetTexEnviv = NULL;
glGetTexGendv = NULL;
glGetTexGenfv = NULL;
glGetTexGeniv = NULL;
glGetTexImage = NULL;
glGetTexLevelParameterfv = NULL;
glGetTexLevelParameteriv = NULL;
glGetTexParameterfv = NULL;
glGetTexParameteriv = NULL;
glHint = NULL;
glIndexMask = NULL;
glIndexPointer = NULL;
glIndexd = NULL;
glIndexdv = NULL;
glIndexf = NULL;
glIndexfv = NULL;
glIndexi = NULL;
glIndexiv = NULL;
glIndexs = NULL;
glIndexsv = NULL;
glIndexub = NULL;
glIndexubv = NULL;
glInitNames = NULL;
glInterleavedArrays = NULL;
glIsEnabled = NULL;
glIsList = NULL;
glIsTexture = NULL;
glLightModelf = NULL;
glLightModelfv = NULL;
glLightModeli = NULL;
glLightModeliv = NULL;
glLightf = NULL;
glLightfv = NULL;
glLighti = NULL;
glLightiv = NULL;
glLineStipple = NULL;
glLineWidth = NULL;
glListBase = NULL;
glLoadIdentity = NULL;
glLoadMatrixd = NULL;
glLoadMatrixf = NULL;
glLoadName = NULL;
glLogicOp = NULL;
glMap1d = NULL;
glMap1f = NULL;
glMap2d = NULL;
glMap2f = NULL;
glMapGrid1d = NULL;
glMapGrid1f = NULL;
glMapGrid2d = NULL;
glMapGrid2f = NULL;
glMaterialf = NULL;
glMaterialfv = NULL;
glMateriali = NULL;
glMaterialiv = NULL;
glMatrixMode = NULL;
glMultMatrixd = NULL;
glMultMatrixf = NULL;
glNewList = NULL;
glNormal3b = NULL;
glNormal3bv = NULL;
glNormal3d = NULL;
glNormal3dv = NULL;
glNormal3f = NULL;
glNormal3fv = NULL;
glNormal3i = NULL;
glNormal3iv = NULL;
glNormal3s = NULL;
glNormal3sv = NULL;
glNormalPointer = NULL;
glOrtho = NULL;
glPassThrough = NULL;
glPixelMapfv = NULL;
glPixelMapuiv = NULL;
glPixelMapusv = NULL;
glPixelStoref = NULL;
glPixelStorei = NULL;
glPixelTransferf = NULL;
glPixelTransferi = NULL;
glPixelZoom = NULL;
glPointSize = NULL;
glPolygonMode = NULL;
glPolygonOffset = NULL;
glPolygonStipple = NULL;
glPopAttrib = NULL;
glPopClientAttrib = NULL;
glPopMatrix = NULL;
glPopName = NULL;
glPrioritizeTextures = NULL;
glPushAttrib = NULL;
glPushClientAttrib = NULL;
glPushMatrix = NULL;
glPushName = NULL;
glRasterPos2d = NULL;
glRasterPos2dv = NULL;
glRasterPos2f = NULL;
glRasterPos2fv = NULL;
glRasterPos2i = NULL;
glRasterPos2iv = NULL;
glRasterPos2s = NULL;
glRasterPos2sv = NULL;
glRasterPos3d = NULL;
glRasterPos3dv = NULL;
glRasterPos3f = NULL;
glRasterPos3fv = NULL;
glRasterPos3i = NULL;
glRasterPos3iv = NULL;
glRasterPos3s = NULL;
glRasterPos3sv = NULL;
glRasterPos4d = NULL;
glRasterPos4dv = NULL;
glRasterPos4f = NULL;
glRasterPos4fv = NULL;
glRasterPos4i = NULL;
glRasterPos4iv = NULL;
glRasterPos4s = NULL;
glRasterPos4sv = NULL;
glReadBuffer = NULL;
glReadPixels = NULL;
glRectd = NULL;
glRectdv = NULL;
glRectf = NULL;
glRectfv = NULL;
glRecti = NULL;
glRectiv = NULL;
glRects = NULL;
glRectsv = NULL;
glRenderMode = NULL;
glRotated = NULL;
glRotatef = NULL;
glScaled = NULL;
glScalef = NULL;
glScissor = NULL;
glSelectBuffer = NULL;
glShadeModel = NULL;
glStencilFunc = NULL;
glStencilMask = NULL;
glStencilOp = NULL;
glTexCoord1d = NULL;
glTexCoord1dv = NULL;
glTexCoord1f = NULL;
glTexCoord1fv = NULL;
glTexCoord1i = NULL;
glTexCoord1iv = NULL;
glTexCoord1s = NULL;
glTexCoord1sv = NULL;
glTexCoord2d = NULL;
glTexCoord2dv = NULL;
glTexCoord2f = NULL;
glTexCoord2fv = NULL;
glTexCoord2i = NULL;
glTexCoord2iv = NULL;
glTexCoord2s = NULL;
glTexCoord2sv = NULL;
glTexCoord3d = NULL;
glTexCoord3dv = NULL;
glTexCoord3f = NULL;
glTexCoord3fv = NULL;
glTexCoord3i = NULL;
glTexCoord3iv = NULL;
glTexCoord3s = NULL;
glTexCoord3sv = NULL;
glTexCoord4d = NULL;
glTexCoord4dv = NULL;
glTexCoord4f = NULL;
glTexCoord4fv = NULL;
glTexCoord4i = NULL;
glTexCoord4iv = NULL;
glTexCoord4s = NULL;
glTexCoord4sv = NULL;
glTexCoordPointer = NULL;
glTexEnvf = NULL;
glTexEnvfv = NULL;
glTexEnvi = NULL;
glTexEnviv = NULL;
glTexGend = NULL;
glTexGendv = NULL;
glTexGenf = NULL;
glTexGenfv = NULL;
glTexGeni = NULL;
glTexGeniv = NULL;
glTexImage1D = NULL;
glTexImage2D = NULL;
glTexParameterf = NULL;
glTexParameterfv = NULL;
glTexParameteri = NULL;
glTexParameteriv = NULL;
glTexSubImage1D = NULL;
glTexSubImage2D = NULL;
glTranslated = NULL;
glTranslatef = NULL;
glVertex2d = NULL;
glVertex2dv = NULL;
glVertex2f = NULL;
glVertex2fv = NULL;
glVertex2i = NULL;
glVertex2iv = NULL;
glVertex2s = NULL;
glVertex2sv = NULL;
glVertex3d = NULL;
glVertex3dv = NULL;
glVertex3f = NULL;
glVertex3fv = NULL;
glVertex3i = NULL;
glVertex3iv = NULL;
glVertex3s = NULL;
glVertex3sv = NULL;
glVertex4d = NULL;
glVertex4dv = NULL;
glVertex4f = NULL;
glVertex4fv = NULL;
glVertex4i = NULL;
glVertex4iv = NULL;
glVertex4s = NULL;
glVertex4sv = NULL;
glVertexPointer = NULL;
glViewport = NULL;
// EXT_compiled_vertex_array
glLockArraysEXT = NULL;
glUnlockArraysEXT = NULL;
// ARB_multitexture
glActiveTextureARB = NULL;
glClientActiveTextureARB = NULL;
glMultiTexCoord2fARB = NULL;
glMultiTexCoord2fvARB = NULL;
// NV_vertex_array_range
glVertexArrayRangeNV = NULL;
glFlushVertexArrayRangeNV = NULL;
glXAllocateMemoryNV = NULL;
glXFreeMemoryNV = NULL;
// EXT_fog_coord
glFogCoordfEXT = NULL;
glFogCoordPointerEXT = NULL;
// ARB_texture_compression
glCompressedTexImage3DARB = NULL;
glCompressedTexImage2DARB = NULL;
glCompressedTexImage1DARB = NULL;
glCompressedTexSubImage3DARB = NULL;
glCompressedTexSubImage2DARB = NULL;
glCompressedTexSubImage1DARB = NULL;
glGetCompressedTexImageARB = NULL;
// EXT_vertex_buffer
glAvailableVertexBufferEXT = NULL;
glAllocateVertexBufferEXT = NULL;
glLockVertexBufferEXT = NULL;
glUnlockVertexBufferEXT = NULL;
glSetVertexBufferEXT = NULL;
glOffsetVertexBufferEXT = NULL;
glFillVertexBufferEXT = NULL;
glFreeVertexBufferEXT = NULL;
}
// NOTE: helpers--anything you want to stub you can
// assign to this, anything you want to trigger a
// breakpoint at run-time, assign to debug_stub
static void void_stub( void )
{
// empty
}
static void debug_stub( void )
{
__asm__( "int $03" );
}
bool QGL_Init( const char* dllname_gl, const char* dllname_glu )
{
#ifndef DEDICATED
// NOTE: the video subsystem *MUST* be shutdown at this
// point, or crap will break.
if( SDL_GL_LoadLibrary( dllname_gl ) == -1 ) {
return false;
}
gluProject = mesa_gluProject;
gluUnProject = mesa_gluUnProject;
#define GPA_GL(a) SDL_GL_GetProcAddress( a )
glAccum = (glAccum_t) GPA_GL( "glAccum" );
glAlphaFunc = (glAlphaFunc_t) GPA_GL( "glAlphaFunc" );
glAreTexturesResident = (glAreTexturesResident_t) GPA_GL( "glAreTexturesResident" );
glArrayElement = (glArrayElement_t) GPA_GL( "glArrayElement" );
glBegin = (glBegin_t) GPA_GL( "glBegin" );
glBindTexture = (glBindTexture_t) GPA_GL( "glBindTexture" );
glBitmap = (glBitmap_t) GPA_GL( "glBitmap" );
glBlendFunc = (glBlendFunc_t) GPA_GL( "glBlendFunc" );
glCallList = (glCallList_t) GPA_GL( "glCallList" );
glCallLists = (glCallLists_t) GPA_GL( "glCallLists" );
glClear = (glClear_t) GPA_GL( "glClear" );
glClearAccum = (glClearAccum_t) GPA_GL( "glClearAccum" );
glClearColor = (glClearColor_t) GPA_GL( "glClearColor" );
glClearDepth = (glClearDepth_t) GPA_GL( "glClearDepth" );
glClearIndex = (glClearIndex_t) GPA_GL( "glClearIndex" );
glClearStencil = (glClearStencil_t) GPA_GL( "glClearStencil" );
glClipPlane = (glClipPlane_t) GPA_GL( "glClipPlane" );
glColor3b = (glColor3b_t) GPA_GL( "glColor3b" );
glColor3bv = (glColor3bv_t) GPA_GL( "glColor3bv" );
glColor3d = (glColor3d_t) GPA_GL( "glColor3d" );
glColor3dv = (glColor3dv_t) GPA_GL( "glColor3dv" );
glColor3f = (glColor3f_t) GPA_GL( "glColor3f" );
glColor3fv = (glColor3fv_t) GPA_GL( "glColor3fv" );
glColor3i = (glColor3i_t) GPA_GL( "glColor3i" );
glColor3iv = (glColor3iv_t) GPA_GL( "glColor3iv" );
glColor3s = (glColor3s_t) GPA_GL( "glColor3s" );
glColor3sv = (glColor3sv_t) GPA_GL( "glColor3sv" );
glColor3ub = (glColor3ub_t) GPA_GL( "glColor3ub" );
glColor3ubv = (glColor3ubv_t) GPA_GL( "glColor3ubv" );
glColor3ui = (glColor3ui_t) GPA_GL( "glColor3ui" );
glColor3uiv = (glColor3uiv_t) GPA_GL( "glColor3uiv" );
glColor3us = (glColor3us_t) GPA_GL( "glColor3us" );
glColor3usv = (glColor3usv_t) GPA_GL( "glColor3usv" );
glColor4b = (glColor4b_t) GPA_GL( "glColor4b" );
glColor4bv = (glColor4bv_t) GPA_GL( "glColor4bv" );
glColor4d = (glColor4d_t) GPA_GL( "glColor4d" );
glColor4dv = (glColor4dv_t) GPA_GL( "glColor4dv" );
glColor4f = (glColor4f_t) GPA_GL( "glColor4f" );
glColor4fv = (glColor4fv_t) GPA_GL( "glColor4fv" );
glColor4i = (glColor4i_t) GPA_GL( "glColor4i" );
glColor4iv = (glColor4iv_t) GPA_GL( "glColor4iv" );
glColor4s = (glColor4s_t) GPA_GL( "glColor4s" );
glColor4sv = (glColor4sv_t) GPA_GL( "glColor4sv" );
glColor4ub = (glColor4ub_t) GPA_GL( "glColor4ub" );
glColor4ubv = (glColor4ubv_t) GPA_GL( "glColor4ubv" );
glColor4ui = (glColor4ui_t) GPA_GL( "glColor4ui" );
glColor4uiv = (glColor4uiv_t) GPA_GL( "glColor4uiv" );
glColor4us = (glColor4us_t) GPA_GL( "glColor4us" );
glColor4usv = (glColor4usv_t) GPA_GL( "glColor4usv" );
glColorMask = (glColorMask_t) GPA_GL( "glColorMask" );
glColorMaterial = (glColorMaterial_t) GPA_GL( "glColorMaterial" );
glColorPointer = (glColorPointer_t) GPA_GL( "glColorPointer" );
glCopyPixels = (glCopyPixels_t) GPA_GL( "glCopyPixels" );
glCopyTexImage1D = (glCopyTexImage1D_t) GPA_GL( "glCopyTexImage1D" );
glCopyTexImage2D = (glCopyTexImage2D_t) GPA_GL( "glCopyTexImage2D" );
glCopyTexSubImage1D = (glCopyTexSubImage1D_t) GPA_GL( "glCopyTexSubImage1D" );
glCopyTexSubImage2D = (glCopyTexSubImage2D_t) GPA_GL( "glCopyTexSubImage2D" );
glCullFace = (glCullFace_t) GPA_GL( "glCullFace" );
glDeleteLists = (glDeleteLists_t) GPA_GL( "glDeleteLists" );
glDeleteTextures = (glDeleteTextures_t) GPA_GL( "glDeleteTextures" );
glDepthFunc = (glDepthFunc_t) GPA_GL( "glDepthFunc" );
glDepthMask = (glDepthMask_t) GPA_GL( "glDepthMask" );
glDepthRange = (glDepthRange_t) GPA_GL( "glDepthRange" );
glDisable = (glDisable_t) GPA_GL( "glDisable" );
glDisableClientState = (glDisableClientState_t) GPA_GL( "glDisableClientState" );
glDrawArrays = (glDrawArrays_t) GPA_GL( "glDrawArrays" );
glDrawBuffer = (glDrawBuffer_t) GPA_GL( "glDrawBuffer" );
glDrawElements = (glDrawElements_t) GPA_GL( "glDrawElements" );
glDrawPixels = (glDrawPixels_t) GPA_GL( "glDrawPixels" );
glEdgeFlag = (glEdgeFlag_t) GPA_GL( "glEdgeFlag" );
glEdgeFlagPointer = (glEdgeFlagPointer_t) GPA_GL( "glEdgeFlagPointer" );
glEdgeFlagv = (glEdgeFlagv_t) GPA_GL( "glEdgeFlagv" );
glEnable = (glEnable_t) GPA_GL( "glEnable" );
glEnableClientState = (glEnableClientState_t) GPA_GL( "glEnableClientState" );
glEnd = (glEnd_t) GPA_GL( "glEnd" );
glEndList = (glEndList_t) GPA_GL( "glEndList" );
glEvalCoord1d = (glEvalCoord1d_t) GPA_GL( "glEvalCoord1d" );
glEvalCoord1dv = (glEvalCoord1dv_t) GPA_GL( "glEvalCoord1dv" );
glEvalCoord1f = (glEvalCoord1f_t) GPA_GL( "glEvalCoord1f" );
glEvalCoord1fv = (glEvalCoord1fv_t) GPA_GL( "glEvalCoord1fv" );
glEvalCoord2d = (glEvalCoord2d_t) GPA_GL( "glEvalCoord2d" );
glEvalCoord2dv = (glEvalCoord2dv_t) GPA_GL( "glEvalCoord2dv" );
glEvalCoord2f = (glEvalCoord2f_t) GPA_GL( "glEvalCoord2f" );
glEvalCoord2fv = (glEvalCoord2fv_t) GPA_GL( "glEvalCoord2fv" );
glEvalMesh1 = (glEvalMesh1_t) GPA_GL( "glEvalMesh1" );
glEvalMesh2 = (glEvalMesh2_t) GPA_GL( "glEvalMesh2" );
glEvalPoint1 = (glEvalPoint1_t) GPA_GL( "glEvalPoint1" );
glEvalPoint2 = (glEvalPoint2_t) GPA_GL( "glEvalPoint2" );
glFeedbackBuffer = (glFeedbackBuffer_t) GPA_GL( "glFeedbackBuffer" );
if( getenv( "TRIBES2_USE_FLUSH" ) ) {
glFinish = (glFinish_t) GPA_GL( "glFinish" );
glFlush = (glFlush_t) GPA_GL( "glFlush" );
} else {
glFinish = (glFinish_t) void_stub;
glFlush = (glFlush_t) void_stub;
}
glFogf = (glFogf_t) GPA_GL( "glFogf" );
glFogfv = (glFogfv_t) GPA_GL( "glFogfv" );
glFogi = (glFogi_t) GPA_GL( "glFogi" );
glFogiv = (glFogiv_t) GPA_GL( "glFogiv" );
glFrontFace = (glFrontFace_t) GPA_GL( "glFrontFace" );
glFrustum = (glFrustum_t) GPA_GL( "glFrustum" );
glGenLists = (glGenLists_t) GPA_GL( "glGenLists" );
glGenTextures = (glGenTextures_t) GPA_GL( "glGenTextures" );
glGetBooleanv = (glGetBooleanv_t) GPA_GL( "glGetBooleanv" );
glGetClipPlane = (glGetClipPlane_t) GPA_GL( "glGetClipPlane" );
glGetDoublev = (glGetDoublev_t) GPA_GL( "glGetDoublev" );
glGetError = (glGetError_t) GPA_GL( "glGetError" );
glGetFloatv = (glGetFloatv_t) GPA_GL( "glGetFloatv" );
glGetIntegerv = (glGetIntegerv_t) GPA_GL( "glGetIntegerv" );
glGetLightfv = (glGetLightfv_t) GPA_GL( "glGetLightfv" );
glGetLightiv = (glGetLightiv_t) GPA_GL( "glGetLightiv" );
glGetMapdv = (glGetMapdv_t) GPA_GL( "glGetMapdv" );
glGetMapfv = (glGetMapfv_t) GPA_GL( "glGetMapfv" );
glGetMapiv = (glGetMapiv_t) GPA_GL( "glGetMapiv" );
glGetMaterialfv = (glGetMaterialfv_t) GPA_GL( "glGetMaterialfv" );
glGetMaterialiv = (glGetMaterialiv_t) GPA_GL( "glGetMaterialiv" );
glGetPixelMapfv = (glGetPixelMapfv_t) GPA_GL( "glGetPixelMapfv" );
glGetPixelMapuiv = (glGetPixelMapuiv_t) GPA_GL( "glGetPixelMapuiv" );
glGetPixelMapusv = (glGetPixelMapusv_t) GPA_GL( "glGetPixelMapusv" );
glGetPointerv = (glGetPointerv_t) GPA_GL( "glGetPointerv" );
glGetPolygonStipple = (glGetPolygonStipple_t) GPA_GL( "glGetPolygonStipple" );
glGetString = (glGetString_t) GPA_GL( "glGetString" );
glGetTexEnvfv = (glGetTexEnvfv_t) GPA_GL( "glGetTexEnvfv" );
glGetTexEnviv = (glGetTexEnviv_t) GPA_GL( "glGetTexEnviv" );
glGetTexGendv = (glGetTexGendv_t) GPA_GL( "glGetTexGendv" );
glGetTexGenfv = (glGetTexGenfv_t) GPA_GL( "glGetTexGenfv" );
glGetTexGeniv = (glGetTexGeniv_t) GPA_GL( "glGetTexGeniv" );
glGetTexImage = (glGetTexImage_t) GPA_GL( "glGetTexImage" );
glGetTexLevelParameterfv = (glGetTexLevelParameterfv_t) GPA_GL( "glGetLevelParameterfv" );
glGetTexLevelParameteriv = (glGetTexLevelParameteriv_t) GPA_GL( "glGetLevelParameteriv" );
glGetTexParameterfv = (glGetTexParameterfv_t) GPA_GL( "glGetTexParameterfv" );
glGetTexParameteriv = (glGetTexParameteriv_t) GPA_GL( "glGetTexParameteriv" );
glHint = (glHint_t) GPA_GL( "glHint" );
glIndexMask = (glIndexMask_t) GPA_GL( "glIndexMask" );
glIndexPointer = (glIndexPointer_t) GPA_GL( "glIndexPointer" );
glIndexd = (glIndexd_t) GPA_GL( "glIndexd" );
glIndexdv = (glIndexdv_t) GPA_GL( "glIndexdv" );
glIndexf = (glIndexf_t) GPA_GL( "glIndexf" );
glIndexfv = (glIndexfv_t) GPA_GL( "glIndexfv" );
glIndexi = (glIndexi_t) GPA_GL( "glIndexi" );
glIndexiv = (glIndexiv_t) GPA_GL( "glIndexiv" );
glIndexs = (glIndexs_t) GPA_GL( "glIndexs" );
glIndexsv = (glIndexsv_t) GPA_GL( "glIndexsv" );
glIndexub = (glIndexub_t) GPA_GL( "glIndexub" );
glIndexubv = (glIndexubv_t) GPA_GL( "glIndexubv" );
glInitNames = (glInitNames_t) GPA_GL( "glInitNames" );
glInterleavedArrays = (glInterleavedArrays_t) GPA_GL( "glInterleavedArrays" );
glIsEnabled = (glIsEnabled_t) GPA_GL( "glIsEnabled" );
glIsList = (glIsList_t) GPA_GL( "glIsList" );
glIsTexture = (glIsTexture_t) GPA_GL( "glIsTexture" );
glLightModelf = (glLightModelf_t) GPA_GL( "glLightModelf" );
glLightModelfv = (glLightModelfv_t) GPA_GL( "glLightModelfv" );
glLightModeli = (glLightModeli_t) GPA_GL( "glLightModeli" );
glLightModeliv = (glLightModeliv_t) GPA_GL( "glLightModeliv" );
glLightf = (glLightf_t) GPA_GL( "glLightf" );
glLightfv = (glLightfv_t) GPA_GL( "glLightfv" );
glLighti = (glLighti_t) GPA_GL( "glLighti" );
glLightiv = (glLightiv_t) GPA_GL( "glLightiv" );
glLineStipple = (glLineStipple_t) GPA_GL( "glLineStipple" );
glLineWidth = (glLineWidth_t) GPA_GL( "glLineWidth" );
glListBase = (glListBase_t) GPA_GL( "glListBase" );
glLoadIdentity = (glLoadIdentity_t) GPA_GL( "glLoadIdentity" );
glLoadMatrixd = (glLoadMatrixd_t) GPA_GL( "glLoadMatrixd" );
glLoadMatrixf = (glLoadMatrixf_t) GPA_GL( "glLoadMatrixf" );
glLoadName = (glLoadName_t) GPA_GL( "glLoadName" );
glLogicOp = (glLogicOp_t) GPA_GL( "glLogicOp" );
glMap1d = (glMap1d_t) GPA_GL( "glMap1d" );
glMap1f = (glMap1f_t) GPA_GL( "glMap1f" );
glMap2d = (glMap2d_t) GPA_GL( "glMap2d" );
glMap2f = (glMap2f_t) GPA_GL( "glMap2f" );
glMapGrid1d = (glMapGrid1d_t) GPA_GL( "glMapGrid1d" );
glMapGrid1f = (glMapGrid1f_t) GPA_GL( "glMapGrid1f" );
glMapGrid2d = (glMapGrid2d_t) GPA_GL( "glMapGrid2d" );
glMapGrid2f = (glMapGrid2f_t) GPA_GL( "glMapGrid2f" );
glMaterialf = (glMaterialf_t) GPA_GL( "glMaterialf" );
glMaterialfv = (glMaterialfv_t) GPA_GL( "glMaterialfv" );
glMateriali = (glMateriali_t) GPA_GL( "glMateriali" );
glMaterialiv = (glMaterialiv_t) GPA_GL( "glMaterialiv" );
glMatrixMode = (glMatrixMode_t) GPA_GL( "glMatrixMode" );
glMultMatrixd = (glMultMatrixd_t) GPA_GL( "glMultMatrixd" );
glMultMatrixf = (glMultMatrixf_t) GPA_GL( "glMultMatrixf" );
glNewList = (glNewList_t) GPA_GL( "glNewList" );
glNormal3b = (glNormal3b_t) GPA_GL( "glNormal3b" );
glNormal3bv = (glNormal3bv_t) GPA_GL( "glNormal3bv" );
glNormal3d = (glNormal3d_t) GPA_GL( "glNormal3d" );
glNormal3dv = (glNormal3dv_t) GPA_GL( "glNormal3dv" );
glNormal3f = (glNormal3f_t) GPA_GL( "glNormal3f" );
glNormal3fv = (glNormal3fv_t) GPA_GL( "glNormal3fv" );
glNormal3i = (glNormal3i_t) GPA_GL( "glNormal3i" );
glNormal3iv = (glNormal3iv_t) GPA_GL( "glNormal3iv" );
glNormal3s = (glNormal3s_t) GPA_GL( "glNormal3s" );
glNormal3sv = (glNormal3sv_t) GPA_GL( "glNormal3sv" );
glNormalPointer = (glNormalPointer_t) GPA_GL( "glNormalPointer" );
glOrtho = (glOrtho_t) GPA_GL( "glOrtho" );
glPassThrough = (glPassThrough_t) GPA_GL( "glPassThrough" );
glPixelMapfv = (glPixelMapfv_t) GPA_GL( "glPixelMapfv" );
glPixelMapuiv = (glPixelMapuiv_t) GPA_GL( "glPixelMapuiv" );
glPixelMapusv = (glPixelMapusv_t) GPA_GL( "glPixelMapusv" );
glPixelStoref = (glPixelStoref_t) GPA_GL( "glPixelStoref" );
glPixelStorei = (glPixelStorei_t) GPA_GL( "glPixelStorei" );
glPixelTransferf = (glPixelTransferf_t) GPA_GL( "glPixelTransferf" );
glPixelTransferi = (glPixelTransferi_t) GPA_GL( "glPixelTransferi" );
glPixelZoom = (glPixelZoom_t) GPA_GL( "glPixelZoom" );
glPointSize = (glPointSize_t) GPA_GL( "glPointSize" );
glPolygonMode = (glPolygonMode_t) GPA_GL( "glPolygonMode" );
glPolygonOffset = (glPolygonOffset_t) GPA_GL( "glPolygonOffset" );
glPolygonStipple = (glPolygonStipple_t) GPA_GL( "glPolygonStipple" );
glPopAttrib = (glPopAttrib_t) GPA_GL( "glPopAttrib" );
glPopClientAttrib = (glPopClientAttrib_t) GPA_GL( "glPopClientAttrib" );
glPopMatrix = (glPopMatrix_t) GPA_GL( "glPopMatrix" );
glPopName = (glPopName_t) GPA_GL( "glPopName" );
glPrioritizeTextures = (glPrioritizeTextures_t) GPA_GL( "glPrioritizeTextures" );
glPushAttrib = (glPushAttrib_t) GPA_GL( "glPushAttrib" );
glPushClientAttrib = (glPushClientAttrib_t) GPA_GL( "glPushClientAttrib" );
glPushMatrix = (glPushMatrix_t) GPA_GL( "glPushMatrix" );
glPushName = (glPushName_t) GPA_GL( "glPushName" );
glRasterPos2d = (glRasterPos2d_t) GPA_GL( "glRasterPos2d" );
glRasterPos2dv = (glRasterPos2dv_t) GPA_GL( "glRasterPos2dv" );
glRasterPos2f = (glRasterPos2f_t) GPA_GL( "glRasterPos2f" );
glRasterPos2fv = (glRasterPos2fv_t) GPA_GL( "glRasterPos2fv" );
glRasterPos2i = (glRasterPos2i_t) GPA_GL( "glRasterPos2i" );
glRasterPos2iv = (glRasterPos2iv_t) GPA_GL( "glRasterPos2iv" );
glRasterPos2s = (glRasterPos2s_t) GPA_GL( "glRasterPos2s" );
glRasterPos2sv = (glRasterPos2sv_t) GPA_GL( "glRasterPos2sv" );
glRasterPos3d = (glRasterPos3d_t) GPA_GL( "glRasterPos3d" );
glRasterPos3dv = (glRasterPos3dv_t) GPA_GL( "glRasterPos3dv" );
glRasterPos3f = (glRasterPos3f_t) GPA_GL( "glRasterPos3f" );
glRasterPos3fv = (glRasterPos3fv_t) GPA_GL( "glRasterPos3fv" );
glRasterPos3i = (glRasterPos3i_t) GPA_GL( "glRasterPos3i" );
glRasterPos3iv = (glRasterPos3iv_t) GPA_GL( "glRasterPos3iv" );
glRasterPos3s = (glRasterPos3s_t) GPA_GL( "glRasterPos3s" );
glRasterPos3sv = (glRasterPos3sv_t) GPA_GL( "glRasterPos3sv" );
glRasterPos4d = (glRasterPos4d_t) GPA_GL( "glRasterPos4d" );
glRasterPos4dv = (glRasterPos4dv_t) GPA_GL( "glRasterPos4dv" );
glRasterPos4f = (glRasterPos4f_t) GPA_GL( "glRasterPos4f" );
glRasterPos4fv = (glRasterPos4fv_t) GPA_GL( "glRasterPos4fv" );
glRasterPos4i = (glRasterPos4i_t) GPA_GL( "glRasterPos4i" );
glRasterPos4iv = (glRasterPos4iv_t) GPA_GL( "glRasterPos4iv" );
glRasterPos4s = (glRasterPos4s_t) GPA_GL( "glRasterPos4s" );
glRasterPos4sv = (glRasterPos4sv_t) GPA_GL( "glRasterPos4sv" );
glReadBuffer = (glReadBuffer_t) GPA_GL( "glReadBuffer" );
glReadPixels = (glReadPixels_t) GPA_GL( "glReadPixels" );
glRectd = (glRectd_t) GPA_GL( "glRectd" );
glRectdv = (glRectdv_t) GPA_GL( "glRectdv" );
glRectf = (glRectf_t) GPA_GL( "glRectf" );
glRectfv = (glRectfv_t) GPA_GL( "glRectfv" );
glRecti = (glRecti_t) GPA_GL( "glRecti" );
glRectiv = (glRectiv_t) GPA_GL( "glRectiv" );
glRects = (glRects_t) GPA_GL( "glRects" );
glRectsv = (glRectsv_t) GPA_GL( "glRectsv" );
glRenderMode = (glRenderMode_t) GPA_GL( "glRenderMode" );
glRotated = (glRotated_t) GPA_GL( "glRotated" );
glRotatef = (glRotatef_t) GPA_GL( "glRotatef" );
glScaled = (glScaled_t) GPA_GL( "glScaled" );
glScalef = (glScalef_t) GPA_GL( "glScalef" );
glScissor = (glScissor_t) GPA_GL( "glScissor" );
glSelectBuffer = (glSelectBuffer_t) GPA_GL( "glSelectBuffer" );
glShadeModel = (glShadeModel_t) GPA_GL( "glShadeModel" );
glStencilFunc = (glStencilFunc_t) GPA_GL( "glStencilFunc" );
glStencilMask = (glStencilMask_t) GPA_GL( "glStencilMask" );
glStencilOp = (glStencilOp_t) GPA_GL( "glStencilOp" );
glTexCoord1d = (glTexCoord1d_t) GPA_GL( "glTexCoord1d" );
glTexCoord1dv = (glTexCoord1dv_t) GPA_GL( "glTexCoord1dv" );
glTexCoord1f = (glTexCoord1f_t) GPA_GL( "glTexCoord1f" );
glTexCoord1fv = (glTexCoord1fv_t) GPA_GL( "glTexCoord1fv" );
glTexCoord1i = (glTexCoord1i_t) GPA_GL( "glTexCoord1i" );
glTexCoord1iv = (glTexCoord1iv_t) GPA_GL( "glTexCoord1iv" );
glTexCoord1s = (glTexCoord1s_t) GPA_GL( "glTexCoord1s" );
glTexCoord1sv = (glTexCoord1sv_t) GPA_GL( "glTexCoord1sv" );
glTexCoord2d = (glTexCoord2d_t) GPA_GL( "glTexCoord2d" );
glTexCoord2dv = (glTexCoord2dv_t) GPA_GL( "glTexCoord2dv" );
glTexCoord2f = (glTexCoord2f_t) GPA_GL( "glTexCoord2f" );
glTexCoord2fv = (glTexCoord2fv_t) GPA_GL( "glTexCoord2fv" );
glTexCoord2i = (glTexCoord2i_t) GPA_GL( "glTexCoord2i" );
glTexCoord2iv = (glTexCoord2iv_t) GPA_GL( "glTexCoord2iv" );
glTexCoord2s = (glTexCoord2s_t) GPA_GL( "glTexCoord2s" );
glTexCoord2sv = (glTexCoord2sv_t) GPA_GL( "glTexCoord2sv" );
glTexCoord3d = (glTexCoord3d_t) GPA_GL( "glTexCoord3d" );
glTexCoord3dv = (glTexCoord3dv_t) GPA_GL( "glTexCoord3dv" );
glTexCoord3f = (glTexCoord3f_t) GPA_GL( "glTexCoord3f" );
glTexCoord3fv = (glTexCoord3fv_t) GPA_GL( "glTexCoord3fv" );
glTexCoord3i = (glTexCoord3i_t) GPA_GL( "glTexCoord3i" );
glTexCoord3iv = (glTexCoord3iv_t) GPA_GL( "glTexCoord3iv" );
glTexCoord3s = (glTexCoord3s_t) GPA_GL( "glTexCoord3s" );
glTexCoord3sv = (glTexCoord3sv_t) GPA_GL( "glTexCoord3sv" );
glTexCoord4d = (glTexCoord4d_t) GPA_GL( "glTexCoord4d" );
glTexCoord4dv = (glTexCoord4dv_t) GPA_GL( "glTexCoord4dv" );
glTexCoord4f = (glTexCoord4f_t) GPA_GL( "glTexCoord4f" );
glTexCoord4fv = (glTexCoord4fv_t) GPA_GL( "glTexCoord4fv" );
glTexCoord4i = (glTexCoord4i_t) GPA_GL( "glTexCoord4i" );
glTexCoord4iv = (glTexCoord4iv_t) GPA_GL( "glTexCoord4iv" );
glTexCoord4s = (glTexCoord4s_t) GPA_GL( "glTexCoord4s" );
glTexCoord4sv = (glTexCoord4sv_t) GPA_GL( "glTexCoord4sv" );
glTexCoordPointer = (glTexCoordPointer_t) GPA_GL( "glTexCoordPointer" );
glTexEnvf = (glTexEnvf_t) GPA_GL( "glTexEnvf" );
glTexEnvfv = (glTexEnvfv_t) GPA_GL( "glTexEnvfv" );
glTexEnvi = (glTexEnvi_t) GPA_GL( "glTexEnvi" );
glTexEnviv = (glTexEnviv_t) GPA_GL( "glTexEnviv" );
glTexGend = (glTexGend_t) GPA_GL( "glTexGend" );
glTexGendv = (glTexGendv_t) GPA_GL( "glTexGendv" );
glTexGenf = (glTexGenf_t) GPA_GL( "glTexGenf" );
glTexGenfv = (glTexGenfv_t) GPA_GL( "glTexGenfv" );
glTexGeni = (glTexGeni_t) GPA_GL( "glTexGeni" );
glTexGeniv = (glTexGeniv_t) GPA_GL( "glTexGeniv" );
glTexImage1D = (glTexImage1D_t) GPA_GL( "glTexImage1D" );
glTexImage2D = (glTexImage2D_t) GPA_GL( "glTexImage2D" );
glTexParameterf = (glTexParameterf_t) GPA_GL( "glTexParameterf" );
glTexParameterfv = (glTexParameterfv_t) GPA_GL( "glTexParameterfv" );
glTexParameteri = (glTexParameteri_t) GPA_GL( "glTexParameteri" );
glTexParameteriv = (glTexParameteriv_t) GPA_GL( "glTexParameteriv" );
glTexSubImage1D = (glTexSubImage1D_t) GPA_GL( "glTexSubImage1D" );
glTexSubImage2D = (glTexSubImage2D_t) GPA_GL( "glTexSubImage2D" );
glTranslated = (glTranslated_t) GPA_GL( "glTranslated" );
glTranslatef = (glTranslatef_t) GPA_GL( "glTranslatef" );
glVertex2d = (glVertex2d_t) GPA_GL( "glVertex2d" );
glVertex2dv = (glVertex2dv_t) GPA_GL( "glVertex2dv" );
glVertex2f = (glVertex2f_t) GPA_GL( "glVertex2f" );
glVertex2fv = (glVertex2fv_t) GPA_GL( "glVertex2fv" );
glVertex2i = (glVertex2i_t) GPA_GL( "glVertex2i" );
glVertex2iv = (glVertex2iv_t) GPA_GL( "glVertex2iv" );
glVertex2s = (glVertex2s_t) GPA_GL( "glVertex2s" );
glVertex2sv = (glVertex2sv_t) GPA_GL( "glVertex2sv" );
glVertex3d = (glVertex3d_t) GPA_GL( "glVertex3d" );
glVertex3dv = (glVertex3dv_t) GPA_GL( "glVertex3dv" );
glVertex3f = (glVertex3f_t) GPA_GL( "glVertex3f" );
glVertex3fv = (glVertex3fv_t) GPA_GL( "glVertex3fv" );
glVertex3i = (glVertex3i_t) GPA_GL( "glVertex3i" );
glVertex3iv = (glVertex3iv_t) GPA_GL( "glVertex3iv" );
glVertex3s = (glVertex3s_t) GPA_GL( "glVertex3s" );
glVertex3sv = (glVertex3sv_t) GPA_GL( "glVertex3sv" );
glVertex4d = (glVertex4d_t) GPA_GL( "glVertex4d" );
glVertex4dv = (glVertex4dv_t) GPA_GL( "glVertex4dv" );
glVertex4f = (glVertex4f_t) GPA_GL( "glVertex4f" );
glVertex4fv = (glVertex4fv_t) GPA_GL( "glVertex4fv" );
glVertex4i = (glVertex4i_t) GPA_GL( "glVertex4i" );
glVertex4iv = (glVertex4iv_t) GPA_GL( "glVertex4iv" );
glVertex4s = (glVertex4s_t) GPA_GL( "glVertex4s" );
glVertex4sv = (glVertex4sv_t) GPA_GL( "glVertex4sv" );
glVertexPointer = (glVertexPointer_t) GPA_GL( "glVertexPointer" );
glViewport = (glViewport_t) GPA_GL( "glViewport" );
#endif
return true;
}
bool QGL_EXT_Init( void )
{
#ifndef DEDICATED
const char* pExtString = reinterpret_cast<const char*>( glGetString( GL_EXTENSIONS ) );
gGLState.primMode = 0;
// EXT_paletted_texture
if (pExtString && dStrstr(pExtString, (const char*)"GL_EXT_paletted_texture") != NULL) {
glColorTableEXT = (glColorTable_t) GPA_GL( "glColorTableEXT" );
gGLState.suppPalettedTexture = true;
} else {
gGLState.suppPalettedTexture = false;
}
// EXT_compiled_vertex_array
if( pExtString && dStrstr( pExtString, (const char*) "GL_EXT_compiled_vertex_array" ) != 0 ) {
glLockArraysEXT = (glLockArrays_t) GPA_GL( "glLockArraysEXT" );
glUnlockArraysEXT = (glUnlockArrays_t) GPA_GL( "glUnlockArraysEXT" );
gGLState.suppLockedArrays = true;
} else {
glLockArraysEXT = 0;
glUnlockArraysEXT = 0;
gGLState.suppLockedArrays = false;
}
// ARB_multitexture
if( pExtString && dStrstr( pExtString, (const char*) "GL_ARB_multitexture" ) != 0 ) {
glActiveTextureARB = (glActiveTextureARB_t) GPA_GL( "glActiveTextureARB" );
glClientActiveTextureARB = (glClientActiveTextureARB_t) GPA_GL( "glClientActiveTextureARB" );
glMultiTexCoord2fARB = (glMultiTexCoord2fARB_t) GPA_GL( "glMultiTexCoord2fARB" );
glMultiTexCoord2fvARB = (glMultiTexCoord2fvARB_t) GPA_GL( "glMultiTexCoord2fvARB" );
gGLState.suppARBMultitexture = true;
} else {
glActiveTextureARB = 0;
glClientActiveTextureARB = 0;
glMultiTexCoord2fARB = 0;
glMultiTexCoord2fvARB = 0;
gGLState.suppARBMultitexture = false;
}
// NV_vertex_array_range
if( pExtString && dStrstr( pExtString, (const char*) "GL_NV_vertex_array_range" ) != 0 ) {
glVertexArrayRangeNV = (glVertexArrayRange_t) GPA_GL( "glVertexArrayRangeNV" );
glFlushVertexArrayRangeNV = (glFlushVertexArrayRange_t) GPA_GL( "glFlushVertexArrayRangeNV" );
glXAllocateMemoryNV = (glXAllocateMemory_t) GPA_GL( "glXAllocateMemoryNV" );
glXFreeMemoryNV = (glXFreeMemory_t) GPA_GL( "glXFreeMemoryNV" );
gGLState.suppVertexArrayRange = true;
} else {
glVertexArrayRangeNV = 0;
glFlushVertexArrayRangeNV = 0;
glXAllocateMemoryNV = 0;
glXFreeMemoryNV = 0;
gGLState.suppVertexArrayRange = false;
}
// EXT_fog_coord
if( pExtString && dStrstr( pExtString, (const char*) "GL_EXT_fog_coord" ) != 0 ) {
glFogCoordfEXT = (glFogCoordf_t) GPA_GL( "glFogCoordfEXT" );
glFogCoordPointerEXT = (glFogCoordPointer_t) GPA_GL( "glFogCoordPointerEXT" );
gGLState.suppFogCoord = true;
} else {
glFogCoordfEXT = 0;
glFogCoordPointerEXT = 0;
gGLState.suppFogCoord = false;
}
// ARB_texture_compression
if( pExtString && dStrstr( pExtString, (const char*) "GL_ARB_texture_compression" ) != 0 ) {
glCompressedTexImage3DARB = (glCompressedTexImage3DARB_t) GPA_GL( "glCompressedTexImage3DARB" );
glCompressedTexImage2DARB = (glCompressedTexImage2DARB_t) GPA_GL( "glCompressedTexImage2DARB" );
glCompressedTexImage1DARB = (glCompressedTexImage1DARB_t) GPA_GL( "glCompressedTexImage1DARB" );
glCompressedTexSubImage3DARB = (glCompressedTexSubImage3DARB_t) GPA_GL( "glCompressedTexSubImage3DARB" );
glCompressedTexSubImage2DARB = (glCompressedTexSubImage2DARB_t) GPA_GL( "glCompressedTexSubImage2DARB" );
glCompressedTexSubImage1DARB = (glCompressedTexSubImage1DARB_t) GPA_GL( "glCompressedTexSubImage1DARB" );
glGetCompressedTexImageARB = (glGetCompressedTexImageARB_t) GPA_GL( "glGetCompressedTexImageARB" );
gGLState.suppTextureCompression = true;
} else {
glCompressedTexImage3DARB = 0;
glCompressedTexImage2DARB = 0;
glCompressedTexImage1DARB = 0;
glCompressedTexSubImage3DARB = 0;
glCompressedTexSubImage2DARB = 0;
glCompressedTexSubImage1DARB = 0;
glGetCompressedTexImageARB = 0;
gGLState.suppTextureCompression = false;
}
#undef GPA_GL
// 3DFX_texture_compression_FXT1
if( pExtString && dStrstr( pExtString, (const char*) "GL_3DFX_texture_compression_FXT1" ) != 0 ) {
gGLState.suppFXT1 = true;
} else {
gGLState.suppFXT1 = false;
}
// EXT_texture_compression_S3TC
if( pExtString && dStrstr( pExtString, (const char*) "GL_EXT_texture_compression_s3tc" ) != 0 ) {
gGLState.suppS3TC = true;
} else {
gGLState.suppS3TC = false;
}
// Binary states, i.e., no supporting functions
// EXT_packed_pixels
// EXT_texture_env_combine
gGLState.suppPackedPixels = pExtString ? ( dStrstr( pExtString, (const char*) "GL_EXT_packed_pixels" ) != 0 ) : false;
gGLState.suppTextureEnvCombine = pExtString ? ( dStrstr( pExtString, (const char*) "GL_EXT_texture_env_combine" ) != 0 ) : false;
gGLState.suppEdgeClamp = pExtString? ( dStrstr( pExtString, (const char*) "GL_EXT_texture_edge_clamp" ) != 0 ) : false;
gGLState.suppTexEnvAdd = pExtString? ( dStrstr( pExtString, (const char*) "GL_ARB_texture_env_add" ) != 0 ) : false;
gGLState.suppTexEnvAdd |= pExtString? ( dStrstr( pExtString, (const char*) "GL_EXT_texture_env_add" ) != 0 ) : false;
// Anisotropic filtering
gGLState.suppTexAnisotropic = pExtString? ( dStrstr( pExtString, (const char*) "GL_EXT_texture_filter_anisotropic" ) != 0 ) : false;
if( gGLState.suppTexAnisotropic ) {
glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gGLState.maxAnisotropy );
}
if (gGLState.suppARBMultitexture)
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &gGLState.maxTextureUnits);
else
gGLState.maxTextureUnits = 1;
Con::printf( "OpenGL Init: Enabled Extensions" );
if( gGLState.suppARBMultitexture ) {
Con::printf( " ARB_multitexture (Max Texture Units: %d)", gGLState.maxTextureUnits);
}
if( gGLState.suppPalettedTexture ) {
Con::printf( " EXT_paletted_texture" );
}
if( gGLState.suppLockedArrays ) {
Con::printf( " EXT_compiled_vertex_array" );
}
if( gGLState.suppVertexArrayRange ) {
Con::printf( " NV_vertex_array_range" );
}
if( gGLState.suppTextureEnvCombine ) {
Con::printf( " EXT_texture_env_combine" );
}
if( gGLState.suppPackedPixels ) {
Con::printf( " EXT_packed_pixels" );
}
if( gGLState.suppFogCoord ) {
Con::printf( " EXT_fog_coord" );
}
if( gGLState.suppTextureCompression ) {
Con::printf( " ARB_texture_compression" );
}
if( gGLState.suppS3TC ) {
Con::printf( " EXT_texture_compression_s3tc" );
}
if( gGLState.suppFXT1 ) {
Con::printf( " 3DFX_texture_compression_FXT1" );
}
if( gGLState.suppTexEnvAdd ) {
Con::printf( " (ARB|EXT)_texture_env_add" );
}
if( gGLState.suppTexAnisotropic ) {
Con::printf( " EXT_texture_filter_anisotropic (Max anisotropy: %f)", gGLState.maxAnisotropy );
}
Con::warnf( ConsoleLogEntry::General, "OpenGL Init: Disabled Extensions" );
if( !gGLState.suppARBMultitexture ) {
Con::warnf( ConsoleLogEntry::General, " ARB_multitexture" );
}
if( !gGLState.suppPalettedTexture ) {
Con::warnf( ConsoleLogEntry::General, " EXT_paletted_texture" );
}
if( !gGLState.suppLockedArrays ) {
Con::warnf( ConsoleLogEntry::General, " EXT_compiled_vertex_array" );
}
if( !gGLState.suppVertexArrayRange ) {
Con::warnf( ConsoleLogEntry::General, " NV_vertex_array_range" );
}
if( !gGLState.suppTextureEnvCombine ) {
Con::warnf( ConsoleLogEntry::General, " EXT_texture_env_combine" );
}
if( !gGLState.suppPackedPixels ) {
Con::warnf( ConsoleLogEntry::General, " EXT_packed_pixels" );
}
if( !gGLState.suppFogCoord ) {
Con::warnf( ConsoleLogEntry::General, " EXT_fog_coord" );
}
if( !gGLState.suppTextureCompression ) {
Con::warnf( ConsoleLogEntry::General, " ARB_texture_compression" );
}
if( !gGLState.suppS3TC ) {
Con::warnf( ConsoleLogEntry::General, " EXT_texture_compression_s3tc" );
}
if( !gGLState.suppFXT1 ) {
Con::warnf( ConsoleLogEntry::General, " 3DFX_texture_compression_FXT1" );
}
if( !gGLState.suppTexEnvAdd ) {
Con::warnf( ConsoleLogEntry::General, " (ARB|EXT)_texture_env_add" );
}
if( !gGLState.suppTexAnisotropic ) {
Con::warnf( ConsoleLogEntry::General, " EXT_texture_filter_anisotropic" );
}
// Set some console vars.
Con::setBoolVariable( "$TextureCompressionSupported", gGLState.suppTextureCompression );
Con::setBoolVariable( "$AnisotropySupported", gGLState.suppTexAnisotropic );
Con::setBoolVariable( "$PalettedTextureSupported", gGLState.suppPalettedTexture );
if (!gGLState.suppPalettedTexture && Con::getBoolVariable("$pref::OpenGL::forcePalettedTexture",false))
{
Con::setBoolVariable("$pref::OpenGL::forcePalettedTexture", false);
Con::setBoolVariable("$pref::OpenGL::force16BitTexture", true);
}
#endif
return true;
}
static bool loggingEnabled = false;
static bool outlineEnabled = false;
static bool perfEnabled = false;
#if defined (DEBUG) || defined(INTERNAL_RELEASE)
ConsoleFunction(GLEnableLogging, void, 2, 2, "GLEnableLogging(bool);")
{
// Ignore
}
static void outlineDrawArrays(GLenum mode, GLint first, GLsizei count)
{
if(mode == GL_POLYGON)
mode = GL_LINE_LOOP;
if(mode == GL_POINTS || mode == GL_LINE_STRIP || mode == GL_LINE_LOOP || mode == GL_LINES)
glDrawArrays( mode, first, count );
else
{
glBegin(GL_LINES);
if(mode == GL_TRIANGLE_STRIP)
{
U32 i;
for(i = 0; i < count - 1; i++)
{
glArrayElement(first + i);
glArrayElement(first + i + 1);
if(i + 2 != count)
{
glArrayElement(first + i);
glArrayElement(first + i + 2);
}
}
}
else if(mode == GL_TRIANGLE_FAN)
{
for(U32 i = 1; i < count; i ++)
{
glArrayElement(first);
glArrayElement(first + i);
if(i != count - 1)
{
glArrayElement(first + i);
glArrayElement(first + i + 1);
}
}
}
else if(mode == GL_TRIANGLES)
{
for(U32 i = 3; i <= count; i += 3)
{
glArrayElement(first + i - 3);
glArrayElement(first + i - 2);
glArrayElement(first + i - 2);
glArrayElement(first + i - 1);
glArrayElement(first + i - 3);
glArrayElement(first + i - 1);
}
}
else if(mode == GL_QUADS)
{
for(U32 i = 4; i <= count; i += 4)
{
glArrayElement(first + i - 4);
glArrayElement(first + i - 3);
glArrayElement(first + i - 3);
glArrayElement(first + i - 2);
glArrayElement(first + i - 2);
glArrayElement(first + i - 1);
glArrayElement(first + i - 4);
glArrayElement(first + i - 1);
}
}
else if(mode == GL_QUAD_STRIP)
{
if(count < 4)
return;
glArrayElement(first + 0);
glArrayElement(first + 1);
for(U32 i = 4; i <= count; i += 2)
{
glArrayElement(first + i - 4);
glArrayElement(first + i - 2);
glArrayElement(first + i - 3);
glArrayElement(first + i - 1);
glArrayElement(first + i - 2);
glArrayElement(first + i - 1);
}
}
glEnd();
}
}
static U32 getIndex(GLenum type, const void *indices, U32 i)
{
if(type == GL_UNSIGNED_BYTE)
return ((U8 *) indices)[i];
else if(type == GL_UNSIGNED_SHORT)
return ((U16 *) indices)[i];
else
return ((U32 *) indices)[i];
}
static void outlineDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
{
if(mode == GL_POLYGON)
mode = GL_LINE_LOOP;
if(mode == GL_POINTS || mode == GL_LINE_STRIP || mode == GL_LINE_LOOP || mode == GL_LINES)
glDrawElements( mode, count, type, indices );
else
{
glBegin(GL_LINES);
if(mode == GL_TRIANGLE_STRIP)
{
U32 i;
for(i = 0; i < count - 1; i++)
{
glArrayElement(getIndex(type, indices, i));
glArrayElement(getIndex(type, indices, i + 1));
if(i + 2 != count)
{
glArrayElement(getIndex(type, indices, i));
glArrayElement(getIndex(type, indices, i + 2));
}
}
}
else if(mode == GL_TRIANGLE_FAN)
{
for(U32 i = 1; i < count; i ++)
{
glArrayElement(getIndex(type, indices, 0));
glArrayElement(getIndex(type, indices, i));
if(i != count - 1)
{
glArrayElement(getIndex(type, indices, i));
glArrayElement(getIndex(type, indices, i + 1));
}
}
}
else if(mode == GL_TRIANGLES)
{
for(U32 i = 3; i <= count; i += 3)
{
glArrayElement(getIndex(type, indices, i - 3));
glArrayElement(getIndex(type, indices, i - 2));
glArrayElement(getIndex(type, indices, i - 2));
glArrayElement(getIndex(type, indices, i - 1));
glArrayElement(getIndex(type, indices, i - 3));
glArrayElement(getIndex(type, indices, i - 1));
}
}
else if(mode == GL_QUADS)
{
for(U32 i = 4; i <= count; i += 4)
{
glArrayElement(getIndex(type, indices, i - 4));
glArrayElement(getIndex(type, indices, i - 3));
glArrayElement(getIndex(type, indices, i - 3));
glArrayElement(getIndex(type, indices, i - 2));
glArrayElement(getIndex(type, indices, i - 2));
glArrayElement(getIndex(type, indices, i - 1));
glArrayElement(getIndex(type, indices, i - 4));
glArrayElement(getIndex(type, indices, i - 1));
}
}
else if(mode == GL_QUAD_STRIP)
{
if(count < 4)
return;
glArrayElement(getIndex(type, indices, 0));
glArrayElement(getIndex(type, indices, 1));
for(U32 i = 4; i <= count; i += 2)
{
glArrayElement(getIndex(type, indices, i - 4));
glArrayElement(getIndex(type, indices, i - 2));
glArrayElement(getIndex(type, indices, i - 3));
glArrayElement(getIndex(type, indices, i - 1));
glArrayElement(getIndex(type, indices, i - 2));
glArrayElement(getIndex(type, indices, i - 1));
}
}
glEnd();
}
}
ConsoleFunction(GLEnableOutline, void, 2, 2, "GLEnableOutline(bool);")
{
argc;
bool enable = dAtob(argv[1]);
#if 0 // Don't ever use outline mode, GL functions go recursive, not needed.
if(outlineEnabled == enable)
return;
if(enable && (loggingEnabled || perfEnabled))
return;
outlineEnabled = enable;
if ( enable )
{
glDrawElements = outlineDrawElements;
glDrawArrays = outlineDrawArrays;
// FIXME: (outline mode only used for debugging, not critical)
// SwapBuffers should be replaced with:
// SwapBuffers;
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
else
{
glDrawElements = glDrawElements;
glDrawArrays = glDrawArrays;
}
#endif /* 0 */
}
static void perfDrawArrays(GLenum mode, GLint first, GLsizei count)
{
gGLState.primCount[gGLState.primMode]++;
U32 tc = 0;
if(mode == GL_TRIANGLES)
tc = count / 3;
else if(mode == GL_TRIANGLE_FAN || mode == GL_TRIANGLE_STRIP)
tc = count - 2;
gGLState.triCount[gGLState.primMode] += tc;
glDrawArrays( mode, first, count );
}
static void perfDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
{
gGLState.primCount[gGLState.primMode]++;
U32 tc = 0;
if(mode == GL_TRIANGLES)
tc = count / 3;
else if(mode == GL_TRIANGLE_FAN || mode == GL_TRIANGLE_STRIP)
tc = count - 2;
gGLState.triCount[gGLState.primMode] += tc;
glDrawElements( mode, count, type, indices );
}
ConsoleFunction(GLEnableMetrics, void, 2, 2, "GLEnableMetrics(bool);")
{
argc;
static bool varsAdded = false;
if(!varsAdded)
{
Con::addVariable("OpenGL::triCount0", TypeS32, &gGLState.triCount[0]);
Con::addVariable("OpenGL::triCount1", TypeS32, &gGLState.triCount[1]);
Con::addVariable("OpenGL::triCount2", TypeS32, &gGLState.triCount[2]);
Con::addVariable("OpenGL::triCount3", TypeS32, &gGLState.triCount[3]);
Con::addVariable("OpenGL::primCount0", TypeS32, &gGLState.primCount[0]);
Con::addVariable("OpenGL::primCount1", TypeS32, &gGLState.primCount[1]);
Con::addVariable("OpenGL::primCount2", TypeS32, &gGLState.primCount[2]);
Con::addVariable("OpenGL::primCount3", TypeS32, &gGLState.primCount[3]);
varsAdded = true;
}
bool enable = dAtob(argv[1]);
#if 0 // Don't ever use perf mode, GL functions go recursive, not needed.
if(perfEnabled == enable)
return;
if(enable && (loggingEnabled || outlineEnabled))
return;
perfEnabled = enable;
if ( enable )
{
glDrawElements = perfDrawElements;
glDrawArrays = perfDrawArrays;
}
else
{
glDrawElements = glDrawElements;
glDrawArrays = glDrawArrays;
}
#endif /* 0 */
}
#endif /* DEBUG || INTERNAL_RELEASE */