From 49f02ee44485af2b66eabd863dc2dc0dc941fd0e Mon Sep 17 00:00:00 2001 From: Royce Mitchell III Date: Thu, 5 Feb 2004 04:28:11 +0000 Subject: [PATCH] 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 --- reactos/lib/opengl32/gl.c | 75 ++- reactos/lib/opengl32/glfuncs.h | 950 +++++++++++++++--------------- reactos/lib/opengl32/opengl32.c | 350 +++++++---- reactos/lib/opengl32/opengl32.def | 724 +++++++++++------------ reactos/lib/opengl32/opengl32.edf | 82 +-- reactos/lib/opengl32/opengl32.h | 375 +----------- reactos/lib/opengl32/wgl.c | 170 ++---- 7 files changed, 1244 insertions(+), 1482 deletions(-) diff --git a/reactos/lib/opengl32/gl.c b/reactos/lib/opengl32/gl.c index 39a8210a9bc..60e3fccaa19 100644 --- a/reactos/lib/opengl32/gl.c +++ b/reactos/lib/opengl32/gl.c @@ -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 diff --git a/reactos/lib/opengl32/glfuncs.h b/reactos/lib/opengl32/glfuncs.h index 5bc7682e388..9214d6b0d31 100644 --- a/reactos/lib/opengl32/glfuncs.h +++ b/reactos/lib/opengl32/glfuncs.h @@ -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)) diff --git a/reactos/lib/opengl32/opengl32.c b/reactos/lib/opengl32/opengl32.c index 78c5eb262d4..12cc101d7f0 100644 --- a/reactos/lib/opengl32/opengl32.c +++ b/reactos/lib/opengl32/opengl32.c @@ -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 */ + diff --git a/reactos/lib/opengl32/opengl32.def b/reactos/lib/opengl32/opengl32.def index 89a8e2a6817..7d9e66ca828 100644 --- a/reactos/lib/opengl32/opengl32.def +++ b/reactos/lib/opengl32/opengl32.def @@ -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 diff --git a/reactos/lib/opengl32/opengl32.edf b/reactos/lib/opengl32/opengl32.edf index 8f08b9626d3..4211c74aed6 100644 --- a/reactos/lib/opengl32/opengl32.edf +++ b/reactos/lib/opengl32/opengl32.edf @@ -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 diff --git a/reactos/lib/opengl32/opengl32.h b/reactos/lib/opengl32/opengl32.h index eed4ad1da48..2c9ad32014c 100644 --- a/reactos/lib/opengl32/opengl32.h +++ b/reactos/lib/opengl32/opengl32.h @@ -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 # 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 diff --git a/reactos/lib/opengl32/wgl.c b/reactos/lib/opengl32/wgl.c index b2362ed73db..94556e07ab7 100644 --- a/reactos/lib/opengl32/wgl.c +++ b/reactos/lib/opengl32/wgl.c @@ -10,17 +10,23 @@ #define WIN32_LEAN_AND_MEAN #include -#include #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) {