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

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

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

View file

@ -28,33 +28,58 @@
#include "opengl32.h" #include "opengl32.h"
/*#if defined(_M_IX86)*/ /* GL data types - x86 typedefs */
#if 1 typedef unsigned int GLenum;
#define X(func, ret, args) \ typedef unsigned char GLboolean;
void WINAPI func () \ 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__( \ __asm__( \
"movl %%fs:0x18, %%eax" "\n\t" \ "movl %%fs:0x18, %%eax" "\n\t" \
"addl %0, %%eax" "\n\t" \ "addl %0, %%eax" "\n\t" \
"jmpl *(%%eax)" "\n\t" \ "jmpl *(%%eax)" "\n\t" \
: \ : \
: "n"(0x714+(GLIDX_##func*sizeof(PVOID))) ); \ : "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) */ #endif
/* 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) */
GLFUNCS_MACRO GLFUNCS_MACRO
#undef X #undef X

View file

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

View file

@ -1,4 +1,4 @@
/* $Id: opengl32.c,v 1.8 2004/02/03 14:23:42 royce Exp $ /* $Id: opengl32.c,v 1.9 2004/02/05 04:28:11 royce Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -21,14 +21,14 @@
/*static BOOL OPENGL32_LoadDrivers();*/ /*static BOOL OPENGL32_LoadDrivers();*/
static void OPENGL32_AppendICD( GLDRIVERDATA *icd ); static void OPENGL32_AppendICD( GLDRIVERDATA *icd );
static void OPENGL32_RemoveICD( 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 DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd );
static BOOL OPENGL32_UnloadDriver( GLDRIVERDATA *icd ); static BOOL OPENGL32_UnloadDriver( GLDRIVERDATA *icd );
/* global vars */ /* global vars */
const char* OPENGL32_funcnames[GLIDX_COUNT] SHARED = const char* OPENGL32_funcnames[GLIDX_COUNT] SHARED =
{ {
#define X(func, ret, args) #func, #define X(func, ret, typeargs, args) #func,
GLFUNCS_MACRO GLFUNCS_MACRO
#undef X #undef X
}; };
@ -54,8 +54,11 @@ static void OPENGL32_ThreadDetach()
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved) BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
{ {
GLTHREADDATA* lpData = NULL; GLTHREADDATA* lpData = NULL;
DBGPRINT( "Info: Called!" ); SECURITY_ATTRIBUTES attrib = { .nLength = sizeof (SECURITY_ATTRIBUTES),
.lpSecurityDescriptor = NULL,
.bInheritHandle = TRUE };
DBGPRINT( "Info: Called!" );
switch ( Reason ) switch ( Reason )
{ {
/* The DLL is loading due to process /* 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) ); memset( &OPENGL32_processdata, 0, sizeof (OPENGL32_processdata) );
/* get list of ICDs from registry: -- not needed (blight)*/ /* create driver & glrc list mutex */
/*OPENGL32_LoadDrivers();*/ 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. */ /* No break: Initialize the index for first thread. */
/* The attached process creates a new 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. */ /* DLL unload due to process termination or FreeLibrary. */
case DLL_PROCESS_DETACH: case DLL_PROCESS_DETACH:
OPENGL32_ThreadDetach(); 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); TlsFree(OPENGL32_tls);
break; break;
} }
@ -105,10 +126,17 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
/* FUNCTION: Append ICD to linked list. /* FUNCTION: Append ICD to linked list.
* ARGUMENTS: [IN] icd: GLDRIVERDATA to append to list * ARGUMENTS: [IN] icd: GLDRIVERDATA to append to list
* TODO: protect from race conditions
*/ */
static void OPENGL32_AppendICD( GLDRIVERDATA *icd ) 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) if (OPENGL32_processdata.driver_list == NULL)
OPENGL32_processdata.driver_list = icd; OPENGL32_processdata.driver_list = icd;
else else
@ -118,15 +146,26 @@ static void OPENGL32_AppendICD( GLDRIVERDATA *icd )
p = p->next; p = p->next;
p->next = icd; p->next = icd;
} }
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
} }
/* FUNCTION: Remove ICD from linked list. /* FUNCTION: Remove ICD from linked list.
* ARGUMENTS: [IN] icd: GLDRIVERDATA to remove from list * ARGUMENTS: [IN] icd: GLDRIVERDATA to remove from list
* TODO: protect from race conditions
*/ */
static void OPENGL32_RemoveICD( GLDRIVERDATA *icd ) 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) if (icd == OPENGL32_processdata.driver_list)
OPENGL32_processdata.driver_list = icd->next; OPENGL32_processdata.driver_list = icd->next;
else else
@ -143,35 +182,12 @@ static void OPENGL32_RemoveICD( GLDRIVERDATA *icd )
} }
DBGPRINT( "Error: ICD 0x%08x not found in list!", 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. /* FUNCTION: Load an ICD.
* ARGUMENTS: [IN] driver: Name of display driver. * ARGUMENTS: [IN] driver: Name of display driver.
@ -179,95 +195,46 @@ static BOOL OPENGL32_LoadDrivers()
* *
* TODO: call SetLastError() where appropriate * 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; LONG ret;
DWORD type, size;
DWORD version, driverVersion, flags; /* registry values */
WCHAR dll[256];
GLDRIVERDATA *icd; GLDRIVERDATA *icd;
DBGPRINT( "Info: Loading driver %ws...", driver ); 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 */ /* allocate driver data */
icd = (GLDRIVERDATA*)HeapAlloc( GetProcessHeap(), icd = (GLDRIVERDATA*)HeapAlloc( GetProcessHeap(),
HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,
sizeof (GLDRIVERDATA) ); sizeof (GLDRIVERDATA) );
if (icd == NULL) if (icd == NULL)
{ {
DBGPRINT( "Error: Couldnt allocate GLDRIVERDATA!" ); DBGPRINT( "Error: Couldn't allocate GLDRIVERDATA! (%d)", GetLastError() );
return NULL; 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_RegGetDriverInfo( driver, icd );
ret = OPENGL32_InitializeDriver( icd );
if (ret != ERROR_SUCCESS) if (ret != ERROR_SUCCESS)
{ {
DBGPRINT( "Error: Couldn't query driver information (%d)", ret );
if (!HeapFree( GetProcessHeap(), 0, icd )) if (!HeapFree( GetProcessHeap(), 0, icd ))
DBGPRINT( "Error: HeapFree() returned false, error code = %d", DBGPRINT( "Error: HeapFree() returned false, error code = %d",
GetLastError() ); 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!" ); DBGPRINT( "Error: Couldnt initialize ICD!" );
if (!HeapFree( GetProcessHeap(), 0, icd ))
DBGPRINT( "Error: HeapFree() returned false, error code = %d",
GetLastError() );
return NULL; return NULL;
} }
@ -288,12 +255,15 @@ static GLDRIVERDATA *OPENGL32_LoadDriver ( LPCWSTR driver )
((FARPROC)(icd->proc)) = GetProcAddress( icd->handle, #proc ); \ ((FARPROC)(icd->proc)) = GetProcAddress( icd->handle, #proc ); \
if (required && icd->proc == NULL) { \ if (required && icd->proc == NULL) { \
DBGPRINT( "Error: GetProcAddress(\"%s\") failed!", #proc ); \ DBGPRINT( "Error: GetProcAddress(\"%s\") failed!", #proc ); \
FreeLibrary( icd->handle ); \
return GetLastError(); \ return GetLastError(); \
} }
static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd ) static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd )
{ {
UINT i; /* check version */
if (icd->version > 2)
DBGPRINT( "Warning: ICD version > 2 (%d)", icd->version );
/* load dll */ /* load dll */
icd->handle = LoadLibraryW( icd->dll ); icd->handle = LoadLibraryW( icd->dll );
@ -304,10 +274,28 @@ static DWORD OPENGL32_InitializeDriver( GLDRIVERDATA *icd )
return err; 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 DrvXXX procs */
LOAD_DRV_PROC(icd, DrvCopyContext, TRUE); LOAD_DRV_PROC(icd, DrvCopyContext, TRUE);
LOAD_DRV_PROC(icd, DrvCreateContext, TRUE); LOAD_DRV_PROC(icd, DrvCreateContext, FALSE);
LOAD_DRV_PROC(icd, DrvCreateLayerContext, TRUE); LOAD_DRV_PROC(icd, DrvCreateLayerContext, FALSE);
LOAD_DRV_PROC(icd, DrvDeleteContext, TRUE); LOAD_DRV_PROC(icd, DrvDeleteContext, TRUE);
LOAD_DRV_PROC(icd, DrvDescribeLayerPlane, TRUE); LOAD_DRV_PROC(icd, DrvDescribeLayerPlane, TRUE);
LOAD_DRV_PROC(icd, DrvDescribePixelFormat, 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, DrvShareLists, TRUE);
LOAD_DRV_PROC(icd, DrvSwapBuffers, TRUE); LOAD_DRV_PROC(icd, DrvSwapBuffers, TRUE);
LOAD_DRV_PROC(icd, DrvSwapLayerBuffers, TRUE); LOAD_DRV_PROC(icd, DrvSwapLayerBuffers, TRUE);
LOAD_DRV_PROC(icd, DrvValidateVersion, TRUE);
/* now load the glXXX functions */ /* we require at least one of DrvCreateContext and DrvCreateLayerContext */
for (i = 0; i < GLIDX_COUNT; i++) if (icd->DrvCreateContext == NULL || icd->DrvCreateLayerContext == NULL)
{ {
icd->func_list[i] = (PVOID)(icd->DrvGetProcAddress( OPENGL32_funcnames[i] )); DBGPRINT( "Error: One of DrvCreateContext/DrvCreateLayerContext is required!" );
#ifdef DEBUG_OPENGL32_ICD_EXPORTS FreeLibrary( icd->handle );
DBGPRINT( "Info: Function %s %sfound in ICD.", OPENGL32_funcnames[i], return ERROR_INVALID_FUNCTION; /* FIXME: use better error code... */
(icd->func_list[i] == NULL) ? ("NOT ") : ("") );
#endif
} }
return ERROR_SUCCESS; return ERROR_SUCCESS;
@ -352,17 +337,25 @@ static BOOL OPENGL32_UnloadDriver( GLDRIVERDATA *icd )
if (!FreeLibrary( icd->handle )) if (!FreeLibrary( icd->handle ))
{ {
allOk = FALSE; allOk = FALSE;
DBGPRINT( "Warning: FreeLibrary on ICD %ws failed!", icd->dll ); DBGPRINT( "Warning: FreeLibrary on ICD %ws failed! (%d)", icd->dll,
GetLastError() );
} }
/* free resources */ /* free resources */
OPENGL32_RemoveICD( icd ); 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; return allOk;
} }
/* FUNCTION: Load ICD (shared ICD data) /* FUNCTION: Load ICD (shared ICD data)
* RETURNS: GLDRIVERDATA pointer on success, NULL otherwise. * RETURNS: GLDRIVERDATA pointer on success, NULL otherwise.
*/ */
@ -381,7 +374,7 @@ GLDRIVERDATA *OPENGL32_LoadICD ( LPCWSTR driver )
} }
/* not found - try to load */ /* not found - try to load */
icd = OPENGL32_LoadDriver ( driver ); icd = OPENGL32_LoadDriver( driver );
if (icd != NULL) if (icd != NULL)
icd->refcount = 1; icd->refcount = 1;
return icd; return icd;
@ -400,4 +393,125 @@ BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd )
return TRUE; 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 */ /* EOF */

View file

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

View file

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

View file

@ -1,4 +1,4 @@
/* $Id: opengl32.h,v 1.7 2004/02/03 14:23:42 royce Exp $ /* $Id: opengl32.h,v 1.8 2004/02/05 04:28:11 royce Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -13,374 +13,45 @@
#define OPENGL32_PRIVATE_H #define OPENGL32_PRIVATE_H
/* debug flags */ /* debug flags */
#define DEBUG_OPENGL32 #if !defined(NDEBUG)
#define DEBUG_OPENGL32_ICD_EXPORTS /* dumps the list of (un)supported glXXX # 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. */ functions when an ICD is loaded. */
#endif /* !NDEBUG */
/* debug macros */ /* debug macros */
#if 0//def DEBUG_OPENGL32 #if 0//def DEBUG_OPENGL32 /* FIXME: DPRINT wants DbgPrint - where is it? */
# include <debug.h> # include <debug.h>
# define DBGPRINT( fmt, args... ) \ # define DBGPRINT( fmt, args... ) \
DPRINT( "OpenGL32.DLL: %s: "fmt, __FUNCTION__, ##args ) DPRINT( "OpenGL32.DLL: %s: "fmt"\n", __FUNCTION__, ##args )
#else #else
# define DBGPRINT( ... ) do {} while (0) # define DBGPRINT( ... ) do {} while (0)
#endif #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 */ /* function/data attributes */
#define EXPORT __declspec(dllexport) #define EXPORT __declspec(dllexport)
#define NAKED __attribute__((naked)) #define NAKED __attribute__((naked))
#define SHARED __attribute__((section("shared"), shared)) #define SHARED __attribute__((section("shared"), shared))
/* gl function list */ /* gl function list */
#include "glfuncs.h" #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 */ /* table indices for funcnames and function pointers */
enum glfunc_indices enum glfunc_indices
{ {
GLIDX_INVALID = -1, GLIDX_INVALID = -1,
#define X(func, ret, args) GLIDX_##func, #define X(func, ret, typeargs, args) GLIDX_##func,
GLFUNCS_MACRO GLFUNCS_MACRO
#undef X #undef X
GLIDX_COUNT GLIDX_COUNT
@ -420,7 +91,7 @@ typedef struct tagGLDRIVERDATA
BOOL (*DrvShareLists)( HGLRC, HGLRC ); BOOL (*DrvShareLists)( HGLRC, HGLRC );
BOOL (*DrvSwapBuffers)( HDC ); BOOL (*DrvSwapBuffers)( HDC );
BOOL (*DrvSwapLayerBuffers)( HDC, UINT ); BOOL (*DrvSwapLayerBuffers)( HDC, UINT );
void (*DrvValidateVersion)(); BOOL (*DrvValidateVersion)( DWORD );
PVOID func_list[GLIDX_COUNT]; /* glXXX functions supported by ICD */ PVOID func_list[GLIDX_COUNT]; /* glXXX functions supported by ICD */
@ -446,7 +117,9 @@ typedef struct tagGLRC
typedef struct tagGLPROCESSDATA typedef struct tagGLPROCESSDATA
{ {
GLDRIVERDATA *driver_list; /* list of loaded drivers */ GLDRIVERDATA *driver_list; /* list of loaded drivers */
HANDLE driver_mutex; /* mutex to protect driver list */
GLRC *glrc_list; /* list of GL rendering contexts */ GLRC *glrc_list; /* list of GL rendering contexts */
HANDLE glrc_mutex; /* mutex to protect glrc list */
} GLPROCESSDATA; } GLPROCESSDATA;
/* TLS data */ /* TLS data */
@ -462,6 +135,8 @@ extern GLPROCESSDATA OPENGL32_processdata;
/* function prototypes */ /* function prototypes */
GLDRIVERDATA *OPENGL32_LoadICD( LPCWSTR driver ); GLDRIVERDATA *OPENGL32_LoadICD( LPCWSTR driver );
BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd ); 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 #endif//OPENGL32_PRIVATE_H

View file

@ -10,17 +10,23 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <winreg.h>
#include "opengl32.h" #include "opengl32.h"
/* FUNCTION: Append OpenGL Rendering Context (GLRC) to list /* FUNCTION: Append OpenGL Rendering Context (GLRC) to list
* ARGUMENTS: [IN] glrc: GLRC to append to list * ARGUMENTS: [IN] glrc: GLRC to append to list
* TODO: protect from race conditions
*/ */
static void WGL_AppendContext( GLRC *glrc ) 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) if (OPENGL32_processdata.glrc_list == NULL)
OPENGL32_processdata.glrc_list = glrc; OPENGL32_processdata.glrc_list = glrc;
else else
@ -30,15 +36,26 @@ static void WGL_AppendContext( GLRC *glrc )
p = p->next; p = p->next;
p->next = glrc; 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 /* FUNCTION: Remove OpenGL Rendering Context (GLRC) from list
* ARGUMENTS: [IN] glrc: GLRC to remove from list * ARGUMENTS: [IN] glrc: GLRC to remove from list
* TODO: protect from race conditions
*/ */
static void WGL_RemoveContext( GLRC *glrc ) 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) if (glrc == OPENGL32_processdata.glrc_list)
OPENGL32_processdata.glrc_list = glrc->next; OPENGL32_processdata.glrc_list = glrc->next;
else else
@ -55,6 +72,10 @@ static void WGL_RemoveContext( GLRC *glrc )
} }
DBGPRINT( "Error: GLRC 0x%08x not found in list!", 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 /* 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. /* 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 ) HGLRC WINAPI wglCreateContext( HDC hdc )
{ {
HKEY hKey; return wglCreateLayerContext( hdc, 0 );
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 );*/
} }
@ -211,14 +164,9 @@ HGLRC WINAPI wglCreateContext( HDC hdc )
*/ */
HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer ) HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
{ {
HKEY hKey;
WCHAR subKey[1024] = L"SOFTWARE\\Microsoft\\Windows NT\\"
"CurrentVersion\\OpenGLDrivers";
LONG ret; LONG ret;
WCHAR driver[256]; WCHAR driver[256];
DWORD size; DWORD dw, size;
DWORD dw;
FILETIME time;
GLDRIVERDATA *icd; GLDRIVERDATA *icd;
GLRC *glrc; GLRC *glrc;
@ -230,36 +178,36 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
return NULL; 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 */ /* allocate our GLRC */
glrc = (GLRC*)HeapAlloc( GetProcessHeap(), glrc = (GLRC*)HeapAlloc( GetProcessHeap(),
HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, sizeof (GLRC) ); HEAP_ZERO_MEMORY | HEAP_GENERATE_EXCEPTIONS, sizeof (GLRC) );
if (!glrc) if (glrc == NULL)
return NULL; return NULL;
/* try to find an ICD */ /* try to find an ICD */
for (dw = 0; ; dw++) for (dw = 0; drvHglrc == NULL; dw++) /* enumerate values */
{ {
size = 256; size = sizeof (driver) / sizeof (driver[0]);
ret = RegEnumKeyExW( hKey, dw, driver, &size, NULL, NULL, NULL, &time ); ret = OPENGL32_RegEnumDrivers( dw, driver, &size );
if (ret != ERROR_SUCCESS ) if (ret != ERROR_SUCCESS)
break; break;
icd = OPENGL32_LoadICD( driver ); icd = OPENGL32_LoadICD( driver );
if (icd == NULL) /* try next ICD */ if (icd == NULL) /* try next ICD */
continue; continue;
if (icd->DrvCreateLayerContext)
drvHglrc = icd->DrvCreateLayerContext( hdc, layer ); 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 */ if (drvHglrc == NULL) /* try next ICD */
{ {
DBGPRINT( "Info: DrvCreateLayerContext (driver = %ws) failed: %d", DBGPRINT( "Info: DrvCreateContext (driver = %ws) failed: %d",
icd->driver_name, GetLastError() ); icd->driver_name, GetLastError() );
OPENGL32_UnloadICD( icd ); OPENGL32_UnloadICD( icd );
continue; continue;
@ -268,12 +216,11 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
/* the ICD was loaded successfully and we got a HGLRC in drvHglrc */ /* the ICD was loaded successfully and we got a HGLRC in drvHglrc */
break; break;
} }
RegCloseKey( hKey );
if (drvHglrc == NULL) /* no ICD was found */ if (drvHglrc == NULL) /* no ICD was found */
{ {
/* FIXME: fallback to mesa */ /* FIXME: fallback to mesa */
DBGPRINT( "Error: No ICD found!" ); DBGPRINT( "Error: No working ICD found!" );
HeapFree( GetProcessHeap(), 0, glrc ); HeapFree( GetProcessHeap(), 0, glrc );
return NULL; return NULL;
} }
@ -395,13 +342,14 @@ PROC WINAPI wglGetProcAddress( LPCSTR proc )
/* FIXME: go through own functions? */ /* FIXME: go through own functions? */
DBGPRINT( "Unsupported GL extension: %s", proc ); 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) */ /* FIXME: support wgl extensions? (there are such IIRC) */
DBGPRINT( "Unsupported WGL extension: %s", proc ); 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 ); DBGPRINT( "GLU extension %s requested, returning NULL", proc );
} }
@ -418,6 +366,8 @@ BOOL WINAPI wglMakeCurrent( HDC hdc, HGLRC hglrc )
{ {
GLRC *glrc = (GLRC *)hglrc; GLRC *glrc = (GLRC *)hglrc;
/* FIXME: glFlush() current context */
/* check hdc */ /* check hdc */
if (GetObjectType( hdc ) != OBJ_DC) if (GetObjectType( hdc ) != OBJ_DC)
{ {