patch by blight with help from Royce3 for ICD behavioral research:

Changed GLFUNCS_MACRO to support C implementation of functions,
added MSVC asm version of gl functions, links now, driver and
GLRC lists protected by mutexes, added some breakpoints,
and fixed 1 or 2 Drv prototypes.

svn path=/trunk/; revision=8035
This commit is contained in:
Royce Mitchell III 2004-02-05 04:28:11 +00:00
parent 270099086f
commit 49f02ee444
7 changed files with 1244 additions and 1482 deletions

View file

@ -28,33 +28,58 @@
#include "opengl32.h"
/*#if defined(_M_IX86)*/
#if 1
#define X(func, ret, args) \
void WINAPI func () \
{ \
__asm__( \
"movl %%fs:0x18, %%eax" "\n\t" \
"addl %0, %%eax" "\n\t" \
"jmpl *(%%eax)" "\n\t" \
: \
: "n"(0x714+(GLIDX_##func*sizeof(PVOID))) ); \
/* GL data types - x86 typedefs */
typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef signed char GLbyte;
typedef short GLshort;
typedef int GLint;
typedef int GLsizei;
typedef unsigned char GLubyte;
typedef unsigned short GLushort;
typedef unsigned int GLuint;
typedef unsigned short GLhalf;
typedef float GLfloat;
typedef float GLclampf;
typedef double GLdouble;
typedef double GLclampd;
typedef void GLvoid;
#if defined(__GNUC__) && defined(_M_IX86) /* use GCC extended inline asm */
# define X(func, ret, typeargs, args) \
void WINAPI func typeargs \
{ \
__asm__( \
"movl %%fs:0x18, %%eax" "\n\t" \
"addl %0, %%eax" "\n\t" \
"jmpl *(%%eax)" "\n\t" \
: \
: "n"(0x714+(GLIDX_##func*sizeof(PVOID))) ); \
}
#elif defined(_MSC_VER) && defined(_M_IX86) /* use MSVC intel inline asm */
# define X(func, ret, typeargs, args) \
ret WINAPI func typeargs \
{ \
__asm { \
mov eax, fs:[00000018] \
jmp *GLIDX_##func(eax) \
} \
}
#else /* use C code */
#error C
# define X(func, ret, typeargs, args) \
ret WINAPI func typeargs \
{ \
PVOID fn = (PVOID)(NtCurrentTeb()->glDispatch[GLIDX_##func]); \
return (ret)((ret (*) typeargs)fn)args; \
}
#else /* defined(_M_IX86) */
/* FIXME: need more info for X (to pass on arguments) */
/*
#define X(func, ret, args) \
ret func args
{
PVOID fn = (PVOID)( ((char *)NtCurrentTeb()) +
(0x714+(GLIDX_func*sizeof(PVOID))) );
return (ret)((ret (*func) args)fn)();
}*/
#endif /* !defined(_M_IX86) */
#endif
GLFUNCS_MACRO
#undef X

View file

@ -5,486 +5,484 @@
* PURPOSE: OpenGL32 lib, GLFUNCS_MACRO
* PROGRAMMER: gen_glfuncs_macro.sh
* UPDATE HISTORY:
* !!! AUTOMATICALLY CREATED FROM gl.h !!!
* !!! AUTOMATICALLY CREATED FROM glfuncs.csv !!!
*/
/* To use this macro define a macro X(name, ret, args).
/* To use this macro define a macro X(name, ret, typeargs, args).
* It gets called for every glXXX function. For glVertex3f name would be "glVertex3f",
* ret would be "void" and args would be "(GLfloat x, GLfloat y, GLfloat z)".
* ret would be "void", typeargs would be "(GLfloat x, GLfloat y, GLfloat z)" and
* args would be "(x,y,z)".
* Don't forget to undefine X ;-)
*/
#define GLFUNCS_MACRO \
X(glAccum, void, (GLenum op, GLfloat value)) \
X(glActiveTexture, void, (GLenum texture)) \
X(glAddSwapHintRectWIN, void, (GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glAlphaFunc, void, (GLenum func, GLclampf ref)) \
X(glAreTexturesResident, GLboolean, (GLsizei n, const GLuint *textures, GLboolean *residences)) \
X(glArrayElement, void, (GLint i)) \
X(glBegin, void, (GLenum mode)) \
X(glBindTexture, void, (GLenum target, GLuint texture)) \
X(glBitmap, void, (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)) \
X(glBlendColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)) \
X(glBlendEquation, void, (GLenum mode)) \
X(glBlendFunc, void, (GLenum sfactor, GLenum dfactor)) \
X(glBlendFuncSeparate, void, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)) \
X(glCallList, void, (GLuint list)) \
X(glCallLists, void, (GLsizei n, GLenum type, const GLvoid *lists)) \
X(glClear, void, (GLbitfield mask)) \
X(glClearAccum, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)) \
X(glClearColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)) \
X(glClearDepth, void, (GLclampd depth)) \
X(glClearIndex, void, (GLfloat c)) \
X(glClearStencil, void, (GLint s)) \
X(glClientActiveTexture, void, (GLenum texture)) \
X(glClipPlane, void, (GLenum plane, const GLdouble *equation)) \
X(glColor3b, void, (GLbyte red, GLbyte green, GLbyte blue)) \
X(glColor3bv, void, (const GLbyte *v)) \
X(glColor3d, void, (GLdouble red, GLdouble green, GLdouble blue)) \
X(glColor3dv, void, (const GLdouble *v)) \
X(glColor3f, void, (GLfloat red, GLfloat green, GLfloat blue)) \
X(glColor3fv, void, (const GLfloat *v)) \
X(glColor3i, void, (GLint red, GLint green, GLint blue)) \
X(glColor3iv, void, (const GLint *v)) \
X(glColor3s, void, (GLshort red, GLshort green, GLshort blue)) \
X(glColor3sv, void, (const GLshort *v)) \
X(glColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue)) \
X(glColor3ubv, void, (const GLubyte *v)) \
X(glColor3ui, void, (GLuint red, GLuint green, GLuint blue)) \
X(glColor3uiv, void, (const GLuint *v)) \
X(glColor3us, void, (GLushort red, GLushort green, GLushort blue)) \
X(glColor3usv, void, (const GLushort *v)) \
X(glColor4b, void, (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)) \
X(glColor4bv, void, (const GLbyte *v)) \
X(glColor4d, void, (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)) \
X(glColor4dv, void, (const GLdouble *v)) \
X(glColor4f, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)) \
X(glColor4fv, void, (const GLfloat *v)) \
X(glColor4i, void, (GLint red, GLint green, GLint blue, GLint alpha)) \
X(glColor4iv, void, (const GLint *v)) \
X(glColor4s, void, (GLshort red, GLshort green, GLshort blue, GLshort alpha)) \
X(glColor4sv, void, (const GLshort *v)) \
X(glColor4ub, void, (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)) \
X(glColor4ubv, void, (const GLubyte *v)) \
X(glColor4ui, void, (GLuint red, GLuint green, GLuint blue, GLuint alpha)) \
X(glColor4uiv, void, (const GLuint *v)) \
X(glColor4us, void, (GLushort red, GLushort green, GLushort blue, GLushort alpha)) \
X(glColor4usv, void, (const GLushort *v)) \
X(glColorMask, void, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)) \
X(glColorMaterial, void, (GLenum face, GLenum mode)) \
X(glColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glColorSubTable, void, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data)) \
X(glColorTable, void, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table)) \
X(glColorTableParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params)) \
X(glColorTableParameteriv, void, (GLenum target, GLenum pname, const GLint *params)) \
X(glCompressedTexImage1D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data)) \
X(glCompressedTexImage2D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)) \
X(glCompressedTexImage3D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data)) \
X(glCompressedTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data)) \
X(glCompressedTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)) \
X(glCompressedTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data)) \
X(glConvolutionFilter1D, void, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image)) \
X(glConvolutionFilter2D, void, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image)) \
X(glConvolutionParameterf, void, (GLenum target, GLenum pname, GLfloat params)) \
X(glConvolutionParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params)) \
X(glConvolutionParameteri, void, (GLenum target, GLenum pname, GLint params)) \
X(glConvolutionParameteriv, void, (GLenum target, GLenum pname, const GLint *params)) \
X(glCopyColorSubTable, void, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width)) \
X(glCopyColorTable, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)) \
X(glCopyConvolutionFilter1D, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width)) \
X(glCopyConvolutionFilter2D, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glCopyPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)) \
X(glCopyTexImage1D, void, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)) \
X(glCopyTexImage2D, void, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)) \
X(glCopyTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)) \
X(glCopyTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glCopyTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glCullFace, void, (GLenum mode)) \
X(glDeleteLists, void, (GLuint list, GLsizei range)) \
X(glDeleteTextures, void, (GLsizei n, const GLuint *textures)) \
X(glDepthFunc, void, (GLenum func)) \
X(glDepthMask, void, (GLboolean flag)) \
X(glDepthRange, void, (GLclampd zNear, GLclampd zFar)) \
X(glDisable, void, (GLenum cap)) \
X(glDisableClientState, void, (GLenum array)) \
X(glDrawArrays, void, (GLenum mode, GLint first, GLsizei count)) \
X(glDrawBuffer, void, (GLenum mode)) \
X(glDrawElements, void, (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)) \
X(glDrawPixels, void, (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glDrawRangeElements, void, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices)) \
X(glEdgeFlag, void, (GLboolean flag)) \
X(glEdgeFlagPointer, void, (GLsizei stride, const GLboolean *pointer)) \
X(glEdgeFlagv, void, (const GLboolean *flag)) \
X(glEnable, void, (GLenum cap)) \
X(glEnableClientState, void, (GLenum array)) \
X(glEnd, void, (void)) \
X(glEndList, void, (void)) \
X(glEvalCoord1d, void, (GLdouble u)) \
X(glEvalCoord1dv, void, (const GLdouble *u)) \
X(glEvalCoord1f, void, (GLfloat u)) \
X(glEvalCoord1fv, void, (const GLfloat *u)) \
X(glEvalCoord2d, void, (GLdouble u, GLdouble v)) \
X(glEvalCoord2dv, void, (const GLdouble *u)) \
X(glEvalCoord2f, void, (GLfloat u, GLfloat v)) \
X(glEvalCoord2fv, void, (const GLfloat *u)) \
X(glEvalMesh1, void, (GLenum mode, GLint i1, GLint i2)) \
X(glEvalMesh2, void, (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)) \
X(glEvalPoint1, void, (GLint i)) \
X(glEvalPoint2, void, (GLint i, GLint j)) \
X(glFeedbackBuffer, void, (GLsizei size, GLenum type, GLfloat *buffer)) \
X(glFinish, void, (void)) \
X(glFlush, void, (void)) \
X(glFlushHold, GLuint, (void)) \
X(glFogCoordPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glFogCoordd, void, (GLdouble fog)) \
X(glFogCoorddv, void, (const GLdouble *fog)) \
X(glFogCoordf, void, (GLfloat fog)) \
X(glFogCoordfv, void, (const GLfloat *fog)) \
X(glFogf, void, (GLenum pname, GLfloat param)) \
X(glFogfv, void, (GLenum pname, const GLfloat *params)) \
X(glFogi, void, (GLenum pname, GLint param)) \
X(glFogiv, void, (GLenum pname, const GLint *params)) \
X(glFrontFace, void, (GLenum mode)) \
X(glFrustum, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)) \
X(glGenLists, GLuint, (GLsizei range)) \
X(glGenTextures, void, (GLsizei n, GLuint *textures)) \
X(glGetBooleanv, void, (GLenum pname, GLboolean *params)) \
X(glGetClipPlane, void, (GLenum plane, GLdouble *equation)) \
X(glGetColorTable, void, (GLenum target, GLenum format, GLenum type, GLvoid *table)) \
X(glGetColorTableParameterfv, void, (GLenum target, GLenum pname, GLfloat *params)) \
X(glGetColorTableParameteriv, void, (GLenum target, GLenum pname, GLint *params)) \
X(glGetCompressedTexImage, void, (GLenum target, GLint lod, GLvoid *img)) \
X(glGetConvolutionFilter, void, (GLenum target, GLenum format, GLenum type, GLvoid *image)) \
X(glGetConvolutionParameterfv, void, (GLenum target, GLenum pname, GLfloat *params)) \
X(glGetConvolutionParameteriv, void, (GLenum target, GLenum pname, GLint *params)) \
X(glGetDoublev, void, (GLenum pname, GLdouble *params)) \
X(glGetError, GLenum, (void)) \
X(glGetFloatv, void, (GLenum pname, GLfloat *params)) \
X(glGetHistogram, void, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)) \
X(glGetHistogramParameterfv, void, (GLenum target, GLenum pname, GLfloat *params)) \
X(glGetHistogramParameteriv, void, (GLenum target, GLenum pname, GLint *params)) \
X(glGetIntegerv, void, (GLenum pname, GLint *params)) \
X(glGetLightfv, void, (GLenum light, GLenum pname, GLfloat *params)) \
X(glGetLightiv, void, (GLenum light, GLenum pname, GLint *params)) \
X(glGetMapdv, void, (GLenum target, GLenum query, GLdouble *v)) \
X(glGetMapfv, void, (GLenum target, GLenum query, GLfloat *v)) \
X(glGetMapiv, void, (GLenum target, GLenum query, GLint *v)) \
X(glGetMaterialfv, void, (GLenum face, GLenum pname, GLfloat *params)) \
X(glGetMaterialiv, void, (GLenum face, GLenum pname, GLint *params)) \
X(glGetMinmax, void, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)) \
X(glGetMinmaxParameterfv, void, (GLenum target, GLenum pname, GLfloat *params)) \
X(glGetMinmaxParameteriv, void, (GLenum target, GLenum pname, GLint *params)) \
X(glGetPixelMapfv, void, (GLenum map, GLfloat *values)) \
X(glGetPixelMapuiv, void, (GLenum map, GLuint *values)) \
X(glGetPixelMapusv, void, (GLenum map, GLushort *values)) \
X(glGetPointerv, void, (GLenum pname, GLvoid* *params)) \
X(glGetPolygonStipple, void, (GLubyte *mask)) \
X(glGetSeparableFilter, void, (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span)) \
X(glGetString, const, (GLenum name)) \
X(glGetTexEnvfv, void, (GLenum target, GLenum pname, GLfloat *params)) \
X(glGetTexEnviv, void, (GLenum target, GLenum pname, GLint *params)) \
X(glGetTexGendv, void, (GLenum coord, GLenum pname, GLdouble *params)) \
X(glGetTexGenfv, void, (GLenum coord, GLenum pname, GLfloat *params)) \
X(glGetTexGeniv, void, (GLenum coord, GLenum pname, GLint *params)) \
X(glGetTexImage, void, (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)) \
X(glGetTexLevelParameterfv, void, (GLenum target, GLint level, GLenum pname, GLfloat *params)) \
X(glGetTexLevelParameteriv, void, (GLenum target, GLint level, GLenum pname, GLint *params)) \
X(glGetTexParameterfv, void, (GLenum target, GLenum pname, GLfloat *params)) \
X(glGetTexParameteriv, void, (GLenum target, GLenum pname, GLint *params)) \
X(glHint, void, (GLenum target, GLenum mode)) \
X(glHistogram, void, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink)) \
X(glIndexMask, void, (GLuint mask)) \
X(glIndexPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glIndexd, void, (GLdouble c)) \
X(glIndexdv, void, (const GLdouble *c)) \
X(glIndexf, void, (GLfloat c)) \
X(glIndexfv, void, (const GLfloat *c)) \
X(glIndexi, void, (GLint c)) \
X(glIndexiv, void, (const GLint *c)) \
X(glIndexs, void, (GLshort c)) \
X(glIndexsv, void, (const GLshort *c)) \
X(glIndexub, void, (GLubyte c)) \
X(glIndexubv, void, (const GLubyte *c)) \
X(glInitNames, void, (void)) \
X(glInterleavedArrays, void, (GLenum format, GLsizei stride, const GLvoid *pointer)) \
X(glIsEnabled, GLboolean, (GLenum cap)) \
X(glIsList, GLboolean, (GLuint list)) \
X(glIsTexture, GLboolean, (GLuint texture)) \
X(glLightModelf, void, (GLenum pname, GLfloat param)) \
X(glLightModelfv, void, (GLenum pname, const GLfloat *params)) \
X(glLightModeli, void, (GLenum pname, GLint param)) \
X(glLightModeliv, void, (GLenum pname, const GLint *params)) \
X(glLightf, void, (GLenum light, GLenum pname, GLfloat param)) \
X(glLightfv, void, (GLenum light, GLenum pname, const GLfloat *params)) \
X(glLighti, void, (GLenum light, GLenum pname, GLint param)) \
X(glLightiv, void, (GLenum light, GLenum pname, const GLint *params)) \
X(glLineStipple, void, (GLint factor, GLushort pattern)) \
X(glLineWidth, void, (GLfloat width)) \
X(glListBase, void, (GLuint base)) \
X(glLoadIdentity, void, (void)) \
X(glLoadMatrixd, void, (const GLdouble *m)) \
X(glLoadMatrixf, void, (const GLfloat *m)) \
X(glLoadName, void, (GLuint name)) \
X(glLoadTransposeMatrixd, void, (const GLdouble *m)) \
X(glLoadTransposeMatrixf, void, (const GLfloat *m)) \
X(glLogicOp, void, (GLenum opcode)) \
X(glMap1d, void, (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)) \
X(glMap1f, void, (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)) \
X(glMap2d, void, (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)) \
X(glMap2f, void, (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)) \
X(glMapGrid1d, void, (GLint un, GLdouble u1, GLdouble u2)) \
X(glMapGrid1f, void, (GLint un, GLfloat u1, GLfloat u2)) \
X(glMapGrid2d, void, (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)) \
X(glMapGrid2f, void, (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)) \
X(glMaterialf, void, (GLenum face, GLenum pname, GLfloat param)) \
X(glMaterialfv, void, (GLenum face, GLenum pname, const GLfloat *params)) \
X(glMateriali, void, (GLenum face, GLenum pname, GLint param)) \
X(glMaterialiv, void, (GLenum face, GLenum pname, const GLint *params)) \
X(glMatrixMode, void, (GLenum mode)) \
X(glMinmax, void, (GLenum target, GLenum internalformat, GLboolean sink)) \
X(glMultMatrixd, void, (const GLdouble *m)) \
X(glMultMatrixf, void, (const GLfloat *m)) \
X(glMultTransposeMatrixd, void, (const GLdouble *m)) \
X(glMultTransposeMatrixf, void, (const GLfloat *m)) \
X(glMultiDrawArrays, void, (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)) \
X(glMultiDrawElements, void, (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount)) \
X(glMultiTexCoord1d, void, (GLenum target, GLdouble s)) \
X(glMultiTexCoord1dv, void, (GLenum target, const GLdouble *v)) \
X(glMultiTexCoord1f, void, (GLenum target, GLfloat s)) \
X(glMultiTexCoord1fv, void, (GLenum target, const GLfloat *v)) \
X(glMultiTexCoord1i, void, (GLenum target, GLint s)) \
X(glMultiTexCoord1iv, void, (GLenum target, const GLint *v)) \
X(glMultiTexCoord1s, void, (GLenum target, GLshort s)) \
X(glMultiTexCoord1sv, void, (GLenum target, const GLshort *v)) \
X(glMultiTexCoord2d, void, (GLenum target, GLdouble s, GLdouble t)) \
X(glMultiTexCoord2dv, void, (GLenum target, const GLdouble *v)) \
X(glMultiTexCoord2f, void, (GLenum target, GLfloat s, GLfloat t)) \
X(glMultiTexCoord2fv, void, (GLenum target, const GLfloat *v)) \
X(glMultiTexCoord2i, void, (GLenum target, GLint s, GLint t)) \
X(glMultiTexCoord2iv, void, (GLenum target, const GLint *v)) \
X(glMultiTexCoord2s, void, (GLenum target, GLshort s, GLshort t)) \
X(glMultiTexCoord2sv, void, (GLenum target, const GLshort *v)) \
X(glMultiTexCoord3d, void, (GLenum target, GLdouble s, GLdouble t, GLdouble r)) \
X(glMultiTexCoord3dv, void, (GLenum target, const GLdouble *v)) \
X(glMultiTexCoord3f, void, (GLenum target, GLfloat s, GLfloat t, GLfloat r)) \
X(glMultiTexCoord3fv, void, (GLenum target, const GLfloat *v)) \
X(glMultiTexCoord3i, void, (GLenum target, GLint s, GLint t, GLint r)) \
X(glMultiTexCoord3iv, void, (GLenum target, const GLint *v)) \
X(glMultiTexCoord3s, void, (GLenum target, GLshort s, GLshort t, GLshort r)) \
X(glMultiTexCoord3sv, void, (GLenum target, const GLshort *v)) \
X(glMultiTexCoord4d, void, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)) \
X(glMultiTexCoord4dv, void, (GLenum target, const GLdouble *v)) \
X(glMultiTexCoord4f, void, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)) \
X(glMultiTexCoord4fv, void, (GLenum target, const GLfloat *v)) \
X(glMultiTexCoord4i, void, (GLenum target, GLint s, GLint t, GLint r, GLint q)) \
X(glMultiTexCoord4iv, void, (GLenum target, const GLint *v)) \
X(glMultiTexCoord4s, void, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)) \
X(glMultiTexCoord4sv, void, (GLenum target, const GLshort *v)) \
X(glNewList, void, (GLuint list, GLenum mode)) \
X(glNormal3b, void, (GLbyte nx, GLbyte ny, GLbyte nz)) \
X(glNormal3bv, void, (const GLbyte *v)) \
X(glNormal3d, void, (GLdouble nx, GLdouble ny, GLdouble nz)) \
X(glNormal3dv, void, (const GLdouble *v)) \
X(glNormal3f, void, (GLfloat nx, GLfloat ny, GLfloat nz)) \
X(glNormal3fv, void, (const GLfloat *v)) \
X(glNormal3i, void, (GLint nx, GLint ny, GLint nz)) \
X(glNormal3iv, void, (const GLint *v)) \
X(glNormal3s, void, (GLshort nx, GLshort ny, GLshort nz)) \
X(glNormal3sv, void, (const GLshort *v)) \
X(glNormalPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glOrtho, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)) \
X(glPassThrough, void, (GLfloat token)) \
X(glPixelMapfv, void, (GLenum map, GLint mapsize, const GLfloat *values)) \
X(glPixelMapuiv, void, (GLenum map, GLint mapsize, const GLuint *values)) \
X(glPixelMapusv, void, (GLenum map, GLint mapsize, const GLushort *values)) \
X(glPixelStoref, void, (GLenum pname, GLfloat param)) \
X(glPixelStorei, void, (GLenum pname, GLint param)) \
X(glPixelTransferf, void, (GLenum pname, GLfloat param)) \
X(glPixelTransferi, void, (GLenum pname, GLint param)) \
X(glPixelZoom, void, (GLfloat xfactor, GLfloat yfactor)) \
X(glPointParameterf, void, (GLenum pname, GLfloat param)) \
X(glPointParameterfv, void, (GLenum pname, const GLfloat *params)) \
X(glPointParameteri, void, (GLenum pname, GLint param)) \
X(glPointParameteriv, void, (GLenum pname, const GLint *params)) \
X(glPointSize, void, (GLfloat size)) \
X(glPolygonMode, void, (GLenum face, GLenum mode)) \
X(glPolygonOffset, void, (GLfloat factor, GLfloat units)) \
X(glPolygonStipple, void, (const GLubyte *mask)) \
X(glPopAttrib, void, (void)) \
X(glPopClientAttrib, void, (void)) \
X(glPopMatrix, void, (void)) \
X(glPopName, void, (void)) \
X(glPrioritizeTextures, void, (GLsizei n, const GLuint *textures, const GLclampf *priorities)) \
X(glPushAttrib, void, (GLbitfield mask)) \
X(glPushClientAttrib, void, (GLbitfield mask)) \
X(glPushMatrix, void, (void)) \
X(glPushName, void, (GLuint name)) \
X(glRasterPos2d, void, (GLdouble x, GLdouble y)) \
X(glRasterPos2dv, void, (const GLdouble *v)) \
X(glRasterPos2f, void, (GLfloat x, GLfloat y)) \
X(glRasterPos2fv, void, (const GLfloat *v)) \
X(glRasterPos2i, void, (GLint x, GLint y)) \
X(glRasterPos2iv, void, (const GLint *v)) \
X(glRasterPos2s, void, (GLshort x, GLshort y)) \
X(glRasterPos2sv, void, (const GLshort *v)) \
X(glRasterPos3d, void, (GLdouble x, GLdouble y, GLdouble z)) \
X(glRasterPos3dv, void, (const GLdouble *v)) \
X(glRasterPos3f, void, (GLfloat x, GLfloat y, GLfloat z)) \
X(glRasterPos3fv, void, (const GLfloat *v)) \
X(glRasterPos3i, void, (GLint x, GLint y, GLint z)) \
X(glRasterPos3iv, void, (const GLint *v)) \
X(glRasterPos3s, void, (GLshort x, GLshort y, GLshort z)) \
X(glRasterPos3sv, void, (const GLshort *v)) \
X(glRasterPos4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w)) \
X(glRasterPos4dv, void, (const GLdouble *v)) \
X(glRasterPos4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w)) \
X(glRasterPos4fv, void, (const GLfloat *v)) \
X(glRasterPos4i, void, (GLint x, GLint y, GLint z, GLint w)) \
X(glRasterPos4iv, void, (const GLint *v)) \
X(glRasterPos4s, void, (GLshort x, GLshort y, GLshort z, GLshort w)) \
X(glRasterPos4sv, void, (const GLshort *v)) \
X(glReadBuffer, void, (GLenum mode)) \
X(glReadPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)) \
X(glRectd, void, (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)) \
X(glRectdv, void, (const GLdouble *v1, const GLdouble *v2)) \
X(glRectf, void, (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)) \
X(glRectfv, void, (const GLfloat *v1, const GLfloat *v2)) \
X(glRecti, void, (GLint x1, GLint y1, GLint x2, GLint y2)) \
X(glRectiv, void, (const GLint *v1, const GLint *v2)) \
X(glRects, void, (GLshort x1, GLshort y1, GLshort x2, GLshort y2)) \
X(glRectsv, void, (const GLshort *v1, const GLshort *v2)) \
X(glReleaseFlushHold, GLenum, (GLuint id)) \
X(glRenderMode, GLint, (GLenum mode)) \
X(glResetHistogram, void, (GLenum target)) \
X(glResetMinmax, void, (GLenum target)) \
X(glRotated, void, (GLdouble angle, GLdouble x, GLdouble y, GLdouble z)) \
X(glRotatef, void, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z)) \
X(glSampleCoverage, void, (GLclampf value, GLboolean invert)) \
X(glScaled, void, (GLdouble x, GLdouble y, GLdouble z)) \
X(glScalef, void, (GLfloat x, GLfloat y, GLfloat z)) \
X(glScissor, void, (GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glSecondaryColor3b, void, (GLbyte red, GLbyte green, GLbyte blue)) \
X(glSecondaryColor3bv, void, (const GLbyte *v)) \
X(glSecondaryColor3d, void, (GLdouble red, GLdouble green, GLdouble blue)) \
X(glSecondaryColor3dv, void, (const GLdouble *v)) \
X(glSecondaryColor3f, void, (GLfloat red, GLfloat green, GLfloat blue)) \
X(glSecondaryColor3fv, void, (const GLfloat *v)) \
X(glSecondaryColor3i, void, (GLint red, GLint green, GLint blue)) \
X(glSecondaryColor3iv, void, (const GLint *v)) \
X(glSecondaryColor3s, void, (GLshort red, GLshort green, GLshort blue)) \
X(glSecondaryColor3sv, void, (const GLshort *v)) \
X(glSecondaryColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue)) \
X(glSecondaryColor3ubv, void, (const GLubyte *v)) \
X(glSecondaryColor3ui, void, (GLuint red, GLuint green, GLuint blue)) \
X(glSecondaryColor3uiv, void, (const GLuint *v)) \
X(glSecondaryColor3us, void, (GLushort red, GLushort green, GLushort blue)) \
X(glSecondaryColor3usv, void, (const GLushort *v)) \
X(glSecondaryColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glSelectBuffer, void, (GLsizei size, GLuint *buffer)) \
X(glSeparableFilter2D, void, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column)) \
X(glShadeModel, void, (GLenum mode)) \
X(glStencilFunc, void, (GLenum func, GLint ref, GLuint mask)) \
X(glStencilMask, void, (GLuint mask)) \
X(glStencilOp, void, (GLenum fail, GLenum zfail, GLenum zpass)) \
X(glTexCoord1d, void, (GLdouble s)) \
X(glTexCoord1dv, void, (const GLdouble *v)) \
X(glTexCoord1f, void, (GLfloat s)) \
X(glTexCoord1fv, void, (const GLfloat *v)) \
X(glTexCoord1i, void, (GLint s)) \
X(glTexCoord1iv, void, (const GLint *v)) \
X(glTexCoord1s, void, (GLshort s)) \
X(glTexCoord1sv, void, (const GLshort *v)) \
X(glTexCoord2d, void, (GLdouble s, GLdouble t)) \
X(glTexCoord2dv, void, (const GLdouble *v)) \
X(glTexCoord2f, void, (GLfloat s, GLfloat t)) \
X(glTexCoord2fv, void, (const GLfloat *v)) \
X(glTexCoord2i, void, (GLint s, GLint t)) \
X(glTexCoord2iv, void, (const GLint *v)) \
X(glTexCoord2s, void, (GLshort s, GLshort t)) \
X(glTexCoord2sv, void, (const GLshort *v)) \
X(glTexCoord3d, void, (GLdouble s, GLdouble t, GLdouble r)) \
X(glTexCoord3dv, void, (const GLdouble *v)) \
X(glTexCoord3f, void, (GLfloat s, GLfloat t, GLfloat r)) \
X(glTexCoord3fv, void, (const GLfloat *v)) \
X(glTexCoord3i, void, (GLint s, GLint t, GLint r)) \
X(glTexCoord3iv, void, (const GLint *v)) \
X(glTexCoord3s, void, (GLshort s, GLshort t, GLshort r)) \
X(glTexCoord3sv, void, (const GLshort *v)) \
X(glTexCoord4d, void, (GLdouble s, GLdouble t, GLdouble r, GLdouble q)) \
X(glTexCoord4dv, void, (const GLdouble *v)) \
X(glTexCoord4f, void, (GLfloat s, GLfloat t, GLfloat r, GLfloat q)) \
X(glTexCoord4fv, void, (const GLfloat *v)) \
X(glTexCoord4i, void, (GLint s, GLint t, GLint r, GLint q)) \
X(glTexCoord4iv, void, (const GLint *v)) \
X(glTexCoord4s, void, (GLshort s, GLshort t, GLshort r, GLshort q)) \
X(glTexCoord4sv, void, (const GLshort *v)) \
X(glTexCoordPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glTexEnvf, void, (GLenum target, GLenum pname, GLfloat param)) \
X(glTexEnvfv, void, (GLenum target, GLenum pname, const GLfloat *params)) \
X(glTexEnvi, void, (GLenum target, GLenum pname, GLint param)) \
X(glTexEnviv, void, (GLenum target, GLenum pname, const GLint *params)) \
X(glTexGend, void, (GLenum coord, GLenum pname, GLdouble param)) \
X(glTexGendv, void, (GLenum coord, GLenum pname, const GLdouble *params)) \
X(glTexGenf, void, (GLenum coord, GLenum pname, GLfloat param)) \
X(glTexGenfv, void, (GLenum coord, GLenum pname, const GLfloat *params)) \
X(glTexGeni, void, (GLenum coord, GLenum pname, GLint param)) \
X(glTexGeniv, void, (GLenum coord, GLenum pname, const GLint *params)) \
X(glTexImage1D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glTexImage2D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glTexImage3D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glTexParameterf, void, (GLenum target, GLenum pname, GLfloat param)) \
X(glTexParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params)) \
X(glTexParameteri, void, (GLenum target, GLenum pname, GLint param)) \
X(glTexParameteriv, void, (GLenum target, GLenum pname, const GLint *params)) \
X(glTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels)) \
X(glTranslated, void, (GLdouble x, GLdouble y, GLdouble z)) \
X(glTranslatef, void, (GLfloat x, GLfloat y, GLfloat z)) \
X(glValidBackBufferHintAutodesk, GLboolean, (GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glVertex2d, void, (GLdouble x, GLdouble y)) \
X(glVertex2dv, void, (const GLdouble *v)) \
X(glVertex2f, void, (GLfloat x, GLfloat y)) \
X(glVertex2fv, void, (const GLfloat *v)) \
X(glVertex2i, void, (GLint x, GLint y)) \
X(glVertex2iv, void, (const GLint *v)) \
X(glVertex2s, void, (GLshort x, GLshort y)) \
X(glVertex2sv, void, (const GLshort *v)) \
X(glVertex3d, void, (GLdouble x, GLdouble y, GLdouble z)) \
X(glVertex3dv, void, (const GLdouble *v)) \
X(glVertex3f, void, (GLfloat x, GLfloat y, GLfloat z)) \
X(glVertex3fv, void, (const GLfloat *v)) \
X(glVertex3i, void, (GLint x, GLint y, GLint z)) \
X(glVertex3iv, void, (const GLint *v)) \
X(glVertex3s, void, (GLshort x, GLshort y, GLshort z)) \
X(glVertex3sv, void, (const GLshort *v)) \
X(glVertex4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w)) \
X(glVertex4dv, void, (const GLdouble *v)) \
X(glVertex4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w)) \
X(glVertex4fv, void, (const GLfloat *v)) \
X(glVertex4i, void, (GLint x, GLint y, GLint z, GLint w)) \
X(glVertex4iv, void, (const GLint *v)) \
X(glVertex4s, void, (GLshort x, GLshort y, GLshort z, GLshort w)) \
X(glVertex4sv, void, (const GLshort *v)) \
X(glVertexPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)) \
X(glViewport, void, (GLint x, GLint y, GLsizei width, GLsizei height)) \
X(glWindowBackBufferHintAutodesk, void, (void)) \
X(glWindowPos2d, void, (GLdouble x, GLdouble y)) \
X(glWindowPos2dv, void, (const GLdouble *p)) \
X(glWindowPos2f, void, (GLfloat x, GLfloat y)) \
X(glWindowPos2fv, void, (const GLfloat *p)) \
X(glWindowPos2i, void, (GLint x, GLint y)) \
X(glWindowPos2iv, void, (const GLint *p)) \
X(glWindowPos2s, void, (GLshort x, GLshort y)) \
X(glWindowPos2sv, void, (const GLshort *p)) \
X(glWindowPos3d, void, (GLdouble x, GLdouble y, GLdouble z)) \
X(glWindowPos3dv, void, (const GLdouble *p)) \
X(glWindowPos3f, void, (GLfloat x, GLfloat y, GLfloat z)) \
X(glWindowPos3fv, void, (const GLfloat *p)) \
X(glWindowPos3i, void, (GLint x, GLint y, GLint z)) \
X(glWindowPos3iv, void, (const GLint *p)) \
X(glWindowPos3s, void, (GLshort x, GLshort y, GLshort z)) \
X(glWindowPos3sv, void, (const GLshort *p)) \
/* EOF */
X(glAccum, void, (GLenum op, GLfloat value), (op,value)) \
X(glActiveTexture, void, (GLenum texture), (texture)) \
X(glAddSwapHintRectWIN, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glAlphaFunc, void, (GLenum func, GLclampf ref), (func,ref)) \
X(glAreTexturesResident, GLboolean, (GLsizei n, const GLuint *textures, GLboolean *residences), (n,textures,residences)) \
X(glArrayElement, void, (GLint i), (i)) \
X(glBegin, void, (GLenum mode), (mode)) \
X(glBindTexture, void, (GLenum target, GLuint texture), (target,texture)) \
X(glBitmap, void, (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap), (width,height,xorig,yorig,xmove,ymove,bitmap)) \
X(glBlendColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha), (red,green,blue,alpha)) \
X(glBlendEquation, void, (GLenum mode), (mode)) \
X(glBlendFunc, void, (GLenum sfactor, GLenum dfactor), (sfactor,dfactor)) \
X(glBlendFuncSeparate, void, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB,dfactorRGB,sfactorAlpha,dfactorAlpha)) \
X(glCallList, void, (GLuint list), (list)) \
X(glCallLists, void, (GLsizei n, GLenum type, const GLvoid *lists), (n,type,lists)) \
X(glClear, void, (GLbitfield mask), (mask)) \
X(glClearAccum, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red,green,blue,alpha)) \
X(glClearColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha), (red,green,blue,alpha)) \
X(glClearDepth, void, (GLclampd depth), (depth)) \
X(glClearIndex, void, (GLfloat c), (c)) \
X(glClearStencil, void, (GLint s), (s)) \
X(glClientActiveTexture, void, (GLenum texture), (texture)) \
X(glClipPlane, void, (GLenum plane, const GLdouble *equation), (plane,equation)) \
X(glColor3b, void, (GLbyte red, GLbyte green, GLbyte blue), (red,green,blue)) \
X(glColor3bv, void, (const GLbyte *v), (v)) \
X(glColor3d, void, (GLdouble red, GLdouble green, GLdouble blue), (red,green,blue)) \
X(glColor3dv, void, (const GLdouble *v), (v)) \
X(glColor3f, void, (GLfloat red, GLfloat green, GLfloat blue), (red,green,blue)) \
X(glColor3fv, void, (const GLfloat *v), (v)) \
X(glColor3i, void, (GLint red, GLint green, GLint blue), (red,green,blue)) \
X(glColor3iv, void, (const GLint *v), (v)) \
X(glColor3s, void, (GLshort red, GLshort green, GLshort blue), (red,green,blue)) \
X(glColor3sv, void, (const GLshort *v), (v)) \
X(glColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue), (red,green,blue)) \
X(glColor3ubv, void, (const GLubyte *v), (v)) \
X(glColor3ui, void, (GLuint red, GLuint green, GLuint blue), (red,green,blue)) \
X(glColor3uiv, void, (const GLuint *v), (v)) \
X(glColor3us, void, (GLushort red, GLushort green, GLushort blue), (red,green,blue)) \
X(glColor3usv, void, (const GLushort *v), (v)) \
X(glColor4b, void, (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha), (red,green,blue,alpha)) \
X(glColor4bv, void, (const GLbyte *v), (v)) \
X(glColor4d, void, (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha), (red,green,blue,alpha)) \
X(glColor4dv, void, (const GLdouble *v), (v)) \
X(glColor4f, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red,green,blue,alpha)) \
X(glColor4fv, void, (const GLfloat *v), (v)) \
X(glColor4i, void, (GLint red, GLint green, GLint blue, GLint alpha), (red,green,blue,alpha)) \
X(glColor4iv, void, (const GLint *v), (v)) \
X(glColor4s, void, (GLshort red, GLshort green, GLshort blue, GLshort alpha), (red,green,blue,alpha)) \
X(glColor4sv, void, (const GLshort *v), (v)) \
X(glColor4ub, void, (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha), (red,green,blue,alpha)) \
X(glColor4ubv, void, (const GLubyte *v), (v)) \
X(glColor4ui, void, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red,green,blue,alpha)) \
X(glColor4uiv, void, (const GLuint *v), (v)) \
X(glColor4us, void, (GLushort red, GLushort green, GLushort blue, GLushort alpha), (red,green,blue,alpha)) \
X(glColor4usv, void, (const GLushort *v), (v)) \
X(glColorMask, void, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red,green,blue,alpha)) \
X(glColorMaterial, void, (GLenum face, GLenum mode), (face,mode)) \
X(glColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glColorSubTable, void, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data), (target,start,count,format,type,data)) \
X(glColorTable, void, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table), (target,internalformat,width,format,type,table)) \
X(glColorTableParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \
X(glColorTableParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \
X(glCompressedTexImage1D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data), (target,level,internalformat,width,border,imageSize,data)) \
X(glCompressedTexImage2D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data), (target,level,internalformat,width,height,border,imageSize,data)) \
X(glCompressedTexImage3D, void, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data), (target,level,internalformat,width,height,depth,border,imageSize,data)) \
X(glCompressedTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data), (target,level,xoffset,width,format,imageSize,data)) \
X(glCompressedTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data), (target,level,xoffset,yoffset,width,height,format,imageSize,data)) \
X(glCompressedTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data), (target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)) \
X(glConvolutionFilter1D, void, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image), (target,internalformat,width,format,type,image)) \
X(glConvolutionFilter2D, void, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image), (target,internalformat,width,height,format,type,image)) \
X(glConvolutionParameterf, void, (GLenum target, GLenum pname, GLfloat params), (target,pname,params)) \
X(glConvolutionParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \
X(glConvolutionParameteri, void, (GLenum target, GLenum pname, GLint params), (target,pname,params)) \
X(glConvolutionParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \
X(glCopyColorSubTable, void, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width), (target,start,x,y,width)) \
X(glCopyColorTable, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target,internalformat,x,y,width)) \
X(glCopyConvolutionFilter1D, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target,internalformat,x,y,width)) \
X(glCopyConvolutionFilter2D, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height), (target,internalformat,x,y,width,height)) \
X(glCopyPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type), (x,y,width,height,type)) \
X(glCopyTexImage1D, void, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (target,level,internalformat,x,y,width,border)) \
X(glCopyTexImage2D, void, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (target,level,internalformat,x,y,width,height,border)) \
X(glCopyTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target,level,xoffset,x,y,width)) \
X(glCopyTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target,level,xoffset,yoffset,x,y,width,height)) \
X(glCopyTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target,level,xoffset,yoffset,zoffset,x,y,width,height)) \
X(glCullFace, void, (GLenum mode), (mode)) \
X(glDeleteLists, void, (GLuint list, GLsizei range), (list,range)) \
X(glDeleteTextures, void, (GLsizei n, const GLuint *textures), (n,textures)) \
X(glDepthFunc, void, (GLenum func), (func)) \
X(glDepthMask, void, (GLboolean flag), (flag)) \
X(glDepthRange, void, (GLclampd zNear, GLclampd zFar), (zNear,zFar)) \
X(glDisable, void, (GLenum cap), (cap)) \
X(glDisableClientState, void, (GLenum array), (array)) \
X(glDrawArrays, void, (GLenum mode, GLint first, GLsizei count), (mode,first,count)) \
X(glDrawBuffer, void, (GLenum mode), (mode)) \
X(glDrawElements, void, (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices), (mode,count,type,indices)) \
X(glDrawPixels, void, (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels), (width,height,format,type,pixels)) \
X(glDrawRangeElements, void, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices), (mode,start,end,count,type,indices)) \
X(glEdgeFlag, void, (GLboolean flag), (flag)) \
X(glEdgeFlagPointer, void, (GLsizei stride, const GLboolean *pointer), (stride,pointer)) \
X(glEdgeFlagv, void, (const GLboolean *flag), (flag)) \
X(glEnable, void, (GLenum cap), (cap)) \
X(glEnableClientState, void, (GLenum array), (array)) \
X(glEnd, void, (void), ()) \
X(glEndList, void, (void), ()) \
X(glEvalCoord1d, void, (GLdouble u), (u)) \
X(glEvalCoord1dv, void, (const GLdouble *u), (u)) \
X(glEvalCoord1f, void, (GLfloat u), (u)) \
X(glEvalCoord1fv, void, (const GLfloat *u), (u)) \
X(glEvalCoord2d, void, (GLdouble u, GLdouble v), (u,v)) \
X(glEvalCoord2dv, void, (const GLdouble *u), (u)) \
X(glEvalCoord2f, void, (GLfloat u, GLfloat v), (u,v)) \
X(glEvalCoord2fv, void, (const GLfloat *u), (u)) \
X(glEvalMesh1, void, (GLenum mode, GLint i1, GLint i2), (mode,i1,i2)) \
X(glEvalMesh2, void, (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2), (mode,i1,i2,j1,j2)) \
X(glEvalPoint1, void, (GLint i), (i)) \
X(glEvalPoint2, void, (GLint i, GLint j), (i,j)) \
X(glFeedbackBuffer, void, (GLsizei size, GLenum type, GLfloat *buffer), (size,type,buffer)) \
X(glFinish, void, (void), ()) \
X(glFlush, void, (void), ()) \
X(glFlushHold, GLuint, (void), ()) \
X(glFogCoordPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer)) \
X(glFogCoordd, void, (GLdouble fog), (fog)) \
X(glFogCoorddv, void, (const GLdouble *fog), (fog)) \
X(glFogCoordf, void, (GLfloat fog), (fog)) \
X(glFogCoordfv, void, (const GLfloat *fog), (fog)) \
X(glFogf, void, (GLenum pname, GLfloat param), (pname,param)) \
X(glFogfv, void, (GLenum pname, const GLfloat *params), (pname,params)) \
X(glFogi, void, (GLenum pname, GLint param), (pname,param)) \
X(glFogiv, void, (GLenum pname, const GLint *params), (pname,params)) \
X(glFrontFace, void, (GLenum mode), (mode)) \
X(glFrustum, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left,right,bottom,top,zNear,zFar)) \
X(glGenLists, GLuint, (GLsizei range), (range)) \
X(glGenTextures, void, (GLsizei n, GLuint *textures), (n,textures)) \
X(glGetBooleanv, void, (GLenum pname, GLboolean *params), (pname,params)) \
X(glGetClipPlane, void, (GLenum plane, GLdouble *equation), (plane,equation)) \
X(glGetColorTable, void, (GLenum target, GLenum format, GLenum type, GLvoid *table), (target,format,type,table)) \
X(glGetColorTableParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \
X(glGetColorTableParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \
X(glGetCompressedTexImage, void, (GLenum target, GLint lod, GLvoid *img), (target,lod,img)) \
X(glGetConvolutionFilter, void, (GLenum target, GLenum format, GLenum type, GLvoid *image), (target,format,type,image)) \
X(glGetConvolutionParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \
X(glGetConvolutionParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \
X(glGetDoublev, void, (GLenum pname, GLdouble *params), (pname,params)) \
X(glGetError, GLenum, (void), ()) \
X(glGetFloatv, void, (GLenum pname, GLfloat *params), (pname,params)) \
X(glGetHistogram, void, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values), (target,reset,format,type,values)) \
X(glGetHistogramParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \
X(glGetHistogramParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \
X(glGetIntegerv, void, (GLenum pname, GLint *params), (pname,params)) \
X(glGetLightfv, void, (GLenum light, GLenum pname, GLfloat *params), (light,pname,params)) \
X(glGetLightiv, void, (GLenum light, GLenum pname, GLint *params), (light,pname,params)) \
X(glGetMapdv, void, (GLenum target, GLenum query, GLdouble *v), (target,query,v)) \
X(glGetMapfv, void, (GLenum target, GLenum query, GLfloat *v), (target,query,v)) \
X(glGetMapiv, void, (GLenum target, GLenum query, GLint *v), (target,query,v)) \
X(glGetMaterialfv, void, (GLenum face, GLenum pname, GLfloat *params), (face,pname,params)) \
X(glGetMaterialiv, void, (GLenum face, GLenum pname, GLint *params), (face,pname,params)) \
X(glGetMinmax, void, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values), (target,reset,format,type,values)) \
X(glGetMinmaxParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \
X(glGetMinmaxParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \
X(glGetPixelMapfv, void, (GLenum map, GLfloat *values), (map,values)) \
X(glGetPixelMapuiv, void, (GLenum map, GLuint *values), (map,values)) \
X(glGetPixelMapusv, void, (GLenum map, GLushort *values), (map,values)) \
X(glGetPointerv, void, (GLenum pname, GLvoid* *params), (pname,params)) \
X(glGetPolygonStipple, void, (GLubyte *mask), (mask)) \
X(glGetSeparableFilter, void, (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span), (target,format,type,row,column,span)) \
X(glGetString, const, (GLenum name), (name)) \
X(glGetTexEnvfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \
X(glGetTexEnviv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \
X(glGetTexGendv, void, (GLenum coord, GLenum pname, GLdouble *params), (coord,pname,params)) \
X(glGetTexGenfv, void, (GLenum coord, GLenum pname, GLfloat *params), (coord,pname,params)) \
X(glGetTexGeniv, void, (GLenum coord, GLenum pname, GLint *params), (coord,pname,params)) \
X(glGetTexImage, void, (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels), (target,level,format,type,pixels)) \
X(glGetTexLevelParameterfv, void, (GLenum target, GLint level, GLenum pname, GLfloat *params), (target,level,pname,params)) \
X(glGetTexLevelParameteriv, void, (GLenum target, GLint level, GLenum pname, GLint *params), (target,level,pname,params)) \
X(glGetTexParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \
X(glGetTexParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \
X(glHint, void, (GLenum target, GLenum mode), (target,mode)) \
X(glHistogram, void, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink), (target,width,internalformat,sink)) \
X(glIndexMask, void, (GLuint mask), (mask)) \
X(glIndexPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer)) \
X(glIndexd, void, (GLdouble c), (c)) \
X(glIndexdv, void, (const GLdouble *c), (c)) \
X(glIndexf, void, (GLfloat c), (c)) \
X(glIndexfv, void, (const GLfloat *c), (c)) \
X(glIndexi, void, (GLint c), (c)) \
X(glIndexiv, void, (const GLint *c), (c)) \
X(glIndexs, void, (GLshort c), (c)) \
X(glIndexsv, void, (const GLshort *c), (c)) \
X(glIndexub, void, (GLubyte c), (c)) \
X(glIndexubv, void, (const GLubyte *c), (c)) \
X(glInitNames, void, (void), ()) \
X(glInterleavedArrays, void, (GLenum format, GLsizei stride, const GLvoid *pointer), (format,stride,pointer)) \
X(glIsEnabled, GLboolean, (GLenum cap), (cap)) \
X(glIsList, GLboolean, (GLuint list), (list)) \
X(glIsTexture, GLboolean, (GLuint texture), (texture)) \
X(glLightModelf, void, (GLenum pname, GLfloat param), (pname,param)) \
X(glLightModelfv, void, (GLenum pname, const GLfloat *params), (pname,params)) \
X(glLightModeli, void, (GLenum pname, GLint param), (pname,param)) \
X(glLightModeliv, void, (GLenum pname, const GLint *params), (pname,params)) \
X(glLightf, void, (GLenum light, GLenum pname, GLfloat param), (light,pname,param)) \
X(glLightfv, void, (GLenum light, GLenum pname, const GLfloat *params), (light,pname,params)) \
X(glLighti, void, (GLenum light, GLenum pname, GLint param), (light,pname,param)) \
X(glLightiv, void, (GLenum light, GLenum pname, const GLint *params), (light,pname,params)) \
X(glLineStipple, void, (GLint factor, GLushort pattern), (factor,pattern)) \
X(glLineWidth, void, (GLfloat width), (width)) \
X(glListBase, void, (GLuint base), (base)) \
X(glLoadIdentity, void, (void), ()) \
X(glLoadMatrixd, void, (const GLdouble *m), (m)) \
X(glLoadMatrixf, void, (const GLfloat *m), (m)) \
X(glLoadName, void, (GLuint name), (name)) \
X(glLoadTransposeMatrixd, void, (const GLdouble *m), (m)) \
X(glLoadTransposeMatrixf, void, (const GLfloat *m), (m)) \
X(glLogicOp, void, (GLenum opcode), (opcode)) \
X(glMap1d, void, (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points), (target,u1,u2,stride,order,points)) \
X(glMap1f, void, (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points), (target,u1,u2,stride,order,points)) \
X(glMap2d, void, (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points), (target,u1,u2,ustride,uorder,v1,v2,vstride,vorder,points)) \
X(glMap2f, void, (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points), (target,u1,u2,ustride,uorder,v1,v2,vstride,vorder,points)) \
X(glMapGrid1d, void, (GLint un, GLdouble u1, GLdouble u2), (un,u1,u2)) \
X(glMapGrid1f, void, (GLint un, GLfloat u1, GLfloat u2), (un,u1,u2)) \
X(glMapGrid2d, void, (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2), (un,u1,u2,vn,v1,v2)) \
X(glMapGrid2f, void, (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2), (un,u1,u2,vn,v1,v2)) \
X(glMaterialf, void, (GLenum face, GLenum pname, GLfloat param), (face,pname,param)) \
X(glMaterialfv, void, (GLenum face, GLenum pname, const GLfloat *params), (face,pname,params)) \
X(glMateriali, void, (GLenum face, GLenum pname, GLint param), (face,pname,param)) \
X(glMaterialiv, void, (GLenum face, GLenum pname, const GLint *params), (face,pname,params)) \
X(glMatrixMode, void, (GLenum mode), (mode)) \
X(glMinmax, void, (GLenum target, GLenum internalformat, GLboolean sink), (target,internalformat,sink)) \
X(glMultMatrixd, void, (const GLdouble *m), (m)) \
X(glMultMatrixf, void, (const GLfloat *m), (m)) \
X(glMultTransposeMatrixd, void, (const GLdouble *m), (m)) \
X(glMultTransposeMatrixf, void, (const GLfloat *m), (m)) \
X(glMultiDrawArrays, void, (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount), (mode,first,count,primcount)) \
X(glMultiDrawElements, void, (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount), (mode,count,type,indices,primcount)) \
X(glMultiTexCoord1d, void, (GLenum target, GLdouble s), (target,s)) \
X(glMultiTexCoord1dv, void, (GLenum target, const GLdouble *v), (target,v)) \
X(glMultiTexCoord1f, void, (GLenum target, GLfloat s), (target,s)) \
X(glMultiTexCoord1fv, void, (GLenum target, const GLfloat *v), (target,v)) \
X(glMultiTexCoord1i, void, (GLenum target, GLint s), (target,s)) \
X(glMultiTexCoord1iv, void, (GLenum target, const GLint *v), (target,v)) \
X(glMultiTexCoord1s, void, (GLenum target, GLshort s), (target,s)) \
X(glMultiTexCoord1sv, void, (GLenum target, const GLshort *v), (target,v)) \
X(glMultiTexCoord2d, void, (GLenum target, GLdouble s, GLdouble t), (target,s,t)) \
X(glMultiTexCoord2dv, void, (GLenum target, const GLdouble *v), (target,v)) \
X(glMultiTexCoord2f, void, (GLenum target, GLfloat s, GLfloat t), (target,s,t)) \
X(glMultiTexCoord2fv, void, (GLenum target, const GLfloat *v), (target,v)) \
X(glMultiTexCoord2i, void, (GLenum target, GLint s, GLint t), (target,s,t)) \
X(glMultiTexCoord2iv, void, (GLenum target, const GLint *v), (target,v)) \
X(glMultiTexCoord2s, void, (GLenum target, GLshort s, GLshort t), (target,s,t)) \
X(glMultiTexCoord2sv, void, (GLenum target, const GLshort *v), (target,v)) \
X(glMultiTexCoord3d, void, (GLenum target, GLdouble s, GLdouble t, GLdouble r), (target,s,t,r)) \
X(glMultiTexCoord3dv, void, (GLenum target, const GLdouble *v), (target,v)) \
X(glMultiTexCoord3f, void, (GLenum target, GLfloat s, GLfloat t, GLfloat r), (target,s,t,r)) \
X(glMultiTexCoord3fv, void, (GLenum target, const GLfloat *v), (target,v)) \
X(glMultiTexCoord3i, void, (GLenum target, GLint s, GLint t, GLint r), (target,s,t,r)) \
X(glMultiTexCoord3iv, void, (GLenum target, const GLint *v), (target,v)) \
X(glMultiTexCoord3s, void, (GLenum target, GLshort s, GLshort t, GLshort r), (target,s,t,r)) \
X(glMultiTexCoord3sv, void, (GLenum target, const GLshort *v), (target,v)) \
X(glMultiTexCoord4d, void, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q), (target,s,t,r,q)) \
X(glMultiTexCoord4dv, void, (GLenum target, const GLdouble *v), (target,v)) \
X(glMultiTexCoord4f, void, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q), (target,s,t,r,q)) \
X(glMultiTexCoord4fv, void, (GLenum target, const GLfloat *v), (target,v)) \
X(glMultiTexCoord4i, void, (GLenum target, GLint s, GLint t, GLint r, GLint q), (target,s,t,r,q)) \
X(glMultiTexCoord4iv, void, (GLenum target, const GLint *v), (target,v)) \
X(glMultiTexCoord4s, void, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q), (target,s,t,r,q)) \
X(glMultiTexCoord4sv, void, (GLenum target, const GLshort *v), (target,v)) \
X(glNewList, void, (GLuint list, GLenum mode), (list,mode)) \
X(glNormal3b, void, (GLbyte nx, GLbyte ny, GLbyte nz), (nx,ny,nz)) \
X(glNormal3bv, void, (const GLbyte *v), (v)) \
X(glNormal3d, void, (GLdouble nx, GLdouble ny, GLdouble nz), (nx,ny,nz)) \
X(glNormal3dv, void, (const GLdouble *v), (v)) \
X(glNormal3f, void, (GLfloat nx, GLfloat ny, GLfloat nz), (nx,ny,nz)) \
X(glNormal3fv, void, (const GLfloat *v), (v)) \
X(glNormal3i, void, (GLint nx, GLint ny, GLint nz), (nx,ny,nz)) \
X(glNormal3iv, void, (const GLint *v), (v)) \
X(glNormal3s, void, (GLshort nx, GLshort ny, GLshort nz), (nx,ny,nz)) \
X(glNormal3sv, void, (const GLshort *v), (v)) \
X(glNormalPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer)) \
X(glOrtho, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left,right,bottom,top,zNear,zFar)) \
X(glPassThrough, void, (GLfloat token), (token)) \
X(glPixelMapfv, void, (GLenum map, GLint mapsize, const GLfloat *values), (map,mapsize,values)) \
X(glPixelMapuiv, void, (GLenum map, GLint mapsize, const GLuint *values), (map,mapsize,values)) \
X(glPixelMapusv, void, (GLenum map, GLint mapsize, const GLushort *values), (map,mapsize,values)) \
X(glPixelStoref, void, (GLenum pname, GLfloat param), (pname,param)) \
X(glPixelStorei, void, (GLenum pname, GLint param), (pname,param)) \
X(glPixelTransferf, void, (GLenum pname, GLfloat param), (pname,param)) \
X(glPixelTransferi, void, (GLenum pname, GLint param), (pname,param)) \
X(glPixelZoom, void, (GLfloat xfactor, GLfloat yfactor), (xfactor,yfactor)) \
X(glPointParameterf, void, (GLenum pname, GLfloat param), (pname,param)) \
X(glPointParameterfv, void, (GLenum pname, const GLfloat *params), (pname,params)) \
X(glPointParameteri, void, (GLenum pname, GLint param), (pname,param)) \
X(glPointParameteriv, void, (GLenum pname, const GLint *params), (pname,params)) \
X(glPointSize, void, (GLfloat size), (size)) \
X(glPolygonMode, void, (GLenum face, GLenum mode), (face,mode)) \
X(glPolygonOffset, void, (GLfloat factor, GLfloat units), (factor,units)) \
X(glPolygonStipple, void, (const GLubyte *mask), (mask)) \
X(glPopAttrib, void, (void), ()) \
X(glPopClientAttrib, void, (void), ()) \
X(glPopMatrix, void, (void), ()) \
X(glPopName, void, (void), ()) \
X(glPrioritizeTextures, void, (GLsizei n, const GLuint *textures, const GLclampf *priorities), (n,textures,priorities)) \
X(glPushAttrib, void, (GLbitfield mask), (mask)) \
X(glPushClientAttrib, void, (GLbitfield mask), (mask)) \
X(glPushMatrix, void, (void), ()) \
X(glPushName, void, (GLuint name), (name)) \
X(glRasterPos2d, void, (GLdouble x, GLdouble y), (x,y)) \
X(glRasterPos2dv, void, (const GLdouble *v), (v)) \
X(glRasterPos2f, void, (GLfloat x, GLfloat y), (x,y)) \
X(glRasterPos2fv, void, (const GLfloat *v), (v)) \
X(glRasterPos2i, void, (GLint x, GLint y), (x,y)) \
X(glRasterPos2iv, void, (const GLint *v), (v)) \
X(glRasterPos2s, void, (GLshort x, GLshort y), (x,y)) \
X(glRasterPos2sv, void, (const GLshort *v), (v)) \
X(glRasterPos3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glRasterPos3dv, void, (const GLdouble *v), (v)) \
X(glRasterPos3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glRasterPos3fv, void, (const GLfloat *v), (v)) \
X(glRasterPos3i, void, (GLint x, GLint y, GLint z), (x,y,z)) \
X(glRasterPos3iv, void, (const GLint *v), (v)) \
X(glRasterPos3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z)) \
X(glRasterPos3sv, void, (const GLshort *v), (v)) \
X(glRasterPos4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x,y,z,w)) \
X(glRasterPos4dv, void, (const GLdouble *v), (v)) \
X(glRasterPos4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x,y,z,w)) \
X(glRasterPos4fv, void, (const GLfloat *v), (v)) \
X(glRasterPos4i, void, (GLint x, GLint y, GLint z, GLint w), (x,y,z,w)) \
X(glRasterPos4iv, void, (const GLint *v), (v)) \
X(glRasterPos4s, void, (GLshort x, GLshort y, GLshort z, GLshort w), (x,y,z,w)) \
X(glRasterPos4sv, void, (const GLshort *v), (v)) \
X(glReadBuffer, void, (GLenum mode), (mode)) \
X(glReadPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels), (x,y,width,height,format,type,pixels)) \
X(glRectd, void, (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2), (x1,y1,x2,y2)) \
X(glRectdv, void, (const GLdouble *v1, const GLdouble *v2), (v1,v2)) \
X(glRectf, void, (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2), (x1,y1,x2,y2)) \
X(glRectfv, void, (const GLfloat *v1, const GLfloat *v2), (v1,v2)) \
X(glRecti, void, (GLint x1, GLint y1, GLint x2, GLint y2), (x1,y1,x2,y2)) \
X(glRectiv, void, (const GLint *v1, const GLint *v2), (v1,v2)) \
X(glRects, void, (GLshort x1, GLshort y1, GLshort x2, GLshort y2), (x1,y1,x2,y2)) \
X(glRectsv, void, (const GLshort *v1, const GLshort *v2), (v1,v2)) \
X(glReleaseFlushHold, GLenum, (GLuint id), (id)) \
X(glRenderMode, GLint, (GLenum mode), (mode)) \
X(glResetHistogram, void, (GLenum target), (target)) \
X(glResetMinmax, void, (GLenum target), (target)) \
X(glRotated, void, (GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (angle,x,y,z)) \
X(glRotatef, void, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (angle,x,y,z)) \
X(glSampleCoverage, void, (GLclampf value, GLboolean invert), (value,invert)) \
X(glScaled, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glScalef, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glScissor, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glSecondaryColor3b, void, (GLbyte red, GLbyte green, GLbyte blue), (red,green,blue)) \
X(glSecondaryColor3bv, void, (const GLbyte *v), (v)) \
X(glSecondaryColor3d, void, (GLdouble red, GLdouble green, GLdouble blue), (red,green,blue)) \
X(glSecondaryColor3dv, void, (const GLdouble *v), (v)) \
X(glSecondaryColor3f, void, (GLfloat red, GLfloat green, GLfloat blue), (red,green,blue)) \
X(glSecondaryColor3fv, void, (const GLfloat *v), (v)) \
X(glSecondaryColor3i, void, (GLint red, GLint green, GLint blue), (red,green,blue)) \
X(glSecondaryColor3iv, void, (const GLint *v), (v)) \
X(glSecondaryColor3s, void, (GLshort red, GLshort green, GLshort blue), (red,green,blue)) \
X(glSecondaryColor3sv, void, (const GLshort *v), (v)) \
X(glSecondaryColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue), (red,green,blue)) \
X(glSecondaryColor3ubv, void, (const GLubyte *v), (v)) \
X(glSecondaryColor3ui, void, (GLuint red, GLuint green, GLuint blue), (red,green,blue)) \
X(glSecondaryColor3uiv, void, (const GLuint *v), (v)) \
X(glSecondaryColor3us, void, (GLushort red, GLushort green, GLushort blue), (red,green,blue)) \
X(glSecondaryColor3usv, void, (const GLushort *v), (v)) \
X(glSecondaryColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glSelectBuffer, void, (GLsizei size, GLuint *buffer), (size,buffer)) \
X(glSeparableFilter2D, void, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column), (target,internalformat,width,height,format,type,row,column)) \
X(glShadeModel, void, (GLenum mode), (mode)) \
X(glStencilFunc, void, (GLenum func, GLint ref, GLuint mask), (func,ref,mask)) \
X(glStencilMask, void, (GLuint mask), (mask)) \
X(glStencilOp, void, (GLenum fail, GLenum zfail, GLenum zpass), (fail,zfail,zpass)) \
X(glTexCoord1d, void, (GLdouble s), (s)) \
X(glTexCoord1dv, void, (const GLdouble *v), (v)) \
X(glTexCoord1f, void, (GLfloat s), (s)) \
X(glTexCoord1fv, void, (const GLfloat *v), (v)) \
X(glTexCoord1i, void, (GLint s), (s)) \
X(glTexCoord1iv, void, (const GLint *v), (v)) \
X(glTexCoord1s, void, (GLshort s), (s)) \
X(glTexCoord1sv, void, (const GLshort *v), (v)) \
X(glTexCoord2d, void, (GLdouble s, GLdouble t), (s,t)) \
X(glTexCoord2dv, void, (const GLdouble *v), (v)) \
X(glTexCoord2f, void, (GLfloat s, GLfloat t), (s,t)) \
X(glTexCoord2fv, void, (const GLfloat *v), (v)) \
X(glTexCoord2i, void, (GLint s, GLint t), (s,t)) \
X(glTexCoord2iv, void, (const GLint *v), (v)) \
X(glTexCoord2s, void, (GLshort s, GLshort t), (s,t)) \
X(glTexCoord2sv, void, (const GLshort *v), (v)) \
X(glTexCoord3d, void, (GLdouble s, GLdouble t, GLdouble r), (s,t,r)) \
X(glTexCoord3dv, void, (const GLdouble *v), (v)) \
X(glTexCoord3f, void, (GLfloat s, GLfloat t, GLfloat r), (s,t,r)) \
X(glTexCoord3fv, void, (const GLfloat *v), (v)) \
X(glTexCoord3i, void, (GLint s, GLint t, GLint r), (s,t,r)) \
X(glTexCoord3iv, void, (const GLint *v), (v)) \
X(glTexCoord3s, void, (GLshort s, GLshort t, GLshort r), (s,t,r)) \
X(glTexCoord3sv, void, (const GLshort *v), (v)) \
X(glTexCoord4d, void, (GLdouble s, GLdouble t, GLdouble r, GLdouble q), (s,t,r,q)) \
X(glTexCoord4dv, void, (const GLdouble *v), (v)) \
X(glTexCoord4f, void, (GLfloat s, GLfloat t, GLfloat r, GLfloat q), (s,t,r,q)) \
X(glTexCoord4fv, void, (const GLfloat *v), (v)) \
X(glTexCoord4i, void, (GLint s, GLint t, GLint r, GLint q), (s,t,r,q)) \
X(glTexCoord4iv, void, (const GLint *v), (v)) \
X(glTexCoord4s, void, (GLshort s, GLshort t, GLshort r, GLshort q), (s,t,r,q)) \
X(glTexCoord4sv, void, (const GLshort *v), (v)) \
X(glTexCoordPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glTexEnvf, void, (GLenum target, GLenum pname, GLfloat param), (target,pname,param)) \
X(glTexEnvfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \
X(glTexEnvi, void, (GLenum target, GLenum pname, GLint param), (target,pname,param)) \
X(glTexEnviv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \
X(glTexGend, void, (GLenum coord, GLenum pname, GLdouble param), (coord,pname,param)) \
X(glTexGendv, void, (GLenum coord, GLenum pname, const GLdouble *params), (coord,pname,params)) \
X(glTexGenf, void, (GLenum coord, GLenum pname, GLfloat param), (coord,pname,param)) \
X(glTexGenfv, void, (GLenum coord, GLenum pname, const GLfloat *params), (coord,pname,params)) \
X(glTexGeni, void, (GLenum coord, GLenum pname, GLint param), (coord,pname,param)) \
X(glTexGeniv, void, (GLenum coord, GLenum pname, const GLint *params), (coord,pname,params)) \
X(glTexImage1D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels), (target,level,internalformat,width,border,format,type,pixels)) \
X(glTexImage2D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels), (target,level,internalformat,width,height,border,format,type,pixels)) \
X(glTexImage3D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels), (target,level,internalformat,width,height,depth,border,format,type,pixels)) \
X(glTexParameterf, void, (GLenum target, GLenum pname, GLfloat param), (target,pname,param)) \
X(glTexParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \
X(glTexParameteri, void, (GLenum target, GLenum pname, GLint param), (target,pname,param)) \
X(glTexParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \
X(glTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels), (target,level,xoffset,width,format,type,pixels)) \
X(glTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels), (target,level,xoffset,yoffset,width,height,format,type,pixels)) \
X(glTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels), (target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)) \
X(glTranslated, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glTranslatef, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glValidBackBufferHintAutodesk, GLboolean, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glVertex2d, void, (GLdouble x, GLdouble y), (x,y)) \
X(glVertex2dv, void, (const GLdouble *v), (v)) \
X(glVertex2f, void, (GLfloat x, GLfloat y), (x,y)) \
X(glVertex2fv, void, (const GLfloat *v), (v)) \
X(glVertex2i, void, (GLint x, GLint y), (x,y)) \
X(glVertex2iv, void, (const GLint *v), (v)) \
X(glVertex2s, void, (GLshort x, GLshort y), (x,y)) \
X(glVertex2sv, void, (const GLshort *v), (v)) \
X(glVertex3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glVertex3dv, void, (const GLdouble *v), (v)) \
X(glVertex3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glVertex3fv, void, (const GLfloat *v), (v)) \
X(glVertex3i, void, (GLint x, GLint y, GLint z), (x,y,z)) \
X(glVertex3iv, void, (const GLint *v), (v)) \
X(glVertex3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z)) \
X(glVertex3sv, void, (const GLshort *v), (v)) \
X(glVertex4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x,y,z,w)) \
X(glVertex4dv, void, (const GLdouble *v), (v)) \
X(glVertex4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x,y,z,w)) \
X(glVertex4fv, void, (const GLfloat *v), (v)) \
X(glVertex4i, void, (GLint x, GLint y, GLint z, GLint w), (x,y,z,w)) \
X(glVertex4iv, void, (const GLint *v), (v)) \
X(glVertex4s, void, (GLshort x, GLshort y, GLshort z, GLshort w), (x,y,z,w)) \
X(glVertex4sv, void, (const GLshort *v), (v)) \
X(glVertexPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glViewport, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glWindowBackBufferHintAutodesk, void, (void), ()) \
X(glWindowPos2d, void, (GLdouble x, GLdouble y), (x,y)) \
X(glWindowPos2dv, void, (const GLdouble *p), (p)) \
X(glWindowPos2f, void, (GLfloat x, GLfloat y), (x,y)) \
X(glWindowPos2fv, void, (const GLfloat *p), (p)) \
X(glWindowPos2i, void, (GLint x, GLint y), (x,y)) \
X(glWindowPos2iv, void, (const GLint *p), (p)) \
X(glWindowPos2s, void, (GLshort x, GLshort y), (x,y)) \
X(glWindowPos2sv, void, (const GLshort *p), (p)) \
X(glWindowPos3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glWindowPos3dv, void, (const GLdouble *p), (p)) \
X(glWindowPos3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glWindowPos3fv, void, (const GLfloat *p), (p)) \
X(glWindowPos3i, void, (GLint x, GLint y, GLint z), (x,y,z)) \
X(glWindowPos3iv, void, (const GLint *p), (p)) \
X(glWindowPos3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z)) \
X(glWindowPos3sv, void, (const GLshort *p), (p))

