/*
 * Copyright (C) 1997-2001 Id Software, Inc.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */

/*
 * * QGL.H
 */

#ifndef __QGL_H__
#define __QGL_H__

#include <GL/glx.h>
#include <GL/glext.h>

qboolean	QGL_Init(const char *dllname);
void		QGL_Shutdown(void);

#ifndef APIENTRY
#define APIENTRY
#endif

extern void     (APIENTRY * qglAccum) (GLenum op, GLfloat value);
extern void     (APIENTRY * qglAlphaFunc) (GLenum func, GLclampf ref);
extern		GLboolean(APIENTRY * qglAreTexturesResident) (GLsizei n, const GLuint * textures, GLboolean * residences);
extern void     (APIENTRY * qglArrayElement) (GLint i);
extern void     (APIENTRY * qglBegin) (GLenum mode);
extern void     (APIENTRY * qglBindTexture) (GLenum target, GLuint texture);
extern void     (APIENTRY * qglBitmap) (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, 
                                        GLfloat ymove, const GLubyte * bitmap);
extern void     (APIENTRY * qglBlendFunc) (GLenum sfactor, GLenum dfactor);
extern void     (APIENTRY * qglCallList) (GLuint list);
extern void     (APIENTRY * qglCallLists) (GLsizei n, GLenum type, const GLvoid * lists);
extern void     (APIENTRY * qglClear) (GLbitfield mask);
extern void     (APIENTRY * qglClearAccum) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
extern void     (APIENTRY * qglClearColor) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
extern void     (APIENTRY * qglClearDepth) (GLclampd depth);
extern void     (APIENTRY * qglClearIndex) (GLfloat c);
extern void     (APIENTRY * qglClearStencil) (GLint s);
extern void     (APIENTRY * qglClipPlane) (GLenum plane, const GLdouble * equation);
extern void     (APIENTRY * qglColor3b) (GLbyte red, GLbyte green, GLbyte blue);
extern void     (APIENTRY * qglColor3bv) (const GLbyte * v);
extern void     (APIENTRY * qglColor3d) (GLdouble red, GLdouble green, GLdouble blue);
extern void     (APIENTRY * qglColor3dv) (const GLdouble * v);
extern void     (APIENTRY * qglColor3f) (GLfloat red, GLfloat green, GLfloat blue);
extern void     (APIENTRY * qglColor3fv) (const GLfloat * v);
extern void     (APIENTRY * qglColor3i) (GLint red, GLint green, GLint blue);
extern void     (APIENTRY * qglColor3iv) (const GLint * v);
extern void     (APIENTRY * qglColor3s) (GLshort red, GLshort green, GLshort blue);
extern void     (APIENTRY * qglColor3sv) (const GLshort * v);
extern void     (APIENTRY * qglColor3ub) (GLubyte red, GLubyte green, GLubyte blue);
extern void     (APIENTRY * qglColor3ubv) (const GLubyte * v);
extern void     (APIENTRY * qglColor3ui) (GLuint red, GLuint green, GLuint blue);
extern void     (APIENTRY * qglColor3uiv) (const GLuint * v);
extern void     (APIENTRY * qglColor3us) (GLushort red, GLushort green, GLushort blue);
extern void     (APIENTRY * qglColor3usv) (const GLushort * v);
extern void     (APIENTRY * qglColor4b) (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha);
extern void     (APIENTRY * qglColor4bv) (const GLbyte * v);
extern void     (APIENTRY * qglColor4d) (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
extern void     (APIENTRY * qglColor4dv) (const GLdouble * v);
extern void     (APIENTRY * qglColor4f) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
extern void     (APIENTRY * qglColor4fv) (const GLfloat * v);
extern void     (APIENTRY * qglColor4i) (GLint red, GLint green, GLint blue, GLint alpha);
extern void     (APIENTRY * qglColor4iv) (const GLint * v);
extern void     (APIENTRY * qglColor4s) (GLshort red, GLshort green, GLshort blue, GLshort alpha);
extern void     (APIENTRY * qglColor4sv) (const GLshort * v);
extern void     (APIENTRY * qglColor4ub) (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
extern void     (APIENTRY * qglColor4ubv) (const GLubyte * v);
extern void     (APIENTRY * qglColor4ui) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
extern void     (APIENTRY * qglColor4uiv) (const GLuint * v);
extern void     (APIENTRY * qglColor4us) (GLushort red, GLushort green, GLushort blue, GLushort alpha);
extern void     (APIENTRY * qglColor4usv) (const GLushort * v);
extern void     (APIENTRY * qglColorMask) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
extern void     (APIENTRY * qglColorMaterial) (GLenum face, GLenum mode);
extern void     (APIENTRY * qglColorPointer) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
extern void     (APIENTRY * qglCopyPixels) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
extern void     (APIENTRY * qglCopyTexImage1D) (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, 
                                                GLsizei width, GLint border);
extern void     (APIENTRY * qglCopyTexImage2D) (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, 
                                                GLsizei width, GLsizei height, GLint border);
extern void     (APIENTRY * qglCopyTexSubImage1D) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
extern void     (APIENTRY * qglCopyTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, 
                                                   GLsizei width, GLsizei height);	/* used for Blooms */
extern void     (APIENTRY * qglCullFace) (GLenum mode);
extern void     (APIENTRY * qglDeleteLists) (GLuint list, GLsizei range);
extern void     (APIENTRY * qglDeleteTextures) (GLsizei n, const GLuint * textures);
extern void     (APIENTRY * qglDepthFunc) (GLenum func);
extern void     (APIENTRY * qglDepthMask) (GLboolean flag);
extern void     (APIENTRY * qglDepthRange) (GLclampd zNear, GLclampd zFar);
extern void     (APIENTRY * qglDisable) (GLenum cap);
extern void     (APIENTRY * qglDisableClientState) (GLenum array);
extern void     (APIENTRY * qglDrawArrays) (GLenum mode, GLint first, GLsizei count);
extern void     (APIENTRY * qglDrawBuffer) (GLenum mode);
extern void     (APIENTRY * qglDrawElements) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);
extern void     (APIENTRY * qglDrawPixels) (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels);
extern void     (APIENTRY * qglEdgeFlag) (GLboolean flag);
extern void     (APIENTRY * qglEdgeFlagPointer) (GLsizei stride, const GLvoid * pointer);
extern void     (APIENTRY * qglEdgeFlagv) (const GLboolean * flag);
extern void     (APIENTRY * qglEnable) (GLenum cap);
extern void     (APIENTRY * qglEnableClientState) (GLenum array);
extern void     (APIENTRY * qglEnd) (void);
extern void     (APIENTRY * qglEndList) (void);
extern void     (APIENTRY * qglEvalCoord1d) (GLdouble u);
extern void     (APIENTRY * qglEvalCoord1dv) (const GLdouble * u);
extern void     (APIENTRY * qglEvalCoord1f) (GLfloat u);
extern void     (APIENTRY * qglEvalCoord1fv) (const GLfloat * u);
extern void     (APIENTRY * qglEvalCoord2d) (GLdouble u, GLdouble v);
extern void     (APIENTRY * qglEvalCoord2dv) (const GLdouble * u);
extern void     (APIENTRY * qglEvalCoord2f) (GLfloat u, GLfloat v);
extern void     (APIENTRY * qglEvalCoord2fv) (const GLfloat * u);
extern void     (APIENTRY * qglEvalMesh1) (GLenum mode, GLint i1, GLint i2);
extern void     (APIENTRY * qglEvalMesh2) (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
extern void     (APIENTRY * qglEvalPoint1) (GLint i);
extern void     (APIENTRY * qglEvalPoint2) (GLint i, GLint j);
extern void     (APIENTRY * qglFeedbackBuffer) (GLsizei size, GLenum type, GLfloat * buffer);
extern void     (APIENTRY * qglFinish) (void);
extern void     (APIENTRY * qglFlush) (void);
extern void     (APIENTRY * qglFogf) (GLenum pname, GLfloat param);
extern void     (APIENTRY * qglFogfv) (GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglFogi) (GLenum pname, GLint param);
extern void     (APIENTRY * qglFogiv) (GLenum pname, const GLint * params);
extern void     (APIENTRY * qglFrontFace) (GLenum mode);
extern void     (APIENTRY * qglFrustum) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
extern		GLuint  (APIENTRY * qglGenLists) (GLsizei range);
extern void     (APIENTRY * qglGenTextures) (GLsizei n, GLuint * textures);
extern void     (APIENTRY * qglGetBooleanv) (GLenum pname, GLboolean * params);
extern void     (APIENTRY * qglGetClipPlane) (GLenum plane, GLdouble * equation);
extern void     (APIENTRY * qglGetDoublev) (GLenum pname, GLdouble * params);
extern		GLenum  (APIENTRY * qglGetError) (void);
extern void     (APIENTRY * qglGetFloatv) (GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetIntegerv) (GLenum pname, GLint * params);
extern void     (APIENTRY * qglGetLightfv) (GLenum light, GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetLightiv) (GLenum light, GLenum pname, GLint * params);
extern void     (APIENTRY * qglGetMapdv) (GLenum target, GLenum query, GLdouble * v);
extern void     (APIENTRY * qglGetMapfv) (GLenum target, GLenum query, GLfloat * v);
extern void     (APIENTRY * qglGetMapiv) (GLenum target, GLenum query, GLint * v);
extern void     (APIENTRY * qglGetMaterialfv) (GLenum face, GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetMaterialiv) (GLenum face, GLenum pname, GLint * params);
extern void     (APIENTRY * qglGetPixelMapfv) (GLenum map, GLfloat * values);
extern void     (APIENTRY * qglGetPixelMapuiv) (GLenum map, GLuint * values);
extern void     (APIENTRY * qglGetPixelMapusv) (GLenum map, GLushort * values);
extern void     (APIENTRY * qglGetPointerv) (GLenum pname, GLvoid * *params);
extern void     (APIENTRY * qglGetPolygonStipple) (GLubyte * mask);
extern const GLubyte *(APIENTRY * qglGetString) (GLenum name);
extern void     (APIENTRY * qglGetTexEnvfv) (GLenum target, GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetTexEnviv) (GLenum target, GLenum pname, GLint * params);
extern void     (APIENTRY * qglGetTexGendv) (GLenum coord, GLenum pname, GLdouble * params);
extern void     (APIENTRY * qglGetTexGenfv) (GLenum coord, GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetTexGeniv) (GLenum coord, GLenum pname, GLint * params);
extern void     (APIENTRY * qglGetTexImage) (GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels);
extern void     (APIENTRY * qglGetTexLevelParameterfv) (GLenum target, GLint level, GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetTexLevelParameteriv) (GLenum target, GLint level, GLenum pname, GLint * params);
extern void     (APIENTRY * qglGetTexParameterfv) (GLenum target, GLenum pname, GLfloat * params);
extern void     (APIENTRY * qglGetTexParameteriv) (GLenum target, GLenum pname, GLint * params);
extern void     (APIENTRY * qglHint) (GLenum target, GLenum mode);
extern void     (APIENTRY * qglIndexMask) (GLuint mask);
extern void     (APIENTRY * qglIndexPointer) (GLenum type, GLsizei stride, const GLvoid * pointer);
extern void     (APIENTRY * qglIndexd) (GLdouble c);
extern void     (APIENTRY * qglIndexdv) (const GLdouble * c);
extern void     (APIENTRY * qglIndexf) (GLfloat c);
extern void     (APIENTRY * qglIndexfv) (const GLfloat * c);
extern void     (APIENTRY * qglIndexi) (GLint c);
extern void     (APIENTRY * qglIndexiv) (const GLint * c);
extern void     (APIENTRY * qglIndexs) (GLshort c);
extern void     (APIENTRY * qglIndexsv) (const GLshort * c);
extern void     (APIENTRY * qglIndexub) (GLubyte c);
extern void     (APIENTRY * qglIndexubv) (const GLubyte * c);
extern void     (APIENTRY * qglInitNames) (void);
extern void     (APIENTRY * qglInterleavedArrays) (GLenum format, GLsizei stride, const GLvoid * pointer);
extern		GLboolean(APIENTRY * qglIsEnabled) (GLenum cap);
extern		GLboolean(APIENTRY * qglIsList) (GLuint list);
extern		GLboolean(APIENTRY * qglIsTexture) (GLuint texture);
extern void     (APIENTRY * qglLightModelf) (GLenum pname, GLfloat param);
extern void     (APIENTRY * qglLightModelfv) (GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglLightModeli) (GLenum pname, GLint param);
extern void     (APIENTRY * qglLightModeliv) (GLenum pname, const GLint * params);
extern void     (APIENTRY * qglLightf) (GLenum light, GLenum pname, GLfloat param);
extern void     (APIENTRY * qglLightfv) (GLenum light, GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglLighti) (GLenum light, GLenum pname, GLint param);
extern void     (APIENTRY * qglLightiv) (GLenum light, GLenum pname, const GLint * params);
extern void     (APIENTRY * qglLineStipple) (GLint factor, GLushort pattern);
extern void     (APIENTRY * qglLineWidth) (GLfloat width);
extern void     (APIENTRY * qglListBase) (GLuint base);
extern void     (APIENTRY * qglLoadIdentity) (void);
extern void     (APIENTRY * qglLoadMatrixd) (const GLdouble * m);
extern void     (APIENTRY * qglLoadMatrixf) (const GLfloat * m);
extern void     (APIENTRY * qglLoadName) (GLuint name);
extern void     (APIENTRY * qglLogicOp) (GLenum opcode);
extern void     (APIENTRY * qglMap1d) (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points);
extern void     (APIENTRY * qglMap1f) (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points);
extern void     (APIENTRY * qglMap2d) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, 
                                       GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points);
extern void     (APIENTRY * qglMap2f) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, 
                                       GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points);