View file

@ -1,4 +1,4 @@
/* $Id: opengl32.c,v 1.8 2004/02/03 14:23:42 royce Exp $
/* $Id: opengl32.c,v 1.9 2004/02/05 04:28:11 royce Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -21,14 +21,14 @@
/*static BOOL OPENGL32_LoadDrivers();*/
static void OPENGL32_AppendICD( GLDRIVERDATA *icd );
static void OPENGL32_RemoveICD( GLDRIVERDATA *icd );
static GLDRIVERDATA *OPENGL32_LoadDriver ( LPCWSTR regKey );
static GLDRIVERDATA *OPENGL32_LoadDriver( LPCWSTR regKey );
static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd );
static BOOL OPENGL32_UnloadDriver( GLDRIVERDATA *icd );
/* global vars */
const char* OPENGL32_funcnames[GLIDX_COUNT] SHARED =
{
#define X(func, ret, args) #func,
#define X(func, ret, typeargs, args) #func,
GLFUNCS_MACRO
#undef X
};
@ -54,8 +54,11 @@ static void OPENGL32_ThreadDetach()
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
{
GLTHREADDATA* lpData = NULL;
DBGPRINT( "Info: Called!" );
SECURITY_ATTRIBUTES attrib = { .nLength = sizeof (SECURITY_ATTRIBUTES),
.lpSecurityDescriptor = NULL,
.bInheritHandle = TRUE };
DBGPRINT( "Info: Called!" );
switch ( Reason )
{
/* The DLL is loading due to process
@ -68,8 +71,23 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
memset( &OPENGL32_processdata, 0, sizeof (OPENGL32_processdata) );
/* get list of ICDs from registry: -- not needed (blight)*/
/*OPENGL32_LoadDrivers();*/
/* create driver & glrc list mutex */
OPENGL32_processdata.driver_mutex = CreateMutex( &attrib, FALSE, NULL );
if (OPENGL32_processdata.driver_mutex == NULL)
{
DBGPRINT( "Error: Couldn't create driver_list mutex (%d)",
GetLastError() );
TlsFree( OPENGL32_tls );
}
OPENGL32_processdata.glrc_mutex = CreateMutex( &attrib, FALSE, NULL );
if (OPENGL32_processdata.glrc_mutex == NULL)
{
DBGPRINT( "Error: Couldn't create glrc_list mutex (%d)",
GetLastError() );
CloseHandle( OPENGL32_processdata.driver_mutex );
TlsFree( OPENGL32_tls );
}
/* No break: Initialize the index for first thread. */
/* The attached process creates a new thread. */
@ -95,7 +113,10 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
/* DLL unload due to process termination or FreeLibrary. */
case DLL_PROCESS_DETACH:
OPENGL32_ThreadDetach();
/* FIXME: free resources */
/* FIXME: free resources (driver list, glrc list) */
CloseHandle( OPENGL32_processdata.driver_mutex );
CloseHandle( OPENGL32_processdata.glrc_mutex );
TlsFree(OPENGL32_tls);
break;
}
@ -105,10 +126,17 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
/* FUNCTION: Append ICD to linked list.
* ARGUMENTS: [IN] icd: GLDRIVERDATA to append to list
* TODO: protect from race conditions
*/
static void OPENGL32_AppendICD( GLDRIVERDATA *icd )
{
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.driver_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return; /* FIXME: do we have to expect such an error and handle it? */
}
if (OPENGL32_processdata.driver_list == NULL)
OPENGL32_processdata.driver_list = icd;
else
@ -118,15 +146,26 @@ static void OPENGL32_AppendICD( GLDRIVERDATA *icd )
p = p->next;
p->next = icd;
}
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
}
/* FUNCTION: Remove ICD from linked list.
* ARGUMENTS: [IN] icd: GLDRIVERDATA to remove from list
* TODO: protect from race conditions
*/
static void OPENGL32_RemoveICD( GLDRIVERDATA *icd )
{
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.driver_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return; /* FIXME: do we have to expect such an error and handle it? */
}
if (icd == OPENGL32_processdata.driver_list)
OPENGL32_processdata.driver_list = icd->next;
else
@ -143,35 +182,12 @@ static void OPENGL32_RemoveICD( GLDRIVERDATA *icd )
}
DBGPRINT( "Error: ICD 0x%08x not found in list!", icd );
}
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
}
/* FIXME - I'm assuming we want to return TRUE if we find at least *one* ICD */
/* not needed at the moment -- blight */
#if 0
static BOOL OPENGL32_LoadDrivers()
{
const WCHAR* OpenGLDrivers = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers\\";
HKEY hkey;
WCHAR name[1024];
/* FIXME - detect if we've already done this from another process */
/* FIXME - special-case load of MESA3D as generic implementation ICD. */
if ( ERROR_SUCCESS != RegOpenKey ( HKEY_LOCAL_MACHINE, OpenGLDrivers, &hkey ) )
return FALSE;
for ( int i = 0; RegEnumKeyW(hkey,i,name,sizeof(name)/sizeof(name[0])) == ERROR_SUCCESS; i++ )
{
/* ignoring return value, because OPENGL32_LoadICD() is doing *all* the work... */
/*GLDRIVERDATA* gldd =*/ OPENGL32_LoadICD ( name );
}
RegCloseKey ( hkey );
if ( i > 0 )
return TRUE;
else
return FALSE;
}
#endif /* 0 */
/* FUNCTION: Load an ICD.
* ARGUMENTS: [IN] driver: Name of display driver.
@ -179,95 +195,46 @@ static BOOL OPENGL32_LoadDrivers()
*
* TODO: call SetLastError() where appropriate
*/
static GLDRIVERDATA *OPENGL32_LoadDriver ( LPCWSTR driver )
static GLDRIVERDATA *OPENGL32_LoadDriver( LPCWSTR driver )
{
HKEY hKey;
WCHAR subKey[1024] = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers\\";
LONG ret;
DWORD type, size;
DWORD version, driverVersion, flags; /* registry values */
WCHAR dll[256];
GLDRIVERDATA *icd;
DBGPRINT( "Info: Loading driver %ws...", driver );
/* open registry key */
wcsncat( subKey, driver, 1024 );
ret = RegOpenKeyExW( HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't open registry key '%ws'", subKey );
return NULL;
}
/* query values */
size = sizeof (dll) * sizeof (dll[0]);
ret = RegQueryValueExW( hKey, L"Dll", 0, &type, (LPBYTE)dll, &size );
if (ret != ERROR_SUCCESS || type != REG_SZ)
{
DBGPRINT( "Error: Couldn't query Dll value or not a string" );
RegCloseKey( hKey );
return NULL;
}
size = sizeof (DWORD);
ret = RegQueryValueExW( hKey, L"Version", 0, &type, (LPBYTE)&version, &size );
if (ret != ERROR_SUCCESS || type != REG_DWORD)
{
DBGPRINT( "Warning: Couldn't query Version value or not a DWORD" );
version = 0;
}
size = sizeof (DWORD);
ret = RegQueryValueExW( hKey, L"DriverVersion", 0, &type,
(LPBYTE)&driverVersion, &size );
if (ret != ERROR_SUCCESS || type != REG_DWORD)
{
DBGPRINT( "Warning: Couldn't query DriverVersion value or not a DWORD" );
driverVersion = 0;
}
size = sizeof (DWORD);
ret = RegQueryValueExW( hKey, L"Flags", 0, &type, (LPBYTE)&flags, &size );
if (ret != ERROR_SUCCESS || type != REG_DWORD)
{
DBGPRINT( "Warning: Couldn't query Flags value or not a DWORD" );
flags = 0;
}
/* close key */
RegCloseKey( hKey );
DBGPRINT( "Info: Dll = %ws", dll );
DBGPRINT( "Info: Version = 0x%08x", version );
DBGPRINT( "Info: DriverVersion = 0x%08x", driverVersion );
DBGPRINT( "Info: Flags = 0x%08x", flags );
/* allocate driver data */
icd = (GLDRIVERDATA*)HeapAlloc( GetProcessHeap(),
HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,
sizeof (GLDRIVERDATA) );
if (icd == NULL)
{
DBGPRINT( "Error: Couldnt allocate GLDRIVERDATA!" );
DBGPRINT( "Error: Couldn't allocate GLDRIVERDATA! (%d)", GetLastError() );
return NULL;
}
wcsncpy( icd->driver_name, driver, 256 );
wcsncpy( icd->dll, dll, 256 );
icd->version = version;
icd->driver_version = driverVersion;
icd->flags = flags;
/* load ICD */
ret = OPENGL32_InitializeDriver( icd );
ret = OPENGL32_RegGetDriverInfo( driver, icd );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't query driver information (%d)", ret );
if (!HeapFree( GetProcessHeap(), 0, icd ))
DBGPRINT( "Error: HeapFree() returned false, error code = %d",
GetLastError() );
return NULL;
}
DBGPRINT( "Info: Dll = %ws", icd->dll );
DBGPRINT( "Info: Version = 0x%08x", icd->version );
DBGPRINT( "Info: DriverVersion = 0x%08x", icd->driverVersion );
DBGPRINT( "Info: Flags = 0x%08x", icd->flags );
/* load/initialize ICD */
ret = OPENGL32_InitializeDriver( icd );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldnt initialize ICD!" );
if (!HeapFree( GetProcessHeap(), 0, icd ))
DBGPRINT( "Error: HeapFree() returned false, error code = %d",
GetLastError() );
return NULL;
}
@ -288,12 +255,15 @@ static GLDRIVERDATA *OPENGL32_LoadDriver ( LPCWSTR driver )
((FARPROC)(icd->proc)) = GetProcAddress( icd->handle, #proc ); \
if (required && icd->proc == NULL) { \
DBGPRINT( "Error: GetProcAddress(\"%s\") failed!", #proc ); \
FreeLibrary( icd->handle ); \
return GetLastError(); \
}
static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd )
{
UINT i;
/* check version */
if (icd->version > 2)
DBGPRINT( "Warning: ICD version > 2 (%d)", icd->version );
/* load dll */
icd->handle = LoadLibraryW( icd->dll );
@ -304,10 +274,28 @@ static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd )
return err;
}
/* validate version */
if (icd->driver_version > 1)
{
LOAD_DRV_PROC(icd, DrvValidateVersion, FALSE);
if (icd->DrvValidateVersion != NULL)
{
if (!icd->DrvValidateVersion( icd->driver_version ))
{
DBGPRINT( "Error: DrvValidateVersion failed!" );
DBGBREAK();
FreeLibrary( icd->handle );
return ERROR_INVALID_FUNCTION; /* FIXME: use better error code */
}
}
else
DBGPRINT( "Info: DrvValidateVersion not exported by ICD" );
}
/* load DrvXXX procs */
LOAD_DRV_PROC(icd, DrvCopyContext, TRUE);
LOAD_DRV_PROC(icd, DrvCreateContext, TRUE);
LOAD_DRV_PROC(icd, DrvCreateLayerContext, TRUE);
LOAD_DRV_PROC(icd, DrvCreateContext, FALSE);
LOAD_DRV_PROC(icd, DrvCreateLayerContext, FALSE);
LOAD_DRV_PROC(icd, DrvDeleteContext, TRUE);
LOAD_DRV_PROC(icd, DrvDescribeLayerPlane, TRUE);
LOAD_DRV_PROC(icd, DrvDescribePixelFormat, TRUE);
@ -321,16 +309,13 @@ static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd )
LOAD_DRV_PROC(icd, DrvShareLists, TRUE);
LOAD_DRV_PROC(icd, DrvSwapBuffers, TRUE);
LOAD_DRV_PROC(icd, DrvSwapLayerBuffers, TRUE);
LOAD_DRV_PROC(icd, DrvValidateVersion, TRUE);
/* now load the glXXX functions */
for (i = 0; i < GLIDX_COUNT; i++)
/* we require at least one of DrvCreateContext and DrvCreateLayerContext */
if (icd->DrvCreateContext == NULL || icd->DrvCreateLayerContext == NULL)
{
icd->func_list[i] = (PVOID)(icd->DrvGetProcAddress( OPENGL32_funcnames[i] ));
#ifdef DEBUG_OPENGL32_ICD_EXPORTS
DBGPRINT( "Info: Function %s %sfound in ICD.", OPENGL32_funcnames[i],
(icd->func_list[i] == NULL) ? ("NOT ") : ("") );
#endif
DBGPRINT( "Error: One of DrvCreateContext/DrvCreateLayerContext is required!" );
FreeLibrary( icd->handle );
return ERROR_INVALID_FUNCTION; /* FIXME: use better error code... */
}
return ERROR_SUCCESS;
@ -352,17 +337,25 @@ static BOOL OPENGL32_UnloadDriver( GLDRIVERDATA *icd )
if (!FreeLibrary( icd->handle ))
{
allOk = FALSE;
DBGPRINT( "Warning: FreeLibrary on ICD %ws failed!", icd->dll );
DBGPRINT( "Warning: FreeLibrary on ICD %ws failed! (%d)", icd->dll,
GetLastError() );
}
/* free resources */
OPENGL32_RemoveICD( icd );
HeapFree( GetProcessHeap(), 0, icd );
if (!HeapFree( GetProcessHeap(), 0, icd ))
{
allOk = FALSE;
DBGPRINT( "Warning: HeapFree() returned FALSE, error code = %d",
GetLastError() );
}
return allOk;
}
/* FUNCTION: Load ICD (shared ICD data)
* RETURNS: GLDRIVERDATA pointer on success, NULL otherwise.
*/
@ -381,7 +374,7 @@ GLDRIVERDATA *OPENGL32_LoadICD ( LPCWSTR driver )
}
/* not found - try to load */
icd = OPENGL32_LoadDriver ( driver );
icd = OPENGL32_LoadDriver( driver );
if (icd != NULL)
icd->refcount = 1;
return icd;
@ -400,4 +393,125 @@ BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd )
return TRUE;
}
/* FUNCTION: Enumerate OpenGLDrivers (from registry)
* ARGUMENTS: [IN] idx Index of the driver to get information about
* [OUT] name Pointer to an array of WCHARs (can be NULL)
* [I,O] cName Pointer to a DWORD. Input is len of name array;
* Output is length of the drivername.
* Can be NULL if name is NULL.
* RETURNS: Error code (ERROR_NO_MORE_ITEMS at end of list); On failure all
* OUT vars are left untouched.
*/
DWORD OPENGL32_RegEnumDrivers( DWORD idx, LPWSTR name, LPDWORD cName )
{
HKEY hKey;
LPCWSTR subKey = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers\\";
LONG ret;
DWORD size;
WCHAR driver[256];
if (name == NULL)
return ERROR_SUCCESS; /* nothing to do */
if (cName == NULL)
return ERROR_INVALID_FUNCTION; /* we need cName when name is given */
/* open OpenGLDrivers registry key */
ret = RegOpenKeyExW( HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't open registry key '%ws'", subKey );
return ret;
}
/* get subkey name */
size = sizeof (driver) / sizeof (driver[0]);
ret = RegEnumKeyW( hKey, idx, name, *cName );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't get OpenGLDrivers subkey name (%d)", ret );
RegCloseKey( hKey );
return ret;
}
*cName = wcslen( name );
/* close key */
RegCloseKey( hKey );
return ERROR_SUCCESS;
}
/* FUNCTION: Get registry values for a driver given a name
* ARGUMENTS: [IN] idx Index of the driver to get information about
* [OUT] icd Pointer to GLDRIVERDATA. On success the following
* fields are filled: driver_name, dll, version,
* driver_version and flags.
* RETURNS: Error code; On failure all OUT vars are left untouched.
*/
DWORD OPENGL32_RegGetDriverInfo( LPCWSTR driver, GLDRIVERDATA *icd )
{
HKEY hKey;
WCHAR subKey[1024] = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers\\";
LONG ret;
DWORD type, size;
/* drivers registry values */
DWORD version = 1, driverVersion = 0, flags = 0;
WCHAR dll[256];
/* open driver registry key */
wcsncat( subKey, driver, 1024 );
ret = RegOpenKeyExW( HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't open registry key '%ws'", subKey );
return ret;
}
/* query values */
size = sizeof (dll);
ret = RegQueryValueExW( hKey, L"Dll", 0, &type, (LPBYTE)dll, &size );
if (ret != ERROR_SUCCESS || type != REG_SZ)
{
DBGPRINT( "Error: Couldn't query Dll value or not a string" );
RegCloseKey( hKey );
return ret;
}
size = sizeof (DWORD);
ret = RegQueryValueExW( hKey, L"Version", 0, &type, (LPBYTE)&version, &size );
if (ret != ERROR_SUCCESS || type != REG_DWORD)
DBGPRINT( "Warning: Couldn't query Version value or not a DWORD" );
size = sizeof (DWORD);
ret = RegQueryValueExW( hKey, L"DriverVersion", 0, &type,
(LPBYTE)&driverVersion, &size );
if (ret != ERROR_SUCCESS || type != REG_DWORD)
DBGPRINT( "Warning: Couldn't query DriverVersion value or not a DWORD" );
size = sizeof (DWORD);
ret = RegQueryValueExW( hKey, L"Flags", 0, &type, (LPBYTE)&flags, &size );
if (ret != ERROR_SUCCESS || type != REG_DWORD)
DBGPRINT( "Warning: Couldn't query Flags value or not a DWORD" );
/* close key */
RegCloseKey( hKey );
/* output data */
/* FIXME: NUL-terminate strings? */
wcsncpy( icd->driver_name, driver,
sizeof (icd->driver_name) / sizeof (icd->driver_name[0]) - 1 );
wcsncpy( icd->dll, dll,
sizeof (icd->dll) / sizeof (icd->dll[0]) );
icd->version = version;
icd->driver_version = driverVersion;
icd->flags = flags;
return ERROR_SUCCESS;
}
/* EOF */

View file

@ -1,4 +1,4 @@
; $Id: opengl32.def,v 1.1 2004/02/03 14:23:42 royce Exp $
; $Id: opengl32.def,v 1.2 2004/02/05 04:28:11 royce Exp $
;
; opengl32.edf
;
@ -8,394 +8,394 @@ LIBRARY opengl32.dll
EXPORTS
;DllInitialize
glAccum=glAccum@8
glAlphaFunc=glAlphaFunc@8
glAreTexturesResident=glAreTexturesResident@12
glArrayElement=glArrayElement@4
glBegin=glBegin@4
glBindTexture=glBindTexture@8
glBitmap=glBitmap@28
glBlendFunc=glBlendFunc@8
glCallList=glCallList@4
glCallLists=glCallLists@12
glClear=glClear@4
glClearAccum=glClearAccum@16
glClearColor=glClearColor@16
glClearDepth=glClearDepth@4
glClearIndex=glClearIndex@4
glClearStencil=glClearStencil@4
glClipPlane=glClipPlane@8
glAccum
glAlphaFunc
glAreTexturesResident
glArrayElement
glBegin
glBindTexture
glBitmap
glBlendFunc
glCallList
glCallLists
glClear
glClearAccum
glClearColor
glClearDepth
glClearIndex
glClearStencil
glClipPlane
glColor3b=glColor3b@3
glColor3bv=glColor3b@4
glColor3d=glColor3d@24
glColor3dv=glColor3d@4
glColor3f=glColor3f@12
glColor3fv=glColor3fv@4
glColor3i=glColor3i@12
glColor3iv=glColor3iv@4
glColor3s=glColor3s@6
glColor3sv=glColor3sv@4
glColor3ub=glColor3ub@3
glColor3ubv=glColor3ubv@4
glColor3ui=glColor3ui@12
glColor3uiv=glColor3uiv@4
glColor3us=glColor3us@6
glColor3usv=glColor3usv@4
glColor3b
glColor3bv
glColor3d
glColor3dv
glColor3f
glColor3fv
glColor3i
glColor3iv
glColor3s
glColor3sv
glColor3ub
glColor3ubv
glColor3ui
glColor3uiv
glColor3us
glColor3usv
glColor4b=glColor4b@4
glColor4bv=glColor4bv@4
glColor4d=glColor4d@32
glColor4dv=glColor4dv@4
glColor4f=glColor4f@16
glColor4fv=glColor4fv@4
glColor4i=glColor4i@16
glColor4iv=glColor4iv@4
glColor4s=glColor4s@8
glColor4sv=glColor4sv@4
glColor4ub=glColor4ub@4
glColor4ubv=glColor4ubv@4
glColor4ui=glColor4ui@16
glColor4uiv=glColor4uiv@4
glColor4us=glColor4us@8
glColor4usv=glColor4usv@4
glColor4b
glColor4bv
glColor4d
glColor4dv
glColor4f
glColor4fv
glColor4i
glColor4iv
glColor4s
glColor4sv
glColor4ub
glColor4ubv
glColor4ui
glColor4uiv
glColor4us
glColor4usv
glColorMask=glColorMask@4
glColorMaterial=glColorMaterial@8
glColorPointer=glColorPointer@16
glCopyPixels=glCopyPixels@20
glCopyTexImage1D=glCopyTexImage1D@28
glCopyTexImage2D=glCopyTexImage2D@32
glCopyTexSubImage1D=glCopyTexSubImage1D@24
glCopyTexSubImage2D=glCopyTexSubImage2D@32
glCullFace=glCullFace@4
glColorMask
glColorMaterial
glColorPointer
glCopyPixels
glCopyTexImage1D
glCopyTexImage2D
glCopyTexSubImage1D
glCopyTexSubImage2D
glCullFace
;glDebugEntry
glDeleteLists=glDeleteLists@8
glDeleteTextures=glDeleteTextues@8
glDepthFunc=glDepthFunc@4
glDepthMask=glDepthMask@4
glDepthRange=glDepthRange@8
glDisable=glDisable@4
glDisableClientState=glDisableClientState@4
glDrawArrays=glDrawArrays@12
glDrawBuffer=glDrawBuffer@4
glDrawElements=glDrawElements@16
glDrawPixels=glDrawPixels@20
glEdgeFlag=glEdgeFlag@1
glEdgeFlagPointer=glEdgeFlagPointer@8
glEdgeFlagv=glEdgeFlagv@4
glEnable=glEnable@4
glEnableClientState=glEnableClientState@4
glEnd=glEnd@0
glEndList=glEndList@0
glDeleteLists
glDeleteTextures
glDepthFunc
glDepthMask
glDepthRange
glDisable
glDisableClientState
glDrawArrays
glDrawBuffer
glDrawElements
glDrawPixels
glEdgeFlag
glEdgeFlagPointer
glEdgeFlagv
glEnable
glEnableClientState
glEnd
glEndList
glEvalCoord1d=glEvalCoord1d@8
glEvalCoord1dv=glEvalCoord1dv@4
glEvalCoord1f=glEvalCoord1f@4
glEvalCoord1fv=glEvalCoord1fv@4
glEvalCoord2d=glEvalCoord2d@16
glEvalCoord2dv=glEvalCoord2dv@4
glEvalCoord2f=glEvalCoord2f@8
glEvalCoord2fv=glEvalCoord2fv@4
glEvalCoord1d
glEvalCoord1dv
glEvalCoord1f
glEvalCoord1fv
glEvalCoord2d
glEvalCoord2dv
glEvalCoord2f
glEvalCoord2fv
glEvalMesh1=glEvalMesh1@12
glEvalMesh2=glEvalMesh2@12
glEvalPoint1=glEvalPoint1@4
glEvalPoint2=glEvalPoint2@8
glFeedbackBuffer=glFeedbackBuffer@12
glFinish=glFinish@0
glFlush=glFlush@0
glFogf=glFogf@8
glFogfv=glFogv@8
glFogi=glFogi@8
glFogiv=glFogiv@8
glFrontFace=glFrontFace@4
glFrustum=glFrustum@48
glGenLists=glGenLists@4
glGenTextures=glGenTextires@8
glGetBooleanv=glGetBooleanv@8
glGetClipPlane=glGetClipPlane@8
glGetDoublev=glGetDoublev@8
glGetError=glGetError@0
glGetFloatv=glGetFloatv@8
glGetIntegerv=glGetIntegerv@8
glGetLightfv=glGetLightfv@12
glGetLightiv=glGetLightiv@12
glGetMapdv=glGetMapdv@12
glGetMapfv=glGetMapfv@12
glGetMapiv=glGetMapiv@12
glGetMaterialfv=glGetMaterialfv@12
glGetMaterialiv=glGetMaterialiv@12
glGetPixelMapfv=glGetPixelMapfv@8
glGetPixelMapuiv=glGetPixelMapuiv@8
glGetPixelMapusv=glGetPixelMapusv@8
glGetPointerv=glGetPointerv@8
glGetPolygonStipple=glGetPolygonStipple@4
glGetString=glGetString@4
glGetTexEnvfv=glGetTexEnvfv@12
glGetTexEnviv=glGetTexEnviv@12
glGetTexGendv=glGetTexGendv@12
glGetTexGenfv=glGetTexGenfv@12
glGetTexGeniv=glGetTexGeniv@12
glGetTexImage=glGetTexImage@20
glGetTexLevelParameterfv=glGetTexLevelParameterfv@16
glGetTexLevelParameteriv=glGetTexLevelParameteriv@16
glGetTexParameterfv=glGetTexParameterfv@12
glGetTexParameteriv=glGetTexParameteriv@12
glHint=glHint@8
glIndexd=glIndexd@8
glIndexdv=glIndexdv@4
glIndexf=glIndexf@4
glIndexfv=glIndexfv@4
glIndexi=glIndexi@4
glIndexiv=glIndexiv@4
glIndexMask=glIndexMask@4
glIndexPointer=glIndexPointer@12
glIndexs=glIndexs@2
glIndexsv=glIndexsv@4
glIndexub=glIndexub@1
glIndexubv=glIndexubv@4
glInitNames=glInitNames@0
glInterleavedArrays=glInterleavedArrays@12
glIsEnabled=glIsEnabled@4
glIsList=glIsList@4
glIsTexture=glTexture@4
glEvalMesh1
glEvalMesh2
glEvalPoint1
glEvalPoint2
glFeedbackBuffer
glFinish
glFlush
glFogf
glFogfv
glFogi
glFogiv
glFrontFace
glFrustum
glGenLists
glGenTextures
glGetBooleanv
glGetClipPlane
glGetDoublev
glGetError
glGetFloatv
glGetIntegerv
glGetLightfv
glGetLightiv
glGetMapdv
glGetMapfv
glGetMapiv
glGetMaterialfv
glGetMaterialiv
glGetPixelMapfv
glGetPixelMapuiv
glGetPixelMapusv
glGetPointerv
glGetPolygonStipple
glGetString
glGetTexEnvfv
glGetTexEnviv
glGetTexGendv
glGetTexGenfv
glGetTexGeniv
glGetTexImage
glGetTexLevelParameterfv
glGetTexLevelParameteriv
glGetTexParameterfv
glGetTexParameteriv
glHint
glIndexd
glIndexdv
glIndexf
glIndexfv
glIndexi
glIndexiv
glIndexMask
glIndexPointer
glIndexs
glIndexsv
glIndexub
glIndexubv
glInitNames
glInterleavedArrays
glIsEnabled
glIsList
glIsTexture
glLightf=glLightf@12
glLightfv=glLightfv@12
glLighti=glLighti@12
glLightiv=glLightiv@12
glLightModelf=glLightModelf@8
glLightModelfv=glLightModelfv@8
glLightModeli=glLightModeli@8
glLightModeliv=glLightModeliv@8
glLightf
glLightfv
glLighti
glLightiv
glLightModelf
glLightModelfv
glLightModeli
glLightModeliv
glLineStipple=glLineStipple@6
glLineWidth=glLineWidth@4
glListBase=glListBase@4
glLoadIdentity=glLoadIdentity@0
glLoadMatrixd=glLoadMatrixd@4
glLoadMatrixf=glLoadMatrixf@4
glLoadName=glLoadName@4
glLogicOp=glLogicOp@4
glLineStipple
glLineWidth
glListBase
glLoadIdentity
glLoadMatrixd
glLoadMatrixf
glLoadName
glLogicOp
glMap1d=glMap1d@32
glMap1f=glMap1f@24
glMap2d=glMap2d@56
glMap2f=glMap2f@40
glMapGrid1d=glMapGrid1d@20
glMapGrid1f=glMapGrid1f@12
glMapGrid2d=glMapGrid2d@40
glMapGrid2f=glMapGrid2f@24
glMap1d
glMap1f
glMap2d
glMap2f
glMapGrid1d
glMapGrid1f
glMapGrid2d
glMapGrid2f
glMaterialf=glMaterialf@12
glMaterialfv=glMaterialfv@12
glMateriali=glMateriali@12
glMaterialiv=glMaterialiv@12
glMaterialf
glMaterialfv
glMateriali
glMaterialiv
glMatrixMode=glMatrixMode@4
glMatrixMode
;GlmfBeginGlsBlock
;GlmfCloseMetaFile
;GlmfEndGlsBlock
;GlmfEndPlayback
;GlmfInitPlayback
;GlmfPlayGlsRecord
glMultMatrixd=glMultMatrixd@4
glMultMatrixf=glMultMatrixf@4
glNewList=glNewList@8
glMultMatrixd
glMultMatrixf
glNewList
glNormal3b=glNormal3b@3
glNormal3bv=glNormal3bv@4
glNormal3d=glNormal3d@24
glNormal3dv=glNormal3dv@4
glNormal3f=glNormal3f@12
glNormal3fv=glNormal3fv@4
glNormal3i=glNormal3i@12
glNormal3iv=glNormal3iv@4
glNormal3s=glNormal3s@6
glNormal3sv=glNormal3sv@4
glNormalPointer=glNormalPointer@12
glNormal3b
glNormal3bv
glNormal3d
glNormal3dv
glNormal3f
glNormal3fv
glNormal3i
glNormal3iv
glNormal3s
glNormal3sv
glNormalPointer
glOrtho=glOrtho@24
glPassThrough=glPassThrough@4
glPixelMapfv=glPixelMapfv@12
glPixelMapuiv=glPixelMapuiv@12
glPixelMapusv=glPixelMapusv@12
glPixelStoref=glPixelStoref@8
glPixelStorei=glPixelStorei@8
glPixelTransferf=glPixelTransferf@8
glPixelTransferi=glPixelTransferi@8
glPixelZoom=glPixelZoom@8
glPointSize=glPointSize@4
glPolygonMode=glPolygonMode@8
glPolygonOffset=glPolygonOffset@8
glPolygonStipple=glPolygonStipple@4
glPopAttrib=glPopAttrib@0
glPopClientAttrib=glPopClientAttrib@0
glPopMatrix=glPopMatrix@0
glPopName=glPopName@0
glPrioritizeTextures=glPrioritizeTextures@12
glPushAttrib=glPushAttrib@4
glPushClientAttrib=glPushClientAttrib@4
glPushMatrix=glPushMatrix@0
glPushName=glPushName@4
glRasterPos2d=glRasterPos2d@16
glRasterPos2dv=glRasterPos2dv@4
glRasterPos2f=glRasterPos2f@8
glRasterPos2fv=glRasterPos2fv@4
glRasterPos2i=glRasterPos2i@8
glRasterPos2iv=glRasterPos2iv@4
glRasterPos2s=glRasterPos2s@8
glRasterPos2sv=glRasterPos2sv@8
glRasterPos3d=glRasterPos3d@24
glRasterPos3dv=glRasterPos3dv@4
glRasterPos3f=glRasterPos3f@12
glRasterPos3fv=glRasterPos3fv@4
glRasterPos3i=glRasterPos3i@12
glRasterPos3iv=glRasterPos3iv@4
glRasterPos3s=glRasterPos3s@12
glRasterPos3sv=glRasterPos3sv@4
glRasterPos4d=glRasterPos4d@32
glRasterPos4dv=glRasterPos4dv@4
glRasterPos4f=glRasterPos4f@16
glRasterPos4fv=glRasterPos4fv@4
glRasterPos4i=glRasterPos4i@16
glRasterPos4iv=glRasterPos4iv@4
glRasterPos4s=glRasterPos4s@16
glRasterPos4sv=glRasterPos4sv@4
glReadBuffer=glReadBuffer@4
glReadPixels=glReadPixels@28
glRectd=glRectd@32
glRectdv=glRectdv@4
glRectf=glRectf@16
glRectfv=glRectfv@4
glRecti=glRecti@16
glRectiv=glRectiv@4
glRects=glRects@16
glRectsv=glRectsv@4
glRenderMode=glRenderMode@4
glRotated=glRotated@32
glRotatef=glRotatef@16
glScaled=glScaled@24
glScalef=glScalef@12
glScissor=glScissor@16
glSelectBuffer=glSelectBuffer@8
glShadeModel=glShadeModel@4
glStencilFunc=glStencilFunc@12
glStencilMask=glStencilMask@4
glStencilOp=glStencilOp@12
glOrtho
glPassThrough
glPixelMapfv
glPixelMapuiv
glPixelMapusv
glPixelStoref
glPixelStorei
glPixelTransferf
glPixelTransferi
glPixelZoom
glPointSize
glPolygonMode
glPolygonOffset
glPolygonStipple
glPopAttrib
glPopClientAttrib
glPopMatrix
glPopName
glPrioritizeTextures
glPushAttrib
glPushClientAttrib
glPushMatrix
glPushName
glRasterPos2d
glRasterPos2dv
glRasterPos2f
glRasterPos2fv
glRasterPos2i
glRasterPos2iv
glRasterPos2s
glRasterPos2sv
glRasterPos3d
glRasterPos3dv
glRasterPos3f
glRasterPos3fv
glRasterPos3i
glRasterPos3iv
glRasterPos3s
glRasterPos3sv
glRasterPos4d
glRasterPos4dv
glRasterPos4f
glRasterPos4fv
glRasterPos4i
glRasterPos4iv
glRasterPos4s
glRasterPos4sv
glReadBuffer
glReadPixels
glRectd
glRectdv
glRectf
glRectfv
glRecti
glRectiv
glRects
glRectsv
glRenderMode
glRotated
glRotatef
glScaled
glScalef
glScissor
glSelectBuffer
glShadeModel
glStencilFunc
glStencilMask
glStencilOp
glTexCoord1d=glTexCoord1d@8
glTexCoord1dv=glTexCoord1dv@4
glTexCoord1f=glTexCoord1f@4
glTexCoord1fv=glTexCoord1fv@4
glTexCoord1i=glTexCoord1i@4
glTexCoord1iv=glTexCoord1iv@4
glTexCoord1s=glTexCoord1s@2
glTexCoord1sv=glTexCoord1sv@4
glTexCoord1d
glTexCoord1dv
glTexCoord1f
glTexCoord1fv
glTexCoord1i
glTexCoord1iv
glTexCoord1s
glTexCoord1sv
glTexCoord2d=glTexCoord2d@16
glTexCoord2dv=glTexCoord2dv@4
glTexCoord2f=glTexCoord2f@8
glTexCoord2fv=glTexCoord2fv@4
glTexCoord2i=glTexCoord2i@8
glTexCoord2iv=glTexCoord2iv@4
glTexCoord2s=glTexCoord2s@4
glTexCoord2sv=glTexCoord2sv@4
glTexCoord2d
glTexCoord2dv
glTexCoord2f
glTexCoord2fv
glTexCoord2i
glTexCoord2iv
glTexCoord2s
glTexCoord2sv
glTexCoord3d=glTexCoord3d@24
glTexCoord3dv=glTexCoord3dv@4
glTexCoord3f=glTexCoord3f@12
glTexCoord3fv=glTexCoord3fv@4
glTexCoord3i=glTexCoord3i@12
glTexCoord3iv=glTexCoord3iv@4
glTexCoord3s=glTexCoord3s@6
glTexCoord3sv=glTexCoord3sv@4
glTexCoord3d
glTexCoord3dv
glTexCoord3f
glTexCoord3fv
glTexCoord3i
glTexCoord3iv
glTexCoord3s
glTexCoord3sv
glTexCoord4d=glTexCoord4d@32
glTexCoord4dv=glTexCoord4dv@4
glTexCoord4f=glTexCoord4f@16
glTexCoord4fv=glTexCoord4fv@4
glTexCoord4i=glTexCoord4i@16
glTexCoord4iv=glTexCoord4iv@4
glTexCoord4s=glTexCoord4s@8
glTexCoord4sv=glTexCoord4sv@4
glTexCoord4d
glTexCoord4dv
glTexCoord4f
glTexCoord4fv
glTexCoord4i
glTexCoord4iv
glTexCoord4s
glTexCoord4sv
glTexCoordPointer=glTexCoordPointer@16
glTexEnvf=glTexEnvf@12
glTexEnvfv=glTexEnvfv@12
glTexEnvi=glTexEnvi@12
glTexEnviv=glTexEnviv@12
glTexGend=glTexGend@16
glTexGendv=glTexGendv@12
glTexGenf=glTexGenf@12
glTexGenfv=glTexGenfv@12
glTexGeni=glTexGeni@12
glTexGeniv=glTexGeniv@12
glTexImage1D=glTexImage1D@32
glTexImage2D=glTexImage2d@36
glTexParameterf=glTexParameterf@12
glTexParameterfv=glTexParameterfv@12
glTexParameteri=glTexParameteri@12
glTexParameteriv=glTexParameteriv@12
glTexSubImage1D=glTexSubImage1D@28
glTexSubImage2D=glTexSubImage2D@36
glTexCoordPointer
glTexEnvf
glTexEnvfv
glTexEnvi
glTexEnviv
glTexGend
glTexGendv
glTexGenf
glTexGenfv
glTexGeni
glTexGeniv
glTexImage1D
glTexImage2D
glTexParameterf
glTexParameterfv
glTexParameteri
glTexParameteriv
glTexSubImage1D
glTexSubImage2D
glTranslated=glTranslated@32
glTranslatef=glTranslated@16
glTranslated
glTranslatef
glVertex2d=glVertex2d@16
glVertex2dv=glVertex2dv@4
glVertex2f=glVertex2f@8
glVertex2fv=glVertex2fv@4
glVertex2i=glVertex2i@8
glVertex2iv=glVertex2iv@4
glVertex2s=glVertex2s@4
glVertex2sv=glVertex2sv@4
glVertex2d
glVertex2dv
glVertex2f
glVertex2fv
glVertex2i
glVertex2iv
glVertex2s
glVertex2sv
glVertex3d=glVertex3d@24
glVertex3dv=glVertex3dv@4
glVertex3f=glVertex3f@12
glVertex3fv=glVertex3fv@4
glVertex3i=glVertex3i@12
glVertex3iv=glVertex3iv@4
glVertex3s=glVertex3s@6
glVertex3sv=glVertex3sv@4
glVertex3d
glVertex3dv
glVertex3f
glVertex3fv
glVertex3i
glVertex3iv
glVertex3s
glVertex3sv
glVertex4d=glVertex4d@32
glVertex4dv=glVertex4dv@4
glVertex4f=glVertex4f@16
glVertex4fv=glVertex4fv@4
glVertex4i=glVertex4i@16
glVertex4iv=glVertex4iv@4
glVertex4s=glVertex4s@8
glVertex4sv=glVertex4sv@4
glVertex4d
glVertex4dv
glVertex4f
glVertex4fv
glVertex4i
glVertex4iv
glVertex4s
glVertex4sv
glVertexPointer=glVertexPointer@16
glViewport=glViewport@16
glVertexPointer
glViewport
wglChoosePixelFormat=GDI32.ChoosePixelFormat
wglCopyContext=wglCopyContext@12
wglCreateContext=wglCreateContext@4
wglCreateLayerContext=wglCreateLayerContext@8
wglDeleteContext=wglDeleteContext@4
wglDescribeLayerPlane=wglDescribeLayerPlane@20
wglDescribePixelFormat=GDI32.DescribePixelFormat
wglGetCurrentContext=wglGetCurrentContext@0
wglGetCurrentDC=wglGetCurrentDC@0
;wglGetDefaultProcAddress=wglGetDefaultProcAddress@
wglGetLayerPaletteEntries=wglGetLayerPaletteEntries@20
wglGetPixelFormat=GDI32.GetPixelFormat
wglGetProcAddress=wglGetProcAddress@4
wglMakeCurrent=wglMakeCurrent@8
wglRealizeLayerPalette=wglRealizeLayerPalette@12
wglSetLayerPaletteEntries=wglSetLayerPaletteEntries@20
wglSetPixelFormat=GDI32.SetPixelFormat
wglShareLists=wglShareLists@8
wglSwapBuffers=GDI32.SwapBuffers
wglSwapLayerBuffers=wglSwapLayerBuffers@8
;wglSwapMultipleBuffers=wglSwapMultipleBuffers@
wglUseFontBitmapsA=wglUseFontBitmapsA@16
wglUseFontBitmapsW=wglUseFontBitmapsW@16
wglUseFontOutlinesA=wglUseFontOutlinesA@32
wglUseFontOutlinesW=wglUseFontOutlinesW@32
wglChoosePixelFormat
wglCopyContext
wglCreateContext
wglCreateLayerContext
wglDeleteContext
wglDescribeLayerPlane
wglDescribePixelFormat
wglGetCurrentContext
wglGetCurrentDC
;wglGetDefaultProcAddress
wglGetLayerPaletteEntries
wglGetPixelFormat
wglGetProcAddress
wglMakeCurrent
wglRealizeLayerPalette
wglSetLayerPaletteEntries
wglSetPixelFormat
wglShareLists
wglSwapBuffers
wglSwapLayerBuffers
;wglSwapMultipleBuffers
wglUseFontBitmapsA
wglUseFontBitmapsW
wglUseFontOutlinesA
wglUseFontOutlinesW