extern void     (APIENTRY * qglMapGrid1d) (GLint un, GLdouble u1, GLdouble u2);
extern void     (APIENTRY * qglMapGrid1f) (GLint un, GLfloat u1, GLfloat u2);
extern void     (APIENTRY * qglMapGrid2d) (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
extern void     (APIENTRY * qglMapGrid2f) (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
extern void     (APIENTRY * qglMaterialf) (GLenum face, GLenum pname, GLfloat param);
extern void     (APIENTRY * qglMaterialfv) (GLenum face, GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglMateriali) (GLenum face, GLenum pname, GLint param);
extern void     (APIENTRY * qglMaterialiv) (GLenum face, GLenum pname, const GLint * params);
extern void     (APIENTRY * qglMatrixMode) (GLenum mode);
extern void     (APIENTRY * qglMultMatrixd) (const GLdouble * m);
extern void     (APIENTRY * qglMultMatrixf) (const GLfloat * m);
extern void     (APIENTRY * qglNewList) (GLuint list, GLenum mode);
extern void     (APIENTRY * qglNormal3b) (GLbyte nx, GLbyte ny, GLbyte nz);
extern void     (APIENTRY * qglNormal3bv) (const GLbyte * v);
extern void     (APIENTRY * qglNormal3d) (GLdouble nx, GLdouble ny, GLdouble nz);
extern void     (APIENTRY * qglNormal3dv) (const GLdouble * v);
extern void     (APIENTRY * qglNormal3f) (GLfloat nx, GLfloat ny, GLfloat nz);
extern void     (APIENTRY * qglNormal3fv) (const GLfloat * v);
extern void     (APIENTRY * qglNormal3i) (GLint nx, GLint ny, GLint nz);
extern void     (APIENTRY * qglNormal3iv) (const GLint * v);
extern void     (APIENTRY * qglNormal3s) (GLshort nx, GLshort ny, GLshort nz);
extern void     (APIENTRY * qglNormal3sv) (const GLshort * v);
extern void     (APIENTRY * qglNormalPointer) (GLenum type, GLsizei stride, const GLvoid * pointer);
extern void     (APIENTRY * qglOrtho) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
extern void     (APIENTRY * qglPassThrough) (GLfloat token);
extern void     (APIENTRY * qglPixelMapfv) (GLenum map, GLsizei mapsize, const GLfloat * values);
extern void     (APIENTRY * qglPixelMapuiv) (GLenum map, GLsizei mapsize, const GLuint * values);
extern void     (APIENTRY * qglPixelMapusv) (GLenum map, GLsizei mapsize, const GLushort * values);
extern void     (APIENTRY * qglPixelStoref) (GLenum pname, GLfloat param);
extern void     (APIENTRY * qglPixelStorei) (GLenum pname, GLint param);
extern void     (APIENTRY * qglPixelTransferf) (GLenum pname, GLfloat param);
extern void     (APIENTRY * qglPixelTransferi) (GLenum pname, GLint param);
extern void     (APIENTRY * qglPixelZoom) (GLfloat xfactor, GLfloat yfactor);
extern void     (APIENTRY * qglPointSize) (GLfloat size);
extern void     (APIENTRY * qglPolygonMode) (GLenum face, GLenum mode);
extern void     (APIENTRY * qglPolygonOffset) (GLfloat factor, GLfloat units);
extern void     (APIENTRY * qglPolygonStipple) (const GLubyte * mask);
extern void     (APIENTRY * qglPopAttrib) (void);
extern void     (APIENTRY * qglPopClientAttrib) (void);
extern void     (APIENTRY * qglPopMatrix) (void);
extern void     (APIENTRY * qglPopName) (void);
extern void     (APIENTRY * qglPrioritizeTextures) (GLsizei n, const GLuint * textures, const GLclampf * priorities);
extern void     (APIENTRY * qglPushAttrib) (GLbitfield mask);
extern void     (APIENTRY * qglPushClientAttrib) (GLbitfield mask);
extern void     (APIENTRY * qglPushMatrix) (void);
extern void     (APIENTRY * qglPushName) (GLuint name);
extern void     (APIENTRY * qglRasterPos2d) (GLdouble x, GLdouble y);
extern void     (APIENTRY * qglRasterPos2dv) (const GLdouble * v);
extern void     (APIENTRY * qglRasterPos2f) (GLfloat x, GLfloat y);
extern void     (APIENTRY * qglRasterPos2fv) (const GLfloat * v);
extern void     (APIENTRY * qglRasterPos2i) (GLint x, GLint y);
extern void     (APIENTRY * qglRasterPos2iv) (const GLint * v);
extern void     (APIENTRY * qglRasterPos2s) (GLshort x, GLshort y);
extern void     (APIENTRY * qglRasterPos2sv) (const GLshort * v);
extern void     (APIENTRY * qglRasterPos3d) (GLdouble x, GLdouble y, GLdouble z);
extern void     (APIENTRY * qglRasterPos3dv) (const GLdouble * v);
extern void     (APIENTRY * qglRasterPos3f) (GLfloat x, GLfloat y, GLfloat z);
extern void     (APIENTRY * qglRasterPos3fv) (const GLfloat * v);
extern void     (APIENTRY * qglRasterPos3i) (GLint x, GLint y, GLint z);
extern void     (APIENTRY * qglRasterPos3iv) (const GLint * v);
extern void     (APIENTRY * qglRasterPos3s) (GLshort x, GLshort y, GLshort z);
extern void     (APIENTRY * qglRasterPos3sv) (const GLshort * v);
extern void     (APIENTRY * qglRasterPos4d) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void     (APIENTRY * qglRasterPos4dv) (const GLdouble * v);
extern void     (APIENTRY * qglRasterPos4f) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void     (APIENTRY * qglRasterPos4fv) (const GLfloat * v);
extern void     (APIENTRY * qglRasterPos4i) (GLint x, GLint y, GLint z, GLint w);
extern void     (APIENTRY * qglRasterPos4iv) (const GLint * v);
extern void     (APIENTRY * qglRasterPos4s) (GLshort x, GLshort y, GLshort z, GLshort w);
extern void     (APIENTRY * qglRasterPos4sv) (const GLshort * v);
extern void     (APIENTRY * qglReadBuffer) (GLenum mode);
extern void     (APIENTRY * qglReadPixels) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, 
                                            GLvoid * pixels);
extern void     (APIENTRY * qglRectd) (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
extern void     (APIENTRY * qglRectdv) (const GLdouble * v1, const GLdouble * v2);
extern void     (APIENTRY * qglRectf) (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
extern void     (APIENTRY * qglRectfv) (const GLfloat * v1, const GLfloat * v2);
extern void     (APIENTRY * qglRecti) (GLint x1, GLint y1, GLint x2, GLint y2);
extern void     (APIENTRY * qglRectiv) (const GLint * v1, const GLint * v2);
extern void     (APIENTRY * qglRects) (GLshort x1, GLshort y1, GLshort x2, GLshort y2);
extern void     (APIENTRY * qglRectsv) (const GLshort * v1, const GLshort * v2);
extern		GLint   (APIENTRY * qglRenderMode) (GLenum mode);
extern void     (APIENTRY * qglRotated) (GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
extern void     (APIENTRY * qglRotatef) (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
extern void     (APIENTRY * qglScaled) (GLdouble x, GLdouble y, GLdouble z);
extern void     (APIENTRY * qglScalef) (GLfloat x, GLfloat y, GLfloat z);
extern void     (APIENTRY * qglScissor) (GLint x, GLint y, GLsizei width, GLsizei height);
extern void     (APIENTRY * qglSelectBuffer) (GLsizei size, GLuint * buffer);
extern void     (APIENTRY * qglShadeModel) (GLenum mode);
extern void     (APIENTRY * qglStencilFunc) (GLenum func, GLint ref, GLuint mask);
extern void     (APIENTRY * qglStencilMask) (GLuint mask);
extern void     (APIENTRY * qglStencilOp) (GLenum fail, GLenum zfail, GLenum zpass);
extern void     (APIENTRY * qglTexCoord1d) (GLdouble s);
extern void     (APIENTRY * qglTexCoord1dv) (const GLdouble * v);
extern void     (APIENTRY * qglTexCoord1f) (GLfloat s);
extern void     (APIENTRY * qglTexCoord1fv) (const GLfloat * v);
extern void     (APIENTRY * qglTexCoord1i) (GLint s);
extern void     (APIENTRY * qglTexCoord1iv) (const GLint * v);
extern void     (APIENTRY * qglTexCoord1s) (GLshort s);
extern void     (APIENTRY * qglTexCoord1sv) (const GLshort * v);
extern void     (APIENTRY * qglTexCoord2d) (GLdouble s, GLdouble t);
extern void     (APIENTRY * qglTexCoord2dv) (const GLdouble * v);
extern void     (APIENTRY * qglTexCoord2f) (GLfloat s, GLfloat t);
extern void     (APIENTRY * qglTexCoord2fv) (const GLfloat * v);
extern void     (APIENTRY * qglTexCoord2i) (GLint s, GLint t);
extern void     (APIENTRY * qglTexCoord2iv) (const GLint * v);
extern void     (APIENTRY * qglTexCoord2s) (GLshort s, GLshort t);
extern void     (APIENTRY * qglTexCoord2sv) (const GLshort * v);
extern void     (APIENTRY * qglTexCoord3d) (GLdouble s, GLdouble t, GLdouble r);
extern void     (APIENTRY * qglTexCoord3dv) (const GLdouble * v);
extern void     (APIENTRY * qglTexCoord3f) (GLfloat s, GLfloat t, GLfloat r);
extern void     (APIENTRY * qglTexCoord3fv) (const GLfloat * v);
extern void     (APIENTRY * qglTexCoord3i) (GLint s, GLint t, GLint r);
extern void     (APIENTRY * qglTexCoord3iv) (const GLint * v);
extern void     (APIENTRY * qglTexCoord3s) (GLshort s, GLshort t, GLshort r);
extern void     (APIENTRY * qglTexCoord3sv) (const GLshort * v);
extern void     (APIENTRY * qglTexCoord4d) (GLdouble s, GLdouble t, GLdouble r, GLdouble q);
extern void     (APIENTRY * qglTexCoord4dv) (const GLdouble * v);
extern void     (APIENTRY * qglTexCoord4f) (GLfloat s, GLfloat t, GLfloat r, GLfloat q);
extern void     (APIENTRY * qglTexCoord4fv) (const GLfloat * v);
extern void     (APIENTRY * qglTexCoord4i) (GLint s, GLint t, GLint r, GLint q);
extern void     (APIENTRY * qglTexCoord4iv) (const GLint * v);
extern void     (APIENTRY * qglTexCoord4s) (GLshort s, GLshort t, GLshort r, GLshort q);
extern void     (APIENTRY * qglTexCoord4sv) (const GLshort * v);
extern void     (APIENTRY * qglTexCoordPointer) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
extern void     (APIENTRY * qglTexEnvf) (GLenum target, GLenum pname, GLfloat param);
extern void     (APIENTRY * qglTexEnvfv) (GLenum target, GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglTexEnvi) (GLenum target, GLenum pname, GLint param);
extern void     (APIENTRY * qglTexEnviv) (GLenum target, GLenum pname, const GLint * params);
extern void     (APIENTRY * qglTexGend) (GLenum coord, GLenum pname, GLdouble param);
extern void     (APIENTRY * qglTexGendv) (GLenum coord, GLenum pname, const GLdouble * params);
extern void     (APIENTRY * qglTexGenf) (GLenum coord, GLenum pname, GLfloat param);
extern void     (APIENTRY * qglTexGenfv) (GLenum coord, GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglTexGeni) (GLenum coord, GLenum pname, GLint param);
extern void     (APIENTRY * qglTexGeniv) (GLenum coord, GLenum pname, const GLint * params);
extern void     (APIENTRY * qglTexImage1D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, 
                                            GLenum format, GLenum type, const GLvoid * pixels);
extern void     (APIENTRY * qglTexImage2D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, 
                                            GLint border, GLenum format, GLenum type, const GLvoid * pixels);
extern void     (APIENTRY * qglTexParameterf) (GLenum target, GLenum pname, GLfloat param);
extern void     (APIENTRY * qglTexParameterfv) (GLenum target, GLenum pname, const GLfloat * params);
extern void     (APIENTRY * qglTexParameteri) (GLenum target, GLenum pname, GLint param);
extern void     (APIENTRY * qglTexParameteriv) (GLenum target, GLenum pname, const GLint * params);
extern void     (APIENTRY * qglTexSubImage1D) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, 
                                               GLenum type, const GLvoid * pixels);
extern void     (APIENTRY * qglTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, 
                                               GLsizei height, GLenum format, GLenum type, const GLvoid * pixels);
extern void     (APIENTRY * qglTranslated) (GLdouble x, GLdouble y, GLdouble z);
extern void     (APIENTRY * qglTranslatef) (GLfloat x, GLfloat y, GLfloat z);
extern void     (APIENTRY * qglVertex2d) (GLdouble x, GLdouble y);
extern void     (APIENTRY * qglVertex2dv) (const GLdouble * v);
extern void     (APIENTRY * qglVertex2f) (GLfloat x, GLfloat y);
extern void     (APIENTRY * qglVertex2fv) (const GLfloat * v);
extern void     (APIENTRY * qglVertex2i) (GLint x, GLint y);
extern void     (APIENTRY * qglVertex2iv) (const GLint * v);
extern void     (APIENTRY * qglVertex2s) (GLshort x, GLshort y);
extern void     (APIENTRY * qglVertex2sv) (const GLshort * v);
extern void     (APIENTRY * qglVertex3d) (GLdouble x, GLdouble y, GLdouble z);
extern void     (APIENTRY * qglVertex3dv) (const GLdouble * v);
extern void     (APIENTRY * qglVertex3f) (GLfloat x, GLfloat y, GLfloat z);
extern void     (APIENTRY * qglVertex3fv) (const GLfloat * v);
extern void     (APIENTRY * qglVertex3i) (GLint x, GLint y, GLint z);
extern void     (APIENTRY * qglVertex3iv) (const GLint * v);
extern void     (APIENTRY * qglVertex3s) (GLshort x, GLshort y, GLshort z);
extern void     (APIENTRY * qglVertex3sv) (const GLshort * v);
extern void     (APIENTRY * qglVertex4d) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
extern void     (APIENTRY * qglVertex4dv) (const GLdouble * v);
extern void     (APIENTRY * qglVertex4f) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void     (APIENTRY * qglVertex4fv) (const GLfloat * v);
extern void     (APIENTRY * qglVertex4i) (GLint x, GLint y, GLint z, GLint w);
extern void     (APIENTRY * qglVertex4iv) (const GLint * v);
extern void     (APIENTRY * qglVertex4s) (GLshort x, GLshort y, GLshort z, GLshort w);
extern void     (APIENTRY * qglVertex4sv) (const GLshort * v);
extern void     (APIENTRY * qglVertexPointer) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
extern void     (APIENTRY * qglViewport) (GLint x, GLint y, GLsizei width, GLsizei height);

extern void     (APIENTRY * qglPointParameterfEXT) (GLenum param, GLfloat value);
extern void     (APIENTRY * qglPointParameterfvEXT) (GLenum param, const GLfloat * value);

extern void     (APIENTRY * qglColorTableEXT) (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
extern void     (APIENTRY * qglLockArraysEXT) (int, int);
extern void     (APIENTRY * qglUnlockArraysEXT) (void);

extern void     (APIENTRY * qglMTexCoord2fSGIS) (GLenum, GLfloat, GLfloat);
extern void     (APIENTRY * qglSelectTextureSGIS) (GLenum);

extern void     (APIENTRY * qglActiveTextureARB) (GLenum);
extern void     (APIENTRY * qglClientActiveTextureARB) (GLenum);
extern void     (APIENTRY * qglMultiTexCoord3fvARB) (GLenum target, const GLfloat * v);	/* mpo */

#if defined (__unix__)
/* local function in dll */
extern void    *qwglGetProcAddress(char *symbol);

extern void     (*qgl3DfxSetPaletteEXT) (GLuint *);

/* GLX Functions */
extern XVisualInfo *(*qglXChooseVisual) (Display * dpy, int screen, int *attribList);
extern		GLXContext(*qglXCreateContext) (Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct);
extern void     (*qglXDestroyContext) (Display * dpy, GLXContext ctx);
extern		Bool    (*qglXMakeCurrent) (Display * dpy, GLXDrawable drawable, GLXContext ctx);
extern void     (*qglXCopyContext) (Display * dpy, GLXContext src, GLXContext dst, GLuint mask);
extern void     (*qglXSwapBuffers) (Display * dpy, GLXDrawable drawable);

/* 3dfxSetPaletteEXT shunt */
void
Fake_glColorTableEXT(GLenum target, GLenum internalformat,
    GLsizei width, GLenum format, GLenum type,
    const GLvoid * table);

#endif				/* unix */

/*
 * * extension constants
 */
#define GL_POINT_SIZE_MIN_EXT				0x8126
#define GL_POINT_SIZE_MAX_EXT				0x8127
#define GL_POINT_FADE_THRESHOLD_SIZE_EXT	0x8128
#define GL_DISTANCE_ATTENUATION_EXT			0x8129

#ifdef __sgi
#define GL_SHARED_TEXTURE_PALETTE_EXT		GL_TEXTURE_COLOR_TABLE_SGI
#else
#define GL_SHARED_TEXTURE_PALETTE_EXT		0x81FB
#endif


#define GL_TEXTURE0_SGIS					0x835E
#define GL_TEXTURE1_SGIS					0x835F
#define GL_TEXTURE2_SGIS                    			0x83C8	/* MH add here */

#ifndef GL_TEXTURE0_ARB
#define GL_TEXTURE0_ARB					0x84C0
#endif
#ifndef GL_TEXTURE1_ARB
#define GL_TEXTURE1_ARB					0x84C1
#endif
#ifndef GL_TEXTURE2_ARB
#define GL_TEXTURE2_ARB					0x84C2	/* MH add here */
#endif

/* MH - detail textures begin */
/* defines for automatic hardware mipmap generation. */

/*
 * this has been part of the core OpenGL specification since version 1.4, so
 * there's
 */

/*
 * no real need to check for extension support and other tiresomely silly
 * blather,
 */

/*
 * unless you have a really weird OpenGL implementation.  it does, however,
 * even
 */
/* work on ATI cards, so you should have no trouble with it. */
#define GL_GENERATE_MIPMAP					0x8191
#define GL_GENERATE_MIPMAP_HINT				0x8192

#define GL_MAX_TEXTURE_UNITS_ARB			0x84E2
#define GL_MAX_TEXTURE_UNITS_SGIS			0x84E2
#define GL_COMBINE_ARB						0x8570
#define GL_RGB_SCALE_ARB					0x8573
/* MH - detail textures end */

#ifdef GL_TEXTURE0
#undef GL_TEXTURE0
#endif
#ifdef GL_TEXTURE1
#undef GL_TEXTURE1
#endif
#ifdef GL_TEXTURE2
#undef GL_TEXTURE2
#endif

extern int	GL_TEXTURE0, GL_TEXTURE1, GL_TEXTURE2;
extern int	maxTextureUnits;/* MH <- and this :) */

#define  GL_FRAGMENT_PROGRAM_ARB			0x8804	/* mpo */
#define  GL_PROGRAM_FORMAT_ASCII_ARB		0x8875	/* mpo */

/* mpo - needed for fragment shaders */
extern void     (APIENTRY * qglGenProgramsARB) (GLint n, GLuint * programs);
extern void     (APIENTRY * qglDeleteProgramsARB) (GLint n, const GLuint * programs);
extern void     (APIENTRY * qglBindProgramARB) (GLenum target, GLuint program);
extern void     (APIENTRY * qglProgramStringARB) (GLenum target, GLenum format, GLint len, const void *string);
extern void     (APIENTRY * qglProgramEnvParameter4fARB) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
extern void     (APIENTRY * qglProgramLocalParameter4fARB) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);

/* mpo - needed for fragment shaders */

/* nVidia extensions */

extern PFNGLCOMBINERPARAMETERFVNVPROC qglCombinerParameterfvNV;
extern PFNGLCOMBINERPARAMETERFNVPROC qglCombinerParameterfNV;
extern PFNGLCOMBINERPARAMETERIVNVPROC qglCombinerParameterivNV;
extern PFNGLCOMBINERPARAMETERINVPROC qglCombinerParameteriNV;
extern PFNGLCOMBINERINPUTNVPROC qglCombinerInputNV;
extern PFNGLCOMBINEROUTPUTNVPROC qglCombinerOutputNV;
extern PFNGLFINALCOMBINERINPUTNVPROC qglFinalCombinerInputNV;
extern PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC qglGetCombinerInputParameterfvNV;
extern PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC qglGetCombinerInputParameterivNV;
extern PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC qglGetCombinerOutputParameterfvNV;
extern PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC qglGetCombinerOutputParameterivNV;
extern PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC qglGetFinalCombinerInputParameterfvNV;
extern PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC qglGetFinalCombinerInputParameterivNV;

/* Vic - begin */
#ifndef GL_EXT_texture_env_combine
#define GL_COMBINE_EXT                    0x8570
#define GL_COMBINE_RGB_EXT                0x8571
#define GL_COMBINE_ALPHA_EXT              0x8572
#define GL_RGB_SCALE_EXT                  0x8573
#define GL_ADD_SIGNED_EXT                 0x8574
#define GL_INTERPOLATE_EXT                0x8575
#define GL_CONSTANT_EXT                   0x8576
#define GL_PRIMARY_COLOR_EXT              0x8577
#define GL_PREVIOUS_EXT                   0x8578
#define GL_SOURCE0_RGB_EXT                0x8580
#define GL_SOURCE1_RGB_EXT                0x8581
#define GL_SOURCE2_RGB_EXT                0x8582
#define GL_SOURCE3_RGB_EXT                0x8583
#define GL_SOURCE4_RGB_EXT                0x8584
#define GL_SOURCE5_RGB_EXT                0x8585
#define GL_SOURCE6_RGB_EXT                0x8586
#define GL_SOURCE7_RGB_EXT                0x8587
#define GL_SOURCE0_ALPHA_EXT              0x8588
#define GL_SOURCE1_ALPHA_EXT              0x8589
#define GL_SOURCE2_ALPHA_EXT              0x858A
#define GL_SOURCE3_ALPHA_EXT              0x858B
#define GL_SOURCE4_ALPHA_EXT              0x858C
#define GL_SOURCE5_ALPHA_EXT              0x858D
#define GL_SOURCE6_ALPHA_EXT              0x858E
#define GL_SOURCE7_ALPHA_EXT              0x858F
#define GL_OPERAND0_RGB_EXT               0x8590
#define GL_OPERAND1_RGB_EXT               0x8591
#define GL_OPERAND2_RGB_EXT               0x8592
#define GL_OPERAND3_RGB_EXT               0x8593
#define GL_OPERAND4_RGB_EXT               0x8594
#define GL_OPERAND5_RGB_EXT               0x8595
#define GL_OPERAND6_RGB_EXT               0x8596
#define GL_OPERAND7_RGB_EXT               0x8597
#define GL_OPERAND0_ALPHA_EXT             0x8598
#define GL_OPERAND1_ALPHA_EXT             0x8599
#define GL_OPERAND2_ALPHA_EXT             0x859A
#define GL_OPERAND3_ALPHA_EXT             0x859B
#define GL_OPERAND4_ALPHA_EXT             0x859C
#define GL_OPERAND5_ALPHA_EXT             0x859D
#define GL_OPERAND6_ALPHA_EXT             0x859E
#define GL_OPERAND7_ALPHA_EXT             0x859F
#endif
/* Vic - end */


#endif