View file

@ -1,4 +1,4 @@
; $Id: opengl32.edf,v 1.2 2004/02/01 17:07:16 royce Exp $
; $Id: opengl32.edf,v 1.3 2004/02/05 04:28:11 royce Exp $
;
; opengl32.edf
;
@ -21,29 +21,29 @@ glCallLists=glCallLists@12
glClear=glClear@4
glClearAccum=glClearAccum@16
glClearColor=glClearColor@16
glClearDepth=glClearDepth@4
glClearDepth=glClearDepth@8
glClearIndex=glClearIndex@4
glClearStencil=glClearStencil@4
glClipPlane=glClipPlane@8
glColor3b=glColor3b@3
glColor3bv=glColor3b@4
glColor3b=glColor3b@12
glColor3bv=glColor3bv@4
glColor3d=glColor3d@24
glColor3dv=glColor3d@4
glColor3dv=glColor3dv@4
glColor3f=glColor3f@12
glColor3fv=glColor3fv@4
glColor3i=glColor3i@12
glColor3iv=glColor3iv@4
glColor3s=glColor3s@6
glColor3s=glColor3s@12
glColor3sv=glColor3sv@4
glColor3ub=glColor3ub@3
glColor3ub=glColor3ub@12
glColor3ubv=glColor3ubv@4
glColor3ui=glColor3ui@12
glColor3uiv=glColor3uiv@4
glColor3us=glColor3us@6
glColor3us=glColor3us@12
glColor3usv=glColor3usv@4
glColor4b=glColor4b@4
glColor4b=glColor4b@16
glColor4bv=glColor4bv@4
glColor4d=glColor4d@32
glColor4dv=glColor4dv@4
@ -51,16 +51,16 @@ glColor4f=glColor4f@16
glColor4fv=glColor4fv@4
glColor4i=glColor4i@16
glColor4iv=glColor4iv@4
glColor4s=glColor4s@8
glColor4s=glColor4s@16
glColor4sv=glColor4sv@4
glColor4ub=glColor4ub@4
glColor4ub=glColor4ub@16
glColor4ubv=glColor4ubv@4
glColor4ui=glColor4ui@16
glColor4uiv=glColor4uiv@4
glColor4us=glColor4us@8
glColor4us=glColor4us@16
glColor4usv=glColor4usv@4
glColorMask=glColorMask@4
glColorMask=glColorMask@16
glColorMaterial=glColorMaterial@8
glColorPointer=glColorPointer@16
glCopyPixels=glCopyPixels@20
@ -71,17 +71,17 @@ glCopyTexSubImage2D=glCopyTexSubImage2D@32
glCullFace=glCullFace@4
;glDebugEntry
glDeleteLists=glDeleteLists@8
glDeleteTextures=glDeleteTextues@8
glDeleteTextures=glDeleteTextures@8
glDepthFunc=glDepthFunc@4
glDepthMask=glDepthMask@4
glDepthRange=glDepthRange@8
glDepthRange=glDepthRange@16
glDisable=glDisable@4
glDisableClientState=glDisableClientState@4
glDrawArrays=glDrawArrays@12
glDrawBuffer=glDrawBuffer@4
glDrawElements=glDrawElements@16
glDrawPixels=glDrawPixels@20
glEdgeFlag=glEdgeFlag@1
glEdgeFlag=glEdgeFlag@4
glEdgeFlagPointer=glEdgeFlagPointer@8
glEdgeFlagv=glEdgeFlagv@4
glEnable=glEnable@4
@ -99,20 +99,20 @@ glEvalCoord2f=glEvalCoord2f@8
glEvalCoord2fv=glEvalCoord2fv@4
glEvalMesh1=glEvalMesh1@12
glEvalMesh2=glEvalMesh2@12
glEvalMesh2=glEvalMesh2@20
glEvalPoint1=glEvalPoint1@4
glEvalPoint2=glEvalPoint2@8
glFeedbackBuffer=glFeedbackBuffer@12
glFinish=glFinish@0
glFlush=glFlush@0
glFogf=glFogf@8
glFogfv=glFogv@8
glFogfv=glFogfv@8
glFogi=glFogi@8
glFogiv=glFogiv@8
glFrontFace=glFrontFace@4
glFrustum=glFrustum@48
glGenLists=glGenLists@4
glGenTextures=glGenTextires@8
glGenTextures=glGenTextures@8
glGetBooleanv=glGetBooleanv@8
glGetClipPlane=glGetClipPlane@8
glGetDoublev=glGetDoublev@8
@ -151,15 +151,15 @@ glIndexi=glIndexi@4
glIndexiv=glIndexiv@4
glIndexMask=glIndexMask@4
glIndexPointer=glIndexPointer@12
glIndexs=glIndexs@2
glIndexs=glIndexs@4
glIndexsv=glIndexsv@4
glIndexub=glIndexub@1
glIndexub=glIndexub@4
glIndexubv=glIndexubv@4
glInitNames=glInitNames@0
glInterleavedArrays=glInterleavedArrays@12
glIsEnabled=glIsEnabled@4
glIsList=glIsList@4
glIsTexture=glTexture@4
glIsTexture=glIsTexture@4
glLightf=glLightf@12
glLightfv=glLightfv@12
@ -170,7 +170,7 @@ glLightModelfv=glLightModelfv@8
glLightModeli=glLightModeli@8
glLightModeliv=glLightModeliv@8
glLineStipple=glLineStipple@6
glLineStipple=glLineStipple@8
glLineWidth=glLineWidth@4
glListBase=glListBase@4
glLoadIdentity=glLoadIdentity@0
@ -204,7 +204,7 @@ glMultMatrixd=glMultMatrixd@4
glMultMatrixf=glMultMatrixf@4
glNewList=glNewList@8
glNormal3b=glNormal3b@3
glNormal3b=glNormal3b@12
glNormal3bv=glNormal3bv@4
glNormal3d=glNormal3d@24
glNormal3dv=glNormal3dv@4
@ -212,11 +212,11 @@ glNormal3f=glNormal3f@12
glNormal3fv=glNormal3fv@4
glNormal3i=glNormal3i@12
glNormal3iv=glNormal3iv@4
glNormal3s=glNormal3s@6
glNormal3s=glNormal3s@12
glNormal3sv=glNormal3sv@4
glNormalPointer=glNormalPointer@12
glOrtho=glOrtho@24
glOrtho=glOrtho@48
glPassThrough=glPassThrough@4
glPixelMapfv=glPixelMapfv@12
glPixelMapuiv=glPixelMapuiv@12
@ -246,7 +246,7 @@ glRasterPos2fv=glRasterPos2fv@4
glRasterPos2i=glRasterPos2i@8
glRasterPos2iv=glRasterPos2iv@4
glRasterPos2s=glRasterPos2s@8
glRasterPos2sv=glRasterPos2sv@8
glRasterPos2sv=glRasterPos2sv@4
glRasterPos3d=glRasterPos3d@24
glRasterPos3dv=glRasterPos3dv@4
glRasterPos3f=glRasterPos3f@12
@ -266,13 +266,13 @@ glRasterPos4sv=glRasterPos4sv@4
glReadBuffer=glReadBuffer@4
glReadPixels=glReadPixels@28
glRectd=glRectd@32
glRectdv=glRectdv@4
glRectdv=glRectdv@8
glRectf=glRectf@16
glRectfv=glRectfv@4
glRectfv=glRectfv@8
glRecti=glRecti@16
glRectiv=glRectiv@4
glRectiv=glRectiv@8
glRects=glRects@16
glRectsv=glRectsv@4
glRectsv=glRectsv@8
glRenderMode=glRenderMode@4
glRotated=glRotated@32
glRotatef=glRotatef@16
@ -291,7 +291,7 @@ glTexCoord1f=glTexCoord1f@4
glTexCoord1fv=glTexCoord1fv@4
glTexCoord1i=glTexCoord1i@4
glTexCoord1iv=glTexCoord1iv@4
glTexCoord1s=glTexCoord1s@2
glTexCoord1s=glTexCoord1s@4
glTexCoord1sv=glTexCoord1sv@4
glTexCoord2d=glTexCoord2d@16
@ -300,7 +300,7 @@ glTexCoord2f=glTexCoord2f@8
glTexCoord2fv=glTexCoord2fv@4
glTexCoord2i=glTexCoord2i@8
glTexCoord2iv=glTexCoord2iv@4
glTexCoord2s=glTexCoord2s@4
glTexCoord2s=glTexCoord2s@8
glTexCoord2sv=glTexCoord2sv@4
glTexCoord3d=glTexCoord3d@24
@ -309,7 +309,7 @@ glTexCoord3f=glTexCoord3f@12
glTexCoord3fv=glTexCoord3fv@4
glTexCoord3i=glTexCoord3i@12
glTexCoord3iv=glTexCoord3iv@4
glTexCoord3s=glTexCoord3s@6
glTexCoord3s=glTexCoord3s@12
glTexCoord3sv=glTexCoord3sv@4
glTexCoord4d=glTexCoord4d@32
@ -318,7 +318,7 @@ glTexCoord4f=glTexCoord4f@16
glTexCoord4fv=glTexCoord4fv@4
glTexCoord4i=glTexCoord4i@16
glTexCoord4iv=glTexCoord4iv@4
glTexCoord4s=glTexCoord4s@8
glTexCoord4s=glTexCoord4s@16
glTexCoord4sv=glTexCoord4sv@4
glTexCoordPointer=glTexCoordPointer@16
@ -333,7 +333,7 @@ glTexGenfv=glTexGenfv@12
glTexGeni=glTexGeni@12
glTexGeniv=glTexGeniv@12
glTexImage1D=glTexImage1D@32
glTexImage2D=glTexImage2d@36
glTexImage2D=glTexImage2D@36
glTexParameterf=glTexParameterf@12
glTexParameterfv=glTexParameterfv@12
glTexParameteri=glTexParameteri@12
@ -341,8 +341,8 @@ glTexParameteriv=glTexParameteriv@12
glTexSubImage1D=glTexSubImage1D@28
glTexSubImage2D=glTexSubImage2D@36
glTranslated=glTranslated@32
glTranslatef=glTranslated@16
glTranslated=glTranslated@24
glTranslatef=glTranslatef@12
glVertex2d=glVertex2d@16
glVertex2dv=glVertex2dv@4
@ -350,7 +350,7 @@ glVertex2f=glVertex2f@8
glVertex2fv=glVertex2fv@4
glVertex2i=glVertex2i@8
glVertex2iv=glVertex2iv@4
glVertex2s=glVertex2s@4
glVertex2s=glVertex2s@8
glVertex2sv=glVertex2sv@4
glVertex3d=glVertex3d@24
@ -359,7 +359,7 @@ glVertex3f=glVertex3f@12
glVertex3fv=glVertex3fv@4
glVertex3i=glVertex3i@12
glVertex3iv=glVertex3iv@4
glVertex3s=glVertex3s@6
glVertex3s=glVertex3s@12
glVertex3sv=glVertex3sv@4
glVertex4d=glVertex4d@32
@ -368,7 +368,7 @@ glVertex4f=glVertex4f@16
glVertex4fv=glVertex4fv@4
glVertex4i=glVertex4i@16
glVertex4iv=glVertex4iv@4
glVertex4s=glVertex4s@8
glVertex4s=glVertex4s@16
glVertex4sv=glVertex4sv@4
glVertexPointer=glVertexPointer@16

View file

@ -1,4 +1,4 @@
/* $Id: opengl32.h,v 1.7 2004/02/03 14:23:42 royce Exp $
/* $Id: opengl32.h,v 1.8 2004/02/05 04:28:11 royce Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -13,374 +13,45 @@
#define OPENGL32_PRIVATE_H
/* debug flags */
#define DEBUG_OPENGL32
#define DEBUG_OPENGL32_ICD_EXPORTS /* dumps the list of (un)supported glXXX
#if !defined(NDEBUG)
# define DEBUG_OPENGL32
# define DEBUG_OPENGL32_BRKPTS /* enable breakpoints */
# define DEBUG_OPENGL32_ICD_EXPORTS /* dumps the list of (un)supported glXXX
functions when an ICD is loaded. */
#endif /* !NDEBUG */
/* debug macros */
#if 0//def DEBUG_OPENGL32
#if 0//def DEBUG_OPENGL32 /* FIXME: DPRINT wants DbgPrint - where is it? */
# include <debug.h>
# define DBGPRINT( fmt, args... ) \
DPRINT( "OpenGL32.DLL: %s: "fmt, __FUNCTION__, ##args )
DPRINT( "OpenGL32.DLL: %s: "fmt"\n", __FUNCTION__, ##args )
#else
# define DBGPRINT( ... ) do {} while (0)
#endif
#ifdef DEBUG_OPENGL32_BRKPTS
# if defined(__GNUC__)
# define DBGBREAK() __asm__( "int $3" );
# elif defined(_MSC_VER)
# define DBGBREAK() __asm { int 3 }
# else
# error Unsupported compiler!
# endif
#endif
/* function/data attributes */
#define EXPORT __declspec(dllexport)
#define NAKED __attribute__((naked))
#define SHARED __attribute__((section("shared"), shared))
/* gl function list */
#include "glfuncs.h"
#if 0
#define GLFUNCS_MACRO \
X(glAccum) \
X(glAddSwapHintRectWIN) \
X(glAlphaFunc) \
X(glAreTexturesResident) \
X(glArrayElement) \
X(glBegin) \
X(glBindTexture) \
X(glBitmap) \
X(glBlendFunc) \
X(glCallList) \
X(glCallLists) \
X(glClear) \
X(glClearAccum) \
X(glClearColor) \
X(glClearDepth) \
X(glClearIndex) \
X(glClearStencil) \
X(glClipPlane) \
X(glColor3b) \
X(glColor3bv) \
X(glColor3d) \
X(glColor3dv) \
X(glColor3f) \
X(glColor3fv) \
X(glColor3i) \
X(glColor3iv) \
X(glColor3s) \
X(glColor3sv) \
X(glColor3ub) \
X(glColor3ubv) \
X(glColor3ui) \
X(glColor3uiv) \
X(glColor3us) \
X(glColor3usv) \
X(glColor4b) \
X(glColor4bv) \
X(glColor4d) \
X(glColor4dv) \
X(glColor4f) \
X(glColor4fv) \
X(glColor4i) \
X(glColor4iv) \
X(glColor4s) \
X(glColor4sv) \
X(glColor4ub) \
X(glColor4ubv) \
X(glColor4ui) \
X(glColor4uiv) \
X(glColor4us) \
X(glColor4usv) \
X(glColorMask) \
X(glColorMaterial) \
X(glColorPointer) \
X(glCopyPixels) \
X(glCopyTexImage1D) \
X(glCopyTexImage2D) \
X(glCopyTexSubImage1D) \
X(glCopyTexSubImage2D) \
X(glCullFace) \
X(glDebugEntry) \
X(glDeleteLists) \
X(glDeleteTextures) \
X(glDepthFunc) \
X(glDepthMask) \
X(glDepthRange) \
X(glDisable) \
X(glDisableClientState) \
X(glDrawArrays) \
X(glDrawBuffer) \
X(glDrawElements) \
X(glDrawPixels) \
X(glEdgeFlag) \
X(glEdgeFlagPointer) \
X(glEdgeFlagv) \
X(glEnable) \
X(glEnableClientState) \
X(glEnd) \
X(glEndList) \
X(glEvalCoord1d) \
X(glEvalCoord1dv) \
X(glEvalCoord1f) \
X(glEvalCoord1fv) \
X(glEvalCoord2d) \
X(glEvalCoord2dv) \
X(glEvalCoord2f) \
X(glEvalCoord2fv) \
X(glEvalMesh1) \
X(glEvalMesh2) \
X(glEvalPoint1) \
X(glEvalPoint2) \
X(glFeedbackBuffer) \
X(glFinish) \
X(glFlush) \
X(glFogf) \
X(glFogfv) \
X(glFogi) \
X(glFogiv) \
X(glFrontFace) \
X(glFrustum) \
X(glGenLists) \
X(glGenTextures) \
X(glGetBooleanv) \
X(glGetClipPlane) \
X(glGetDoublev) \
X(glGetError) \
X(glGetFloatv) \
X(glGetIntegerv) \
X(glGetLightfv) \
X(glGetLightiv) \
X(glGetMapdv) \
X(glGetMapfv) \
X(glGetMapiv) \
X(glGetMaterialfv) \
X(glGetMaterialiv) \
X(glGetPixelMapfv) \
X(glGetPixelMapuiv) \
X(glGetPixelMapusv) \
X(glGetPointerv) \
X(glGetPolygonStipple) \
X(glGetString) \
X(glGetTexEnvfv) \
X(glGetTexEnviv) \
X(glGetTexGendv) \
X(glGetTexGenfv) \
X(glGetTexGeniv) \
X(glGetTexImage) \
X(glGetTexLevelParameterfv) \
X(glGetTexLevelParameteriv) \
X(glGetTexParameterfv) \
X(glGetTexParameteriv) \
X(glHint) \
X(glIndexd) \
X(glIndexdv) \
X(glIndexf) \
X(glIndexfv) \
X(glIndexi) \
X(glIndexiv) \
X(glIndexMask) \
X(glIndexPointer) \
X(glIndexs) \
X(glIndexsv) \
X(glIndexub) \
X(glIndexubv) \
X(glInitNames) \
X(glInterleavedArrays) \
X(glIsEnabled) \
X(glIsList) \
X(glIsTexture) \
X(glLightf) \
X(glLightfv) \
X(glLighti) \
X(glLightiv) \
X(glLightModelf) \
X(glLightModelfv) \
X(glLightModeli) \
X(glLightModeliv) \
X(glLineStipple) \
X(glLineWidth) \
X(glListBase) \
X(glLoadIdentity) \
X(glLoadMatrixd) \
X(glLoadMatrixf) \
X(glLoadName) \
X(glLogicOp) \
X(glMap1d) \
X(glMap1f) \
X(glMap2d) \
X(glMap2f) \
X(glMapGrid1d) \
X(glMapGrid1f) \
X(glMapGrid2d) \
X(glMapGrid2f) \
X(glMaterialf) \
X(glMaterialfv) \
X(glMateriali) \
X(glMaterialiv) \
X(glMatrixMode) \
X(glMultMatrixd) \
X(glMultMatrixf) \
X(glNewList) \
X(glNormal3b) \
X(glNormal3bv) \
X(glNormal3d) \
X(glNormal3dv) \
X(glNormal3f) \
X(glNormal3fv) \
X(glNormal3i) \
X(glNormal3iv) \
X(glNormal3s) \
X(glNormal3sv) \
X(glNormalPointer) \
X(glOrtho) \
X(glPassThrough) \
X(glPixelMapfv) \
X(glPixelMapuiv) \
X(glPixelMapusv) \
X(glPixelStoref) \
X(glPixelStorei) \
X(glPixelTransferf) \
X(glPixelTransferi) \
X(glPixelZoom) \
X(glPointSize) \
X(glPolygonMode) \
X(glPolygonOffset) \
X(glPolygonStipple) \
X(glPopAttrib) \
X(glPopClientAttrib) \
X(glPopMatrix) \
X(glPopName) \
X(glPrioritizeTextures) \
X(glPushAttrib) \
X(glPushClientAttrib) \
X(glPushMatrix) \
X(glPushName) \
X(glRasterPos2d) \
X(glRasterPos2dv) \
X(glRasterPos2f) \
X(glRasterPos2fv) \
X(glRasterPos2i) \
X(glRasterPos2iv) \
X(glRasterPos2s) \
X(glRasterPos2sv) \
X(glRasterPos3d) \
X(glRasterPos3dv) \
X(glRasterPos3f) \
X(glRasterPos3fv) \
X(glRasterPos3i) \
X(glRasterPos3iv) \
X(glRasterPos3s) \
X(glRasterPos3sv) \
X(glRasterPos4d) \
X(glRasterPos4dv) \
X(glRasterPos4f) \
X(glRasterPos4fv) \
X(glRasterPos4i) \
X(glRasterPos4iv) \
X(glRasterPos4s) \
X(glRasterPos4sv) \
X(glReadBuffer) \
X(glReadPixels) \
X(glRectd) \
X(glRectdv) \
X(glRectf) \
X(glRectfv) \
X(glRecti) \
X(glRectiv) \
X(glRects) \
X(glRectsv) \
X(glRenderMode) \
X(glRotated) \
X(glRotatef) \
X(glScaled) \
X(glScalef) \
X(glScissor) \
X(glSelectBuffer) \
X(glShadeModel) \
X(glStencilFunc) \
X(glStencilMask) \
X(glStencilOp) \
X(glTexCoord1d) \
X(glTexCoord1dv) \
X(glTexCoord1f) \
X(glTexCoord1fv) \
X(glTexCoord1i) \
X(glTexCoord1iv) \
X(glTexCoord1s) \
X(glTexCoord1sv) \
X(glTexCoord2d) \
X(glTexCoord2dv) \
X(glTexCoord2f) \
X(glTexCoord2fv) \
X(glTexCoord2i) \
X(glTexCoord2iv) \
X(glTexCoord2s) \
X(glTexCoord2sv) \
X(glTexCoord3d) \
X(glTexCoord3dv) \
X(glTexCoord3f) \
X(glTexCoord3fv) \
X(glTexCoord3i) \
X(glTexCoord3iv) \
X(glTexCoord3s) \
X(glTexCoord3sv) \
X(glTexCoord4d) \
X(glTexCoord4dv) \
X(glTexCoord4f) \
X(glTexCoord4fv) \
X(glTexCoord4i) \
X(glTexCoord4iv) \
X(glTexCoord4s) \
X(glTexCoord4sv) \
X(glTexCoordPointer) \
X(glTexEnvf) \
X(glTexEnvfv) \
X(glTexEnvi) \
X(glTexEnviv) \
X(glTexGend) \
X(glTexGendv) \
X(glTexGenf) \
X(glTexGenfv) \
X(glTexGeni) \
X(glTexGeniv) \
X(glTexImage1D) \
X(glTexImage2D) \
X(glTexParameterf) \
X(glTexParameterfv) \
X(glTexParameteri) \
X(glTexParameteriv) \
X(glTexSubImage1D) \
X(glTexSubImage2D) \
X(glTranslated) \
X(glTranslatef) \
X(glVertex2d) \
X(glVertex2dv) \
X(glVertex2f) \
X(glVertex2fv) \
X(glVertex2i) \
X(glVertex2iv) \
X(glVertex2s) \
X(glVertex2sv) \
X(glVertex3d) \
X(glVertex3dv) \
X(glVertex3f) \
X(glVertex3fv) \
X(glVertex3i) \
X(glVertex3iv) \
X(glVertex3s) \
X(glVertex3sv) \
X(glVertex4d) \
X(glVertex4dv) \
X(glVertex4f) \
X(glVertex4fv) \
X(glVertex4i) \
X(glVertex4iv) \
X(glVertex4s) \
X(glVertex4sv) \
X(glVertexPointer) \
X(glViewport)
#endif /* 0 */
/* table indices for funcnames and function pointers */
enum glfunc_indices
{
GLIDX_INVALID = -1,
#define X(func, ret, args) GLIDX_##func,
#define X(func, ret, typeargs, args) GLIDX_##func,
GLFUNCS_MACRO
#undef X
GLIDX_COUNT
@ -420,7 +91,7 @@ typedef struct tagGLDRIVERDATA
BOOL (*DrvShareLists)( HGLRC, HGLRC );
BOOL (*DrvSwapBuffers)( HDC );
BOOL (*DrvSwapLayerBuffers)( HDC, UINT );
void (*DrvValidateVersion)();
BOOL (*DrvValidateVersion)( DWORD );
PVOID func_list[GLIDX_COUNT]; /* glXXX functions supported by ICD */
@ -446,7 +117,9 @@ typedef struct tagGLRC
typedef struct tagGLPROCESSDATA
{
GLDRIVERDATA *driver_list; /* list of loaded drivers */
GLRC *glrc_list; /* list of GL rendering contexts */
HANDLE driver_mutex; /* mutex to protect driver list */
GLRC *glrc_list; /* list of GL rendering contexts */
HANDLE glrc_mutex; /* mutex to protect glrc list */
} GLPROCESSDATA;
/* TLS data */
@ -462,6 +135,8 @@ extern GLPROCESSDATA OPENGL32_processdata;
/* function prototypes */
GLDRIVERDATA *OPENGL32_LoadICD( LPCWSTR driver );
BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd );
DWORD OPENGL32_RegEnumDrivers( DWORD idx, LPWSTR name, LPDWORD cName );
DWORD OPENGL32_RegGetDriverInfo( LPCWSTR driver, GLDRIVERDATA *icd );
#endif//OPENGL32_PRIVATE_H

View file

@ -10,17 +10,23 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winreg.h>
#include "opengl32.h"
/* FUNCTION: Append OpenGL Rendering Context (GLRC) to list
* ARGUMENTS: [IN] glrc: GLRC to append to list
* TODO: protect from race conditions
*/
static void WGL_AppendContext( GLRC *glrc )
{
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.glrc_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return; /* FIXME: do we have to expect such an error and handle it? */
}
if (OPENGL32_processdata.glrc_list == NULL)
OPENGL32_processdata.glrc_list = glrc;
else
@ -30,15 +36,26 @@ static void WGL_AppendContext( GLRC *glrc )
p = p->next;
p->next = glrc;
}
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.glrc_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
}
/* FUNCTION: Remove OpenGL Rendering Context (GLRC) from list
* ARGUMENTS: [IN] glrc: GLRC to remove from list
* TODO: protect from race conditions
*/
static void WGL_RemoveContext( GLRC *glrc )
{
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.glrc_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return; /* FIXME: do we have to expect such an error and handle it? */
}
if (glrc == OPENGL32_processdata.glrc_list)
OPENGL32_processdata.glrc_list = glrc->next;
else
@ -55,6 +72,10 @@ static void WGL_RemoveContext( GLRC *glrc )
}
DBGPRINT( "Error: GLRC 0x%08x not found in list!", glrc );
}
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.glrc_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
}
/* FUNCTION: Check wether a GLRC is in the list
@ -75,6 +96,19 @@ static BOOL WGL_ContainsContext( GLRC *glrc )
}
/* FUNCTION: SetContextCallBack passed to DrvSetContext. Gets called whenever
* the current GL context (dispatch table) is to be changed - can
* be multiple times for one DrvSetContext call.
* ARGUMENTS: [IN] table Function pointer table (first DWORD is number of
* functions)
* RETURNS: unkown
*/
DWORD CALLBACK WGL_SetContextCallBack( void *table )
{
DBGPRINT( "Function count: %d\n", *(DWORD *)table );
DBGBREAK();
return ERROR_SUCCESS;
}
/* FUNCTION: Copy data specified by mask from one GLRC to another.
@ -118,88 +152,7 @@ BOOL WINAPI wglCopyContext( HGLRC hsrc, HGLRC hdst, UINT mask )
*/
HGLRC WINAPI wglCreateContext( HDC hdc )
{
HKEY hKey;
WCHAR subKey[1024] = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers";
LONG ret;
WCHAR driver[256];
DWORD size;
DWORD dw;
FILETIME time;
GLDRIVERDATA *icd;
GLRC *glrc;
HGLRC drvHglrc = NULL;
if (GetObjectType( hdc ) != OBJ_DC)
{
DBGPRINT( "Error: hdc is not a DC handle!" );
return NULL;
}
/* open "OpenGLDrivers" key */
ret = RegOpenKeyExW( HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't open registry key '%ws'", subKey );
return NULL;
}
/* allocate our GLRC */
glrc = (GLRC*)HeapAlloc( GetProcessHeap(),
HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, sizeof (GLRC) );
if (!glrc)
return NULL;
/* try to find an ICD */
for (dw = 0; ; dw++)
{
size = 256;
ret = RegEnumKeyExW( hKey, dw, driver, &size, NULL, NULL, NULL, &time );
if (ret != ERROR_SUCCESS )
break;
icd = OPENGL32_LoadICD( driver );
if (icd == NULL) /* try next ICD */
continue;
drvHglrc = icd->DrvCreateContext( hdc );
if (drvHglrc == NULL) /* try next ICD */
{
DBGPRINT( "Info: DrvCreateContext (driver = %ws) failed: %d",
icd->driver_name, GetLastError() );
OPENGL32_UnloadICD( icd );
continue;
}
/* the ICD was loaded successfully and we got a HGLRC in drvHglrc */
break;
}
RegCloseKey( hKey );
if (drvHglrc == NULL) /* no ICD was found */
{
/* FIXME: fallback to mesa */
DBGPRINT( "Error: No ICD found!" );
HeapFree( GetProcessHeap(), 0, glrc );
return NULL;
}
/* we have our GLRC in glrc and the ICD's GLRC in drvHglrc */
glrc->hglrc = drvHglrc;
glrc->iFormat = -1; /* what is this used for? */
glrc->icd = icd;
memcpy( glrc->func_list, icd->func_list, sizeof (PVOID) * GLIDX_COUNT );
/* FIXME: fill NULL-pointers in glrc->func_list with mesa functions */
/* append glrc to context list */
WGL_AppendContext( glrc );
return (HGLRC)glrc;
/* FIXME: dunno if this is right, would be nice :) */
/*return wglCreateLayerContext( hdc, 0 );*/
return wglCreateLayerContext( hdc, 0 );
}
@ -211,14 +164,9 @@ HGLRC WINAPI wglCreateContext( HDC hdc )
*/
HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
{
HKEY hKey;
WCHAR subKey[1024] = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers";
LONG ret;
WCHAR driver[256];
DWORD size;
DWORD dw;
FILETIME time;
DWORD dw, size;
GLDRIVERDATA *icd;
GLRC *glrc;
@ -230,36 +178,36 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
return NULL;
}
/* open "OpenGLDrivers" key */
ret = RegOpenKeyExW( HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey );
if (ret != ERROR_SUCCESS)
{
DBGPRINT( "Error: Couldn't open registry key '%ws'", subKey );
return NULL;
}
/* allocate our GLRC */
glrc = (GLRC*)HeapAlloc( GetProcessHeap(),
HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, sizeof (GLRC) );
if (!glrc)
if (glrc == NULL)
return NULL;
/* try to find an ICD */
for (dw = 0; ; dw++)
for (dw = 0; drvHglrc == NULL; dw++) /* enumerate values */
{
size = 256;
ret = RegEnumKeyExW( hKey, dw, driver, &size, NULL, NULL, NULL, &time );
if (ret != ERROR_SUCCESS )
size = sizeof (driver) / sizeof (driver[0]);
ret = OPENGL32_RegEnumDrivers( dw, driver, &size );
if (ret != ERROR_SUCCESS)
break;
icd = OPENGL32_LoadICD( driver );
if (icd == NULL) /* try next ICD */
continue;
drvHglrc = icd->DrvCreateLayerContext( hdc, layer );
if (icd->DrvCreateLayerContext)
drvHglrc = icd->DrvCreateLayerContext( hdc, layer );
else
{
if (layer == 0)
drvHglrc = icd->DrvCreateContext( hdc );
else
DBGPRINT( "Warning: CreateLayerContext not supported by ICD!" );
}
if (drvHglrc == NULL) /* try next ICD */
{
DBGPRINT( "Info: DrvCreateLayerContext (driver = %ws) failed: %d",
DBGPRINT( "Info: DrvCreateContext (driver = %ws) failed: %d",
icd->driver_name, GetLastError() );
OPENGL32_UnloadICD( icd );
continue;
@ -268,12 +216,11 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
/* the ICD was loaded successfully and we got a HGLRC in drvHglrc */
break;
}
RegCloseKey( hKey );
if (drvHglrc == NULL) /* no ICD was found */
{
/* FIXME: fallback to mesa */
DBGPRINT( "Error: No ICD found!" );
DBGPRINT( "Error: No working ICD found!" );
HeapFree( GetProcessHeap(), 0, glrc );
return NULL;
}
@ -395,13 +342,14 @@ PROC WINAPI wglGetProcAddress( LPCSTR proc )
/* FIXME: go through own functions? */
DBGPRINT( "Unsupported GL extension: %s", proc );
}
else if (proc[0] == 'w' && proc[1] == 'g' && proc[2] == 'l') /* wglXXX */
if (proc[0] == 'w' && proc[1] == 'g' && proc[2] == 'l') /* wglXXX */
{
/* FIXME: support wgl extensions? (there are such IIRC) */
DBGPRINT( "Unsupported WGL extension: %s", proc );
}
else if (proc[0] == 'g' && proc[1] == 'l' && proc[2] == 'u') /* gluXXX */
if (proc[0] == 'g' && proc[1] == 'l' && proc[2] == 'u') /* gluXXX */
{
/* FIXME: do we support these as well? */
DBGPRINT( "GLU extension %s requested, returning NULL", proc );
}
@ -418,6 +366,8 @@ BOOL WINAPI wglMakeCurrent( HDC hdc, HGLRC hglrc )
{
GLRC *glrc = (GLRC *)hglrc;
/* FIXME: glFlush() current context */
/* check hdc */
if (GetObjectType( hdc ) != OBJ_DC)
{