patch by blight:

The C implementation of the gl functions is done. Thanks to Royce who has figured out more ICD internals (how function pointers are passed) the ICD loading code is getting more complete.

svn path=/trunk/; revision=8050
This commit is contained in:
Royce Mitchell III 2004-02-06 13:59:13 +00:00
parent b1adc9e47f
commit e2dba7ab82
7 changed files with 622 additions and 584 deletions

View file

@ -7,14 +7,14 @@ TARGET_NORC = yes
TARGET_NAME = opengl32 TARGET_NAME = opengl32
# -fno-builtin # -fno-builtin
TARGET_CFLAGS = -D__USE_W32API -DUNICODE -D_M_IX86 TARGET_CFLAGS = -D__USE_W32API -DUNICODE -D_M_IX86 -Os
# require os code to explicitly request A/W version of structs/functions # require os code to explicitly request A/W version of structs/functions
TARGET_CFLAGS += -D_DISABLE_TIDENTS -Wall -Werror TARGET_CFLAGS += -D_DISABLE_TIDENTS -Wall -Werror
TARGET_LFLAGS = -lgdi32 -lntdll TARGET_LFLAGS = -lgdi32 -lntdll
TARGET_SDKLIBS = opengl32.a gdi32.a TARGET_SDKLIBS = opengl32.a gdi32.a ntdll.a
# ntdll.a gdi32.a - may still need these # ntdll.a gdi32.a - may still need these
TARGET_OBJECTS = \ TARGET_OBJECTS = \

View file

@ -13,18 +13,19 @@
/* On a x86 we call the ICD functions in a special-way: /* On a x86 we call the ICD functions in a special-way:
* *
* For every glXXX function we export a glXXX entry-point which loads the * For every glXXX function we export a glXXX entry-point which loads the
* matching "real" function pointer from the NtCurrentTeb()->glDispatch table * matching "real" function pointer from the NtCurrentTeb()->glDispatchTable
* and jmps to the address, leaving the stack alone and letting the "real" * for gl functions in teblist.h and for others it gets the pointer from
* function return for us. * NtCurrentTeb()->glTable and jmps to the address, leaving the stack alone and
* letting the "real" function return for us.
* Royce has implemented this in NASM =D
* *
* On other machines we use C to forward the calls (slow...) * On other machines we use C to forward the calls (slow...)
*/ */
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
/*#include <GL/gl.h>*/ #include <ntos/types.h>
/* -- complains about conflicting types of GL functions we export */ #include <napi/teb.h>
/* either fix that or put the GLxxx typedefs in here */
#include "opengl32.h" #include "opengl32.h"
@ -46,42 +47,56 @@ typedef double GLdouble;
typedef double GLclampd; typedef double GLclampd;
typedef void GLvoid; typedef void GLvoid;
#if defined(__GNUC__) && defined(_M_IX86) /* use GCC extended inline asm */ void STDCALL glEmptyFunc0() {}
void STDCALL glEmptyFunc4( long l1 ) {}
void STDCALL glEmptyFunc8( long l1, long l2 ) {}
void STDCALL glEmptyFunc12( long l1, long l2, long l3 ) {}
void STDCALL glEmptyFunc16( long l1, long l2, long l3, long l4 ) {}
void STDCALL glEmptyFunc20( long l1, long l2, long l3, long l4, long l5 ) {}
void STDCALL glEmptyFunc24( long l1, long l2, long l3, long l4, long l5,
long l6 ) {}
void STDCALL glEmptyFunc28( long l1, long l2, long l3, long l4, long l5,
long l6, long l7 ) {}
void STDCALL glEmptyFunc32( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8 ) {}
void STDCALL glEmptyFunc36( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8, long l9 ) {}
void STDCALL glEmptyFunc40( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8, long l9, long l10 ) {}
void STDCALL glEmptyFunc44( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8, long l9, long l10,
long l11 ) {}
void STDCALL glEmptyFunc48( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8, long l9, long l10,
long l11, long l12 ) {}
void STDCALL glEmptyFunc52( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8, long l9, long l10,
long l11, long l12, long l13 ) {}
void STDCALL glEmptyFunc56( long l1, long l2, long l3, long l4, long l5,
long l6, long l7, long l8, long l9, long l10,
long l11, long l12, long l13, long l14 ) {}
# define X(func, ret, typeargs, args) \
void WINAPI func typeargs \
{ \
__asm__( \
"movl %%fs:0x18, %%eax" "\n\t" \
"addl %0, %%eax" "\n\t" \
"jmpl *(%%eax)" "\n\t" \
: \
: "n"(0x714+(GLIDX_##func*sizeof(PVOID))) ); \
}
#elif defined(_MSC_VER) && defined(_M_IX86) /* use MSVC intel inline asm */ # define X(func, ret, typeargs, args, icdidx, tebidx, stack) \
ret STDCALL func typeargs \
# 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]); \ PROC *table; \
return (ret)((ret (*) typeargs)fn)args; \ PROC fn; \
if (tebidx >= 0) \
{ \
table = (PROC *)NtCurrentTeb()->glDispatchTable; \
fn = table[tebidx]; \
} \
else \
{ \
table = (PROC *)NtCurrentTeb()->glTable; \
fn = table[icdidx]; \
} \
return (ret)((ret(*)typeargs)fn)args; \
} }
#endif
GLFUNCS_MACRO GLFUNCS_MACRO
#undef X #undef X
/* EOF */ /* EOF */

View file

@ -8,481 +8,350 @@
* !!! AUTOMATICALLY CREATED FROM glfuncs.csv !!! * !!! AUTOMATICALLY CREATED FROM glfuncs.csv !!!
*/ */
/* To use this macro define a macro X(name, ret, typeargs, args). /* To use this macro define a macro X(name, ret, typeargs, args, icdidx, tebidx, stack).
* It gets called for every glXXX function. For glVertex3f name would be "glVertex3f", * It gets called for every glXXX function. i.e. glVertex3f: name = "glVertex3f",
* ret would be "void", typeargs would be "(GLfloat x, GLfloat y, GLfloat z)" and * ret = "void", typeargs = "(GLfloat x, GLfloat y, GLfloat z)", args = "(x,y,z)",
* args would be "(x,y,z)". * icdidx = "136", tebidx = "98" and stack = "12".
* 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), (op,value)) \ X(glAccum, void, (GLenum op, GLfloat value), (op,value), 213, -1, 8) \
X(glActiveTexture, void, (GLenum texture), (texture)) \ X(glAlphaFunc, void, (GLenum func, GLclampf ref), (func,ref), 240, -1, 8) \
X(glAddSwapHintRectWIN, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \ X(glAreTexturesResident, GLboolean, (GLsizei n, const GLuint *textures, GLboolean *residences), (n,textures,residences), 322, -1, 12) \
X(glAlphaFunc, void, (GLenum func, GLclampf ref), (func,ref)) \ X(glArrayElement, void, (GLint i), (i), 306, 144, 4) \
X(glAreTexturesResident, GLboolean, (GLsizei n, const GLuint *textures, GLboolean *residences), (n,textures,residences)) \ X(glBegin, void, (GLenum mode), (mode), 7, 2, 4) \
X(glArrayElement, void, (GLint i), (i)) \ X(glBindTexture, void, (GLenum target, GLuint texture), (target,texture), 307, 145, 8) \
X(glBegin, void, (GLenum mode), (mode)) \ 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), 8, -1, 28) \
X(glBindTexture, void, (GLenum target, GLuint texture), (target,texture)) \ X(glBlendFunc, void, (GLenum sfactor, GLenum dfactor), (sfactor,dfactor), 241, -1, 8) \
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(glCallList, void, (GLuint list), (list), 2, 0, 4) \
X(glBlendColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha), (red,green,blue,alpha)) \ X(glCallLists, void, (GLsizei n, GLenum type, const GLvoid *lists), (n,type,lists), 3, 1, 12) \
X(glBlendEquation, void, (GLenum mode), (mode)) \ X(glClear, void, (GLbitfield mask), (mask), 203, -1, 4) \
X(glBlendFunc, void, (GLenum sfactor, GLenum dfactor), (sfactor,dfactor)) \ X(glClearAccum, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red,green,blue,alpha), 204, -1, 16) \
X(glBlendFuncSeparate, void, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB,dfactorRGB,sfactorAlpha,dfactorAlpha)) \ X(glClearColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha), (red,green,blue,alpha), 206, -1, 16) \
X(glCallList, void, (GLuint list), (list)) \ X(glClearDepth, void, (GLclampd depth), (depth), 208, -1, 8) \
X(glCallLists, void, (GLsizei n, GLenum type, const GLvoid *lists), (n,type,lists)) \ X(glClearIndex, void, (GLfloat c), (c), 205, -1, 4) \
X(glClear, void, (GLbitfield mask), (mask)) \ X(glClearStencil, void, (GLint s), (s), 207, -1, 4) \
X(glClearAccum, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red,green,blue,alpha)) \ X(glClipPlane, void, (GLenum plane, const GLdouble *equation), (plane,equation), 150, -1, 8) \
X(glClearColor, void, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha), (red,green,blue,alpha)) \ X(glColor3b, void, (GLbyte red, GLbyte green, GLbyte blue), (red,green,blue), 9, 3, 12) \
X(glClearDepth, void, (GLclampd depth), (depth)) \ X(glColor3bv, void, (const GLbyte *v), (v), 10, 4, 4) \
X(glClearIndex, void, (GLfloat c), (c)) \ X(glColor3d, void, (GLdouble red, GLdouble green, GLdouble blue), (red,green,blue), 11, 5, 24) \
X(glClearStencil, void, (GLint s), (s)) \ X(glColor3dv, void, (const GLdouble *v), (v), 12, 6, 4) \
X(glClientActiveTexture, void, (GLenum texture), (texture)) \ X(glColor3f, void, (GLfloat red, GLfloat green, GLfloat blue), (red,green,blue), 13, 7, 12) \
X(glClipPlane, void, (GLenum plane, const GLdouble *equation), (plane,equation)) \ X(glColor3fv, void, (const GLfloat *v), (v), 14, 8, 4) \
X(glColor3b, void, (GLbyte red, GLbyte green, GLbyte blue), (red,green,blue)) \ X(glColor3i, void, (GLint red, GLint green, GLint blue), (red,green,blue), 15, 9, 12) \
X(glColor3bv, void, (const GLbyte *v), (v)) \ X(glColor3iv, void, (const GLint *v), (v), 16, 10, 4) \
X(glColor3d, void, (GLdouble red, GLdouble green, GLdouble blue), (red,green,blue)) \ X(glColor3s, void, (GLshort red, GLshort green, GLshort blue), (red,green,blue), 17, 11, 12) \
X(glColor3dv, void, (const GLdouble *v), (v)) \ X(glColor3sv, void, (const GLshort *v), (v), 18, 12, 4) \
X(glColor3f, void, (GLfloat red, GLfloat green, GLfloat blue), (red,green,blue)) \ X(glColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue), (red,green,blue), 19, 13, 12) \
X(glColor3fv, void, (const GLfloat *v), (v)) \ X(glColor3ubv, void, (const GLubyte *v), (v), 20, 14, 4) \
X(glColor3i, void, (GLint red, GLint green, GLint blue), (red,green,blue)) \ X(glColor3ui, void, (GLuint red, GLuint green, GLuint blue), (red,green,blue), 21, 15, 12) \
X(glColor3iv, void, (const GLint *v), (v)) \ X(glColor3uiv, void, (const GLuint *v), (v), 22, 16, 4) \
X(glColor3s, void, (GLshort red, GLshort green, GLshort blue), (red,green,blue)) \ X(glColor3us, void, (GLushort red, GLushort green, GLushort blue), (red,green,blue), 23, 17, 12) \
X(glColor3sv, void, (const GLshort *v), (v)) \ X(glColor3usv, void, (const GLushort *v), (v), 24, 18, 4) \
X(glColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue), (red,green,blue)) \ X(glColor4b, void, (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha), (red,green,blue,alpha), 25, 19, 16) \
X(glColor3ubv, void, (const GLubyte *v), (v)) \ X(glColor4bv, void, (const GLbyte *v), (v), 26, 20, 4) \
X(glColor3ui, void, (GLuint red, GLuint green, GLuint blue), (red,green,blue)) \ X(glColor4d, void, (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha), (red,green,blue,alpha), 27, 21, 32) \
X(glColor3uiv, void, (const GLuint *v), (v)) \ X(glColor4dv, void, (const GLdouble *v), (v), 28, 22, 4) \
X(glColor3us, void, (GLushort red, GLushort green, GLushort blue), (red,green,blue)) \ X(glColor4f, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red,green,blue,alpha), 29, 23, 16) \
X(glColor3usv, void, (const GLushort *v), (v)) \ X(glColor4fv, void, (const GLfloat *v), (v), 30, 24, 4) \
X(glColor4b, void, (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha), (red,green,blue,alpha)) \ X(glColor4i, void, (GLint red, GLint green, GLint blue, GLint alpha), (red,green,blue,alpha), 31, 25, 16) \
X(glColor4bv, void, (const GLbyte *v), (v)) \ X(glColor4iv, void, (const GLint *v), (v), 32, 26, 4) \
X(glColor4d, void, (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha), (red,green,blue,alpha)) \ X(glColor4s, void, (GLshort red, GLshort green, GLshort blue, GLshort alpha), (red,green,blue,alpha), 33, 27, 16) \
X(glColor4dv, void, (const GLdouble *v), (v)) \ X(glColor4sv, void, (const GLshort *v), (v), 34, 28, 4) \
X(glColor4f, void, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red,green,blue,alpha)) \ X(glColor4ub, void, (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha), (red,green,blue,alpha), 35, 29, 16) \
X(glColor4fv, void, (const GLfloat *v), (v)) \ X(glColor4ubv, void, (const GLubyte *v), (v), 36, 30, 4) \
X(glColor4i, void, (GLint red, GLint green, GLint blue, GLint alpha), (red,green,blue,alpha)) \ X(glColor4ui, void, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red,green,blue,alpha), 37, 31, 16) \
X(glColor4iv, void, (const GLint *v), (v)) \ X(glColor4uiv, void, (const GLuint *v), (v), 38, 32, 4) \
X(glColor4s, void, (GLshort red, GLshort green, GLshort blue, GLshort alpha), (red,green,blue,alpha)) \ X(glColor4us, void, (GLushort red, GLushort green, GLushort blue, GLushort alpha), (red,green,blue,alpha), 39, 33, 16) \
X(glColor4sv, void, (const GLshort *v), (v)) \ X(glColor4usv, void, (const GLushort *v), (v), 40, 34, 4) \
X(glColor4ub, void, (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha), (red,green,blue,alpha)) \ X(glColorMask, void, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red,green,blue,alpha), 210, -1, 16) \
X(glColor4ubv, void, (const GLubyte *v), (v)) \ X(glColorMaterial, void, (GLenum face, GLenum mode), (face,mode), 151, -1, 8) \
X(glColor4ui, void, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red,green,blue,alpha)) \ X(glColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer), 308, 146, 16) \
X(glColor4uiv, void, (const GLuint *v), (v)) \ X(glCopyPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type), (x,y,width,height,type), 255, -1, 20) \
X(glColor4us, void, (GLushort red, GLushort green, GLushort blue, GLushort alpha), (red,green,blue,alpha)) \ X(glCopyTexImage1D, void, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (target,level,internalformat,x,y,width,border), 323, -1, 28) \
X(glColor4usv, void, (const GLushort *v), (v)) \ 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), 324, -1, 32) \
X(glColorMask, void, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red,green,blue,alpha)) \ X(glCopyTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target,level,xoffset,x,y,width), 325, -1, 24) \
X(glColorMaterial, void, (GLenum face, GLenum mode), (face,mode)) \ 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), 326, -1, 32) \
X(glColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \ X(glCullFace, void, (GLenum mode), (mode), 152, -1, 4) \
X(glColorSubTable, void, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data), (target,start,count,format,type,data)) \ X(glDeleteLists, void, (GLuint list, GLsizei range), (list,range), 4, -1, 8) \
X(glColorTable, void, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table), (target,internalformat,width,format,type,table)) \ X(glDeleteTextures, void, (GLsizei n, const GLuint *textures), (n,textures), 327, -1, 8) \
X(glColorTableParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \ X(glDepthFunc, void, (GLenum func), (func), 245, -1, 4) \
X(glColorTableParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \ X(glDepthMask, void, (GLboolean flag), (flag), 211, -1, 4) \
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(glDepthRange, void, (GLclampd zNear, GLclampd zFar), (zNear,zFar), 288, -1, 16) \
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(glDisable, void, (GLenum cap), (cap), 214, 116, 4) \
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(glDisableClientState, void, (GLenum array), (array), 309, 147, 4) \
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(glDrawArrays, void, (GLenum mode, GLint first, GLsizei count), (mode,first,count), 310, 148, 12) \
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(glDrawBuffer, void, (GLenum mode), (mode), 202, -1, 4) \
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(glDrawElements, void, (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices), (mode,count,type,indices), 311, 149, 16) \
X(glConvolutionFilter1D, void, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image), (target,internalformat,width,format,type,image)) \ X(glDrawPixels, void, (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels), (width,height,format,type,pixels), 257, -1, 20) \
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(glEdgeFlag, void, (GLboolean flag), (flag), 41, 35, 4) \
X(glConvolutionParameterf, void, (GLenum target, GLenum pname, GLfloat params), (target,pname,params)) \ X(glEdgeFlagPointer, void, (GLsizei stride, const GLboolean *pointer), (stride,pointer), 312, 150, 8) \
X(glConvolutionParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \ X(glEdgeFlagv, void, (const GLboolean *flag), (flag), 42, 36, 4) \
X(glConvolutionParameteri, void, (GLenum target, GLenum pname, GLint params), (target,pname,params)) \ X(glEnable, void, (GLenum cap), (cap), 215, 117, 4) \
X(glConvolutionParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \ X(glEnableClientState, void, (GLenum array), (array), 313, 151, 4) \
X(glCopyColorSubTable, void, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width), (target,start,x,y,width)) \ X(glEnd, void, (void), (), 43, 37, 0) \
X(glCopyColorTable, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target,internalformat,x,y,width)) \ X(glEndList, void, (void), (), 1, -1, 0) \
X(glCopyConvolutionFilter1D, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target,internalformat,x,y,width)) \ X(glEvalCoord1d, void, (GLdouble u), (u), 228, 120, 8) \
X(glCopyConvolutionFilter2D, void, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height), (target,internalformat,x,y,width,height)) \ X(glEvalCoord1dv, void, (const GLdouble *u), (u), 229, 121, 4) \
X(glCopyPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type), (x,y,width,height,type)) \ X(glEvalCoord1f, void, (GLfloat u), (u), 230, 122, 4) \
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(glEvalCoord1fv, void, (const GLfloat *u), (u), 231, 123, 4) \
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(glEvalCoord2d, void, (GLdouble u, GLdouble v), (u,v), 232, 124, 16) \
X(glCopyTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target,level,xoffset,x,y,width)) \ X(glEvalCoord2dv, void, (const GLdouble *u), (u), 233, 125, 4) \
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(glEvalCoord2f, void, (GLfloat u, GLfloat v), (u,v), 234, 126, 8) \
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(glEvalCoord2fv, void, (const GLfloat *u), (u), 235, 127, 4) \
X(glCullFace, void, (GLenum mode), (mode)) \ X(glEvalMesh1, void, (GLenum mode, GLint i1, GLint i2), (mode,i1,i2), 236, -1, 12) \
X(glDeleteLists, void, (GLuint list, GLsizei range), (list,range)) \ X(glEvalMesh2, void, (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2), (mode,i1,i2,j1,j2), 238, -1, 20) \
X(glDeleteTextures, void, (GLsizei n, const GLuint *textures), (n,textures)) \ X(glEvalPoint1, void, (GLint i), (i), 237, 128, 4) \
X(glDepthFunc, void, (GLenum func), (func)) \ X(glEvalPoint2, void, (GLint i, GLint j), (i,j), 239, 129, 8) \
X(glDepthMask, void, (GLboolean flag), (flag)) \ X(glFeedbackBuffer, void, (GLsizei size, GLenum type, GLfloat *buffer), (size,type,buffer), 194, -1, 12) \
X(glDepthRange, void, (GLclampd zNear, GLclampd zFar), (zNear,zFar)) \ X(glFinish, void, (void), (), 216, -1, 0) \
X(glDisable, void, (GLenum cap), (cap)) \ X(glFlush, void, (void), (), 217, -1, 0) \
X(glDisableClientState, void, (GLenum array), (array)) \ X(glFogf, void, (GLenum pname, GLfloat param), (pname,param), 153, -1, 8) \
X(glDrawArrays, void, (GLenum mode, GLint first, GLsizei count), (mode,first,count)) \ X(glFogfv, void, (GLenum pname, const GLfloat *params), (pname,params), 154, -1, 8) \
X(glDrawBuffer, void, (GLenum mode), (mode)) \ X(glFogi, void, (GLenum pname, GLint param), (pname,param), 155, -1, 8) \
X(glDrawElements, void, (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices), (mode,count,type,indices)) \ X(glFogiv, void, (GLenum pname, const GLint *params), (pname,params), 156, -1, 8) \
X(glDrawPixels, void, (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels), (width,height,format,type,pixels)) \ X(glFrontFace, void, (GLenum mode), (mode), 157, -1, 4) \
X(glDrawRangeElements, void, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices), (mode,start,end,count,type,indices)) \ X(glFrustum, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left,right,bottom,top,zNear,zFar), 289, -1, 48) \
X(glEdgeFlag, void, (GLboolean flag), (flag)) \ X(glGenLists, GLuint, (GLsizei range), (range), 5, -1, 4) \
X(glEdgeFlagPointer, void, (GLsizei stride, const GLboolean *pointer), (stride,pointer)) \ X(glGenTextures, void, (GLsizei n, GLuint *textures), (n,textures), 328, -1, 8) \
X(glEdgeFlagv, void, (const GLboolean *flag), (flag)) \ X(glGetBooleanv, void, (GLenum pname, GLboolean *params), (pname,params), 258, -1, 8) \
X(glEnable, void, (GLenum cap), (cap)) \ X(glGetClipPlane, void, (GLenum plane, GLdouble *equation), (plane,equation), 259, -1, 8) \
X(glEnableClientState, void, (GLenum array), (array)) \ X(glGetDoublev, void, (GLenum pname, GLdouble *params), (pname,params), 260, -1, 8) \
X(glEnd, void, (void), ()) \ X(glGetError, GLenum, (void), (), 261, -1, 0) \
X(glEndList, void, (void), ()) \ X(glGetFloatv, void, (GLenum pname, GLfloat *params), (pname,params), 262, -1, 8) \
X(glEvalCoord1d, void, (GLdouble u), (u)) \ X(glGetIntegerv, void, (GLenum pname, GLint *params), (pname,params), 263, -1, 8) \
X(glEvalCoord1dv, void, (const GLdouble *u), (u)) \ X(glGetLightfv, void, (GLenum light, GLenum pname, GLfloat *params), (light,pname,params), 264, -1, 12) \
X(glEvalCoord1f, void, (GLfloat u), (u)) \ X(glGetLightiv, void, (GLenum light, GLenum pname, GLint *params), (light,pname,params), 265, -1, 12) \
X(glEvalCoord1fv, void, (const GLfloat *u), (u)) \ X(glGetMapdv, void, (GLenum target, GLenum query, GLdouble *v), (target,query,v), 266, -1, 12) \
X(glEvalCoord2d, void, (GLdouble u, GLdouble v), (u,v)) \ X(glGetMapfv, void, (GLenum target, GLenum query, GLfloat *v), (target,query,v), 267, -1, 12) \
X(glEvalCoord2dv, void, (const GLdouble *u), (u)) \ X(glGetMapiv, void, (GLenum target, GLenum query, GLint *v), (target,query,v), 268, -1, 12) \
X(glEvalCoord2f, void, (GLfloat u, GLfloat v), (u,v)) \ X(glGetMaterialfv, void, (GLenum face, GLenum pname, GLfloat *params), (face,pname,params), 269, -1, 12) \
X(glEvalCoord2fv, void, (const GLfloat *u), (u)) \ X(glGetMaterialiv, void, (GLenum face, GLenum pname, GLint *params), (face,pname,params), 270, -1, 12) \
X(glEvalMesh1, void, (GLenum mode, GLint i1, GLint i2), (mode,i1,i2)) \ X(glGetPixelMapfv, void, (GLenum map, GLfloat *values), (map,values), 271, -1, 8) \
X(glEvalMesh2, void, (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2), (mode,i1,i2,j1,j2)) \ X(glGetPixelMapuiv, void, (GLenum map, GLuint *values), (map,values), 272, -1, 8) \
X(glEvalPoint1, void, (GLint i), (i)) \ X(glGetPixelMapusv, void, (GLenum map, GLushort *values), (map,values), 273, -1, 8) \
X(glEvalPoint2, void, (GLint i, GLint j), (i,j)) \ X(glGetPointerv, void, (GLenum pname, GLvoid* *params), (pname,params), 329, 160, 8) \
X(glFeedbackBuffer, void, (GLsizei size, GLenum type, GLfloat *buffer), (size,type,buffer)) \ X(glGetPolygonStipple, void, (GLubyte *mask), (mask), 274, -1, 4) \
X(glFinish, void, (void), ()) \ X(glGetString, const GLubyte *, (GLenum name), (name), 275, -1, 4) \
X(glFlush, void, (void), ()) \ X(glGetTexEnvfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params), 276, -1, 12) \
X(glFlushHold, GLuint, (void), ()) \ X(glGetTexEnviv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params), 277, -1, 12) \
X(glFogCoordPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer)) \ X(glGetTexGendv, void, (GLenum coord, GLenum pname, GLdouble *params), (coord,pname,params), 278, -1, 12) \
X(glFogCoordd, void, (GLdouble fog), (fog)) \ X(glGetTexGenfv, void, (GLenum coord, GLenum pname, GLfloat *params), (coord,pname,params), 279, -1, 12) \
X(glFogCoorddv, void, (const GLdouble *fog), (fog)) \ X(glGetTexGeniv, void, (GLenum coord, GLenum pname, GLint *params), (coord,pname,params), 280, -1, 12) \
X(glFogCoordf, void, (GLfloat fog), (fog)) \ X(glGetTexImage, void, (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels), (target,level,format,type,pixels), 281, -1, 20) \
X(glFogCoordfv, void, (const GLfloat *fog), (fog)) \ X(glGetTexLevelParameterfv, void, (GLenum target, GLint level, GLenum pname, GLfloat *params), (target,level,pname,params), 284, -1, 16) \
X(glFogf, void, (GLenum pname, GLfloat param), (pname,param)) \ X(glGetTexLevelParameteriv, void, (GLenum target, GLint level, GLenum pname, GLint *params), (target,level,pname,params), 285, -1, 16) \
X(glFogfv, void, (GLenum pname, const GLfloat *params), (pname,params)) \ X(glGetTexParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params), 282, -1, 12) \
X(glFogi, void, (GLenum pname, GLint param), (pname,param)) \ X(glGetTexParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params), 283, -1, 12) \
X(glFogiv, void, (GLenum pname, const GLint *params), (pname,params)) \ X(glHint, void, (GLenum target, GLenum mode), (target,mode), 158, -1, 8) \
X(glFrontFace, void, (GLenum mode), (mode)) \ X(glIndexMask, void, (GLuint mask), (mask), 212, -1, 4) \
X(glFrustum, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left,right,bottom,top,zNear,zFar)) \ X(glIndexPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer), 314, 152, 12) \
X(glGenLists, GLuint, (GLsizei range), (range)) \ X(glIndexd, void, (GLdouble c), (c), 44, 38, 8) \
X(glGenTextures, void, (GLsizei n, GLuint *textures), (n,textures)) \ X(glIndexdv, void, (const GLdouble *c), (c), 45, 39, 4) \
X(glGetBooleanv, void, (GLenum pname, GLboolean *params), (pname,params)) \ X(glIndexf, void, (GLfloat c), (c), 46, 40, 4) \
X(glGetClipPlane, void, (GLenum plane, GLdouble *equation), (plane,equation)) \ X(glIndexfv, void, (const GLfloat *c), (c), 47, 41, 4) \
X(glGetColorTable, void, (GLenum target, GLenum format, GLenum type, GLvoid *table), (target,format,type,table)) \ X(glIndexi, void, (GLint c), (c), 48, 42, 4) \
X(glGetColorTableParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \ X(glIndexiv, void, (const GLint *c), (c), 49, 43, 4) \
X(glGetColorTableParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \ X(glIndexs, void, (GLshort c), (c), 50, 44, 4) \
X(glGetCompressedTexImage, void, (GLenum target, GLint lod, GLvoid *img), (target,lod,img)) \ X(glIndexsv, void, (const GLshort *c), (c), 51, 45, 4) \
X(glGetConvolutionFilter, void, (GLenum target, GLenum format, GLenum type, GLvoid *image), (target,format,type,image)) \ X(glIndexub, void, (GLubyte c), (c), 315, 153, 4) \
X(glGetConvolutionParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \ X(glIndexubv, void, (const GLubyte *c), (c), 316, 154, 4) \
X(glGetConvolutionParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \ X(glInitNames, void, (void), (), 197, -1, 0) \
X(glGetDoublev, void, (GLenum pname, GLdouble *params), (pname,params)) \ X(glInterleavedArrays, void, (GLenum format, GLsizei stride, const GLvoid *pointer), (format,stride,pointer), 317, 155, 12) \
X(glGetError, GLenum, (void), ()) \ X(glIsEnabled, GLboolean, (GLenum cap), (cap), 286, -1, 4) \
X(glGetFloatv, void, (GLenum pname, GLfloat *params), (pname,params)) \ X(glIsList, GLboolean, (GLuint list), (list), 287, -1, 4) \
X(glGetHistogram, void, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values), (target,reset,format,type,values)) \ X(glIsTexture, GLboolean, (GLuint texture), (texture), 330, -1, 4) \
X(glGetHistogramParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \ X(glLightModelf, void, (GLenum pname, GLfloat param), (pname,param), 163, -1, 8) \
X(glGetHistogramParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \ X(glLightModelfv, void, (GLenum pname, const GLfloat *params), (pname,params), 164, -1, 8) \
X(glGetIntegerv, void, (GLenum pname, GLint *params), (pname,params)) \ X(glLightModeli, void, (GLenum pname, GLint param), (pname,param), 165, -1, 8) \
X(glGetLightfv, void, (GLenum light, GLenum pname, GLfloat *params), (light,pname,params)) \ X(glLightModeliv, void, (GLenum pname, const GLint *params), (pname,params), 166, -1, 8) \
X(glGetLightiv, void, (GLenum light, GLenum pname, GLint *params), (light,pname,params)) \ X(glLightf, void, (GLenum light, GLenum pname, GLfloat param), (light,pname,param), 159, -1, 12) \
X(glGetMapdv, void, (GLenum target, GLenum query, GLdouble *v), (target,query,v)) \ X(glLightfv, void, (GLenum light, GLenum pname, const GLfloat *params), (light,pname,params), 160, -1, 12) \
X(glGetMapfv, void, (GLenum target, GLenum query, GLfloat *v), (target,query,v)) \ X(glLighti, void, (GLenum light, GLenum pname, GLint param), (light,pname,param), 161, -1, 12) \
X(glGetMapiv, void, (GLenum target, GLenum query, GLint *v), (target,query,v)) \ X(glLightiv, void, (GLenum light, GLenum pname, const GLint *params), (light,pname,params), 162, -1, 12) \
X(glGetMaterialfv, void, (GLenum face, GLenum pname, GLfloat *params), (face,pname,params)) \ X(glLineStipple, void, (GLint factor, GLushort pattern), (factor,pattern), 167, -1, 8) \
X(glGetMaterialiv, void, (GLenum face, GLenum pname, GLint *params), (face,pname,params)) \ X(glLineWidth, void, (GLfloat width), (width), 168, -1, 4) \
X(glGetMinmax, void, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values), (target,reset,format,type,values)) \ X(glListBase, void, (GLuint base), (base), 6, -1, 4) \
X(glGetMinmaxParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \ X(glLoadIdentity, void, (void), (), 290, 130, 0) \
X(glGetMinmaxParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \ X(glLoadMatrixd, void, (const GLdouble *m), (m), 292, 132, 4) \
X(glGetPixelMapfv, void, (GLenum map, GLfloat *values), (map,values)) \ X(glLoadMatrixf, void, (const GLfloat *m), (m), 291, 131, 4) \
X(glGetPixelMapuiv, void, (GLenum map, GLuint *values), (map,values)) \ X(glLoadName, void, (GLuint name), (name), 198, -1, 4) \
X(glGetPixelMapusv, void, (GLenum map, GLushort *values), (map,values)) \ X(glLogicOp, void, (GLenum opcode), (opcode), 242, -1, 4) \
X(glGetPointerv, void, (GLenum pname, GLvoid* *params), (pname,params)) \ X(glMap1d, void, (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points), (target,u1,u2,stride,order,points), 220, -1, 32) \
X(glGetPolygonStipple, void, (GLubyte *mask), (mask)) \ X(glMap1f, void, (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points), (target,u1,u2,stride,order,points), 221, -1, 24) \
X(glGetSeparableFilter, void, (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span), (target,format,type,row,column,span)) \ 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), 222, -1, 56) \
X(glGetString, const, (GLenum name), (name)) \ 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), 223, -1, 40) \
X(glGetTexEnvfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \ X(glMapGrid1d, void, (GLint un, GLdouble u1, GLdouble u2), (un,u1,u2), 224, -1, 20) \
X(glGetTexEnviv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \ X(glMapGrid1f, void, (GLint un, GLfloat u1, GLfloat u2), (un,u1,u2), 225, -1, 12) \
X(glGetTexGendv, void, (GLenum coord, GLenum pname, GLdouble *params), (coord,pname,params)) \ X(glMapGrid2d, void, (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2), (un,u1,u2,vn,v1,v2), 226, -1, 40) \
X(glGetTexGenfv, void, (GLenum coord, GLenum pname, GLfloat *params), (coord,pname,params)) \ X(glMapGrid2f, void, (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2), (un,u1,u2,vn,v1,v2), 227, -1, 24) \
X(glGetTexGeniv, void, (GLenum coord, GLenum pname, GLint *params), (coord,pname,params)) \ X(glMaterialf, void, (GLenum face, GLenum pname, GLfloat param), (face,pname,param), 169, 112, 12) \
X(glGetTexImage, void, (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels), (target,level,format,type,pixels)) \ X(glMaterialfv, void, (GLenum face, GLenum pname, const GLfloat *params), (face,pname,params), 170, 113, 12) \
X(glGetTexLevelParameterfv, void, (GLenum target, GLint level, GLenum pname, GLfloat *params), (target,level,pname,params)) \ X(glMateriali, void, (GLenum face, GLenum pname, GLint param), (face,pname,param), 171, 114, 12) \
X(glGetTexLevelParameteriv, void, (GLenum target, GLint level, GLenum pname, GLint *params), (target,level,pname,params)) \ X(glMaterialiv, void, (GLenum face, GLenum pname, const GLint *params), (face,pname,params), 172, 115, 12) \
X(glGetTexParameterfv, void, (GLenum target, GLenum pname, GLfloat *params), (target,pname,params)) \ X(glMatrixMode, void, (GLenum mode), (mode), 293, 133, 4) \
X(glGetTexParameteriv, void, (GLenum target, GLenum pname, GLint *params), (target,pname,params)) \ X(glMultMatrixd, void, (const GLdouble *m), (m), 295, 135, 4) \
X(glHint, void, (GLenum target, GLenum mode), (target,mode)) \ X(glMultMatrixf, void, (const GLfloat *m), (m), 294, 134, 4) \
X(glHistogram, void, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink), (target,width,internalformat,sink)) \ X(glNewList, void, (GLuint list, GLenum mode), (list,mode), 0, -1, 8) \
X(glIndexMask, void, (GLuint mask), (mask)) \ X(glNormal3b, void, (GLbyte nx, GLbyte ny, GLbyte nz), (nx,ny,nz), 52, 46, 12) \
X(glIndexPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer)) \ X(glNormal3bv, void, (const GLbyte *v), (v), 53, 47, 4) \
X(glIndexd, void, (GLdouble c), (c)) \ X(glNormal3d, void, (GLdouble nx, GLdouble ny, GLdouble nz), (nx,ny,nz), 54, 48, 24) \
X(glIndexdv, void, (const GLdouble *c), (c)) \ X(glNormal3dv, void, (const GLdouble *v), (v), 55, 49, 4) \
X(glIndexf, void, (GLfloat c), (c)) \ X(glNormal3f, void, (GLfloat nx, GLfloat ny, GLfloat nz), (nx,ny,nz), 56, 50, 12) \
X(glIndexfv, void, (const GLfloat *c), (c)) \ X(glNormal3fv, void, (const GLfloat *v), (v), 57, 51, 4) \
X(glIndexi, void, (GLint c), (c)) \ X(glNormal3i, void, (GLint nx, GLint ny, GLint nz), (nx,ny,nz), 58, 52, 12) \
X(glIndexiv, void, (const GLint *c), (c)) \ X(glNormal3iv, void, (const GLint *v), (v), 59, 53, 4) \
X(glIndexs, void, (GLshort c), (c)) \ X(glNormal3s, void, (GLshort nx, GLshort ny, GLshort nz), (nx,ny,nz), 60, 54, 12) \
X(glIndexsv, void, (const GLshort *c), (c)) \ X(glNormal3sv, void, (const GLshort *v), (v), 61, 55, 4) \
X(glIndexub, void, (GLubyte c), (c)) \ X(glNormalPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer), 318, 156, 12) \
X(glIndexubv, void, (const GLubyte *c), (c)) \ X(glOrtho, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left,right,bottom,top,zNear,zFar), 296, -1, 48) \
X(glInitNames, void, (void), ()) \ X(glPassThrough, void, (GLfloat token), (token), 199, -1, 4) \
X(glInterleavedArrays, void, (GLenum format, GLsizei stride, const GLvoid *pointer), (format,stride,pointer)) \ X(glPixelMapfv, void, (GLenum map, GLint mapsize, const GLfloat *values), (map,mapsize,values), 251, -1, 12) \
X(glIsEnabled, GLboolean, (GLenum cap), (cap)) \ X(glPixelMapuiv, void, (GLenum map, GLint mapsize, const GLuint *values), (map,mapsize,values), 252, -1, 12) \
X(glIsList, GLboolean, (GLuint list), (list)) \ X(glPixelMapusv, void, (GLenum map, GLint mapsize, const GLushort *values), (map,mapsize,values), 253, -1, 12) \
X(glIsTexture, GLboolean, (GLuint texture), (texture)) \ X(glPixelStoref, void, (GLenum pname, GLfloat param), (pname,param), 249, -1, 8) \
X(glLightModelf, void, (GLenum pname, GLfloat param), (pname,param)) \ X(glPixelStorei, void, (GLenum pname, GLint param), (pname,param), 250, -1, 8) \
X(glLightModelfv, void, (GLenum pname, const GLfloat *params), (pname,params)) \ X(glPixelTransferf, void, (GLenum pname, GLfloat param), (pname,param), 247, -1, 8) \
X(glLightModeli, void, (GLenum pname, GLint param), (pname,param)) \ X(glPixelTransferi, void, (GLenum pname, GLint param), (pname,param), 248, -1, 8) \
X(glLightModeliv, void, (GLenum pname, const GLint *params), (pname,params)) \ X(glPixelZoom, void, (GLfloat xfactor, GLfloat yfactor), (xfactor,yfactor), 246, -1, 8) \
X(glLightf, void, (GLenum light, GLenum pname, GLfloat param), (light,pname,param)) \ X(glPointSize, void, (GLfloat size), (size), 173, -1, 4) \
X(glLightfv, void, (GLenum light, GLenum pname, const GLfloat *params), (light,pname,params)) \ X(glPolygonMode, void, (GLenum face, GLenum mode), (face,mode), 174, -1, 8) \
X(glLighti, void, (GLenum light, GLenum pname, GLint param), (light,pname,param)) \ X(glPolygonOffset, void, (GLfloat factor, GLfloat units), (factor,units), 319, 157, 8) \
X(glLightiv, void, (GLenum light, GLenum pname, const GLint *params), (light,pname,params)) \ X(glPolygonStipple, void, (const GLubyte *mask), (mask), 175, -1, 4) \
X(glLineStipple, void, (GLint factor, GLushort pattern), (factor,pattern)) \ X(glPopAttrib, void, (void), (), 218, 118, 0) \
X(glLineWidth, void, (GLfloat width), (width)) \ X(glPopClientAttrib, void, (void), (), 334, 161, 0) \
X(glListBase, void, (GLuint base), (base)) \ X(glPopMatrix, void, (void), (), 297, 136, 0) \
X(glLoadIdentity, void, (void), ()) \ X(glPopName, void, (void), (), 200, -1, 0) \
X(glLoadMatrixd, void, (const GLdouble *m), (m)) \ X(glPrioritizeTextures, void, (GLsizei n, const GLuint *textures, const GLclampf *priorities), (n,textures,priorities), 331, -1, 12) \
X(glLoadMatrixf, void, (const GLfloat *m), (m)) \ X(glPushAttrib, void, (GLbitfield mask), (mask), 219, 119, 4) \
X(glLoadName, void, (GLuint name), (name)) \ X(glPushClientAttrib, void, (GLbitfield mask), (mask), 335, 162, 4) \
X(glLoadTransposeMatrixd, void, (const GLdouble *m), (m)) \ X(glPushMatrix, void, (void), (), 298, 137, 0) \
X(glLoadTransposeMatrixf, void, (const GLfloat *m), (m)) \ X(glPushName, void, (GLuint name), (name), 201, -1, 4) \
X(glLogicOp, void, (GLenum opcode), (opcode)) \ X(glRasterPos2d, void, (GLdouble x, GLdouble y), (x,y), 62, -1, 16) \
X(glMap1d, void, (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points), (target,u1,u2,stride,order,points)) \ X(glRasterPos2dv, void, (const GLdouble *v), (v), 63, -1, 4) \
X(glMap1f, void, (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points), (target,u1,u2,stride,order,points)) \ X(glRasterPos2f, void, (GLfloat x, GLfloat y), (x,y), 64, -1, 8) \
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(glRasterPos2fv, void, (const GLfloat *v), (v), 65, -1, 4) \
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(glRasterPos2i, void, (GLint x, GLint y), (x,y), 66, -1, 8) \
X(glMapGrid1d, void, (GLint un, GLdouble u1, GLdouble u2), (un,u1,u2)) \ X(glRasterPos2iv, void, (const GLint *v), (v), 67, -1, 4) \
X(glMapGrid1f, void, (GLint un, GLfloat u1, GLfloat u2), (un,u1,u2)) \ X(glRasterPos2s, void, (GLshort x, GLshort y), (x,y), 68, -1, 8) \
X(glMapGrid2d, void, (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2), (un,u1,u2,vn,v1,v2)) \ X(glRasterPos2sv, void, (const GLshort *v), (v), 69, -1, 4) \
X(glMapGrid2f, void, (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2), (un,u1,u2,vn,v1,v2)) \ X(glRasterPos3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z), 70, -1, 24) \
X(glMaterialf, void, (GLenum face, GLenum pname, GLfloat param), (face,pname,param)) \ X(glRasterPos3dv, void, (const GLdouble *v), (v), 71, -1, 4) \
X(glMaterialfv, void, (GLenum face, GLenum pname, const GLfloat *params), (face,pname,params)) \ X(glRasterPos3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z), 72, -1, 12) \
X(glMateriali, void, (GLenum face, GLenum pname, GLint param), (face,pname,param)) \ X(glRasterPos3fv, void, (const GLfloat *v), (v), 73, -1, 4) \
X(glMaterialiv, void, (GLenum face, GLenum pname, const GLint *params), (face,pname,params)) \ X(glRasterPos3i, void, (GLint x, GLint y, GLint z), (x,y,z), 74, -1, 12) \
X(glMatrixMode, void, (GLenum mode), (mode)) \ X(glRasterPos3iv, void, (const GLint *v), (v), 75, -1, 4) \
X(glMinmax, void, (GLenum target, GLenum internalformat, GLboolean sink), (target,internalformat,sink)) \ X(glRasterPos3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z), 76, -1, 12) \
X(glMultMatrixd, void, (const GLdouble *m), (m)) \ X(glRasterPos3sv, void, (const GLshort *v), (v), 77, -1, 4) \
X(glMultMatrixf, void, (const GLfloat *m), (m)) \ X(glRasterPos4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x,y,z,w), 78, -1, 32) \
X(glMultTransposeMatrixd, void, (const GLdouble *m), (m)) \ X(glRasterPos4dv, void, (const GLdouble *v), (v), 79, -1, 4) \
X(glMultTransposeMatrixf, void, (const GLfloat *m), (m)) \ X(glRasterPos4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x,y,z,w), 80, -1, 16) \
X(glMultiDrawArrays, void, (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount), (mode,first,count,primcount)) \ X(glRasterPos4fv, void, (const GLfloat *v), (v), 81, -1, 4) \
X(glMultiDrawElements, void, (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount), (mode,count,type,indices,primcount)) \ X(glRasterPos4i, void, (GLint x, GLint y, GLint z, GLint w), (x,y,z,w), 82, -1, 16) \
X(glMultiTexCoord1d, void, (GLenum target, GLdouble s), (target,s)) \ X(glRasterPos4iv, void, (const GLint *v), (v), 83, -1, 4) \
X(glMultiTexCoord1dv, void, (GLenum target, const GLdouble *v), (target,v)) \ X(glRasterPos4s, void, (GLshort x, GLshort y, GLshort z, GLshort w), (x,y,z,w), 84, -1, 16) \
X(glMultiTexCoord1f, void, (GLenum target, GLfloat s), (target,s)) \ X(glRasterPos4sv, void, (const GLshort *v), (v), 85, -1, 4) \
X(glMultiTexCoord1fv, void, (GLenum target, const GLfloat *v), (target,v)) \ X(glReadBuffer, void, (GLenum mode), (mode), 254, -1, 4) \
X(glMultiTexCoord1i, void, (GLenum target, GLint s), (target,s)) \ X(glReadPixels, void, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels), (x,y,width,height,format,type,pixels), 256, -1, 28) \
X(glMultiTexCoord1iv, void, (GLenum target, const GLint *v), (target,v)) \ X(glRectd, void, (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2), (x1,y1,x2,y2), 86, -1, 32) \
X(glMultiTexCoord1s, void, (GLenum target, GLshort s), (target,s)) \ X(glRectdv, void, (const GLdouble *v1, const GLdouble *v2), (v1,v2), 87, -1, 8) \
X(glMultiTexCoord1sv, void, (GLenum target, const GLshort *v), (target,v)) \ X(glRectf, void, (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2), (x1,y1,x2,y2), 88, -1, 16) \
X(glMultiTexCoord2d, void, (GLenum target, GLdouble s, GLdouble t), (target,s,t)) \ X(glRectfv, void, (const GLfloat *v1, const GLfloat *v2), (v1,v2), 89, -1, 8) \
X(glMultiTexCoord2dv, void, (GLenum target, const GLdouble *v), (target,v)) \ X(glRecti, void, (GLint x1, GLint y1, GLint x2, GLint y2), (x1,y1,x2,y2), 90, -1, 16) \
X(glMultiTexCoord2f, void, (GLenum target, GLfloat s, GLfloat t), (target,s,t)) \ X(glRectiv, void, (const GLint *v1, const GLint *v2), (v1,v2), 91, -1, 8) \
X(glMultiTexCoord2fv, void, (GLenum target, const GLfloat *v), (target,v)) \ X(glRects, void, (GLshort x1, GLshort y1, GLshort x2, GLshort y2), (x1,y1,x2,y2), 92, -1, 16) \
X(glMultiTexCoord2i, void, (GLenum target, GLint s, GLint t), (target,s,t)) \ X(glRectsv, void, (const GLshort *v1, const GLshort *v2), (v1,v2), 93, -1, 8) \
X(glMultiTexCoord2iv, void, (GLenum target, const GLint *v), (target,v)) \ X(glRenderMode, GLint, (GLenum mode), (mode), 196, -1, 4) \
X(glMultiTexCoord2s, void, (GLenum target, GLshort s, GLshort t), (target,s,t)) \ X(glRotated, void, (GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (angle,x,y,z), 299, 138, 32) \
X(glMultiTexCoord2sv, void, (GLenum target, const GLshort *v), (target,v)) \ X(glRotatef, void, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (angle,x,y,z), 300, 139, 16) \
X(glMultiTexCoord3d, void, (GLenum target, GLdouble s, GLdouble t, GLdouble r), (target,s,t,r)) \ X(glScaled, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z), 301, 140, 24) \
X(glMultiTexCoord3dv, void, (GLenum target, const GLdouble *v), (target,v)) \ X(glScalef, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z), 302, 141, 12) \
X(glMultiTexCoord3f, void, (GLenum target, GLfloat s, GLfloat t, GLfloat r), (target,s,t,r)) \ X(glScissor, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height), 176, -1, 16) \
X(glMultiTexCoord3fv, void, (GLenum target, const GLfloat *v), (target,v)) \ X(glSelectBuffer, void, (GLsizei size, GLuint *buffer), (size,buffer), 195, -1, 8) \
X(glMultiTexCoord3i, void, (GLenum target, GLint s, GLint t, GLint r), (target,s,t,r)) \ X(glShadeModel, void, (GLenum mode), (mode), 177, -1, 4) \
X(glMultiTexCoord3iv, void, (GLenum target, const GLint *v), (target,v)) \ X(glStencilFunc, void, (GLenum func, GLint ref, GLuint mask), (func,ref,mask), 243, -1, 12) \
X(glMultiTexCoord3s, void, (GLenum target, GLshort s, GLshort t, GLshort r), (target,s,t,r)) \ X(glStencilMask, void, (GLuint mask), (mask), 209, -1, 4) \
X(glMultiTexCoord3sv, void, (GLenum target, const GLshort *v), (target,v)) \ X(glStencilOp, void, (GLenum fail, GLenum zfail, GLenum zpass), (fail,zfail,zpass), 244, -1, 12) \
X(glMultiTexCoord4d, void, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q), (target,s,t,r,q)) \ X(glTexCoord1d, void, (GLdouble s), (s), 94, 56, 8) \
X(glMultiTexCoord4dv, void, (GLenum target, const GLdouble *v), (target,v)) \ X(glTexCoord1dv, void, (const GLdouble *v), (v), 95, 57, 4) \
X(glMultiTexCoord4f, void, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q), (target,s,t,r,q)) \ X(glTexCoord1f, void, (GLfloat s), (s), 96, 58, 4) \
X(glMultiTexCoord4fv, void, (GLenum target, const GLfloat *v), (target,v)) \ X(glTexCoord1fv, void, (const GLfloat *v), (v), 97, 59, 4) \
X(glMultiTexCoord4i, void, (GLenum target, GLint s, GLint t, GLint r, GLint q), (target,s,t,r,q)) \ X(glTexCoord1i, void, (GLint s), (s), 98, 60, 4) \
X(glMultiTexCoord4iv, void, (GLenum target, const GLint *v), (target,v)) \ X(glTexCoord1iv, void, (const GLint *v), (v), 99, 61, 4) \
X(glMultiTexCoord4s, void, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q), (target,s,t,r,q)) \ X(glTexCoord1s, void, (GLshort s), (s), 100, 62, 4) \
X(glMultiTexCoord4sv, void, (GLenum target, const GLshort *v), (target,v)) \ X(glTexCoord1sv, void, (const GLshort *v), (v), 101, 63, 4) \
X(glNewList, void, (GLuint list, GLenum mode), (list,mode)) \ X(glTexCoord2d, void, (GLdouble s, GLdouble t), (s,t), 102, 64, 16) \
X(glNormal3b, void, (GLbyte nx, GLbyte ny, GLbyte nz), (nx,ny,nz)) \ X(glTexCoord2dv, void, (const GLdouble *v), (v), 103, 65, 4) \
X(glNormal3bv, void, (const GLbyte *v), (v)) \ X(glTexCoord2f, void, (GLfloat s, GLfloat t), (s,t), 104, 66, 8) \
X(glNormal3d, void, (GLdouble nx, GLdouble ny, GLdouble nz), (nx,ny,nz)) \ X(glTexCoord2fv, void, (const GLfloat *v), (v), 105, 67, 4) \
X(glNormal3dv, void, (const GLdouble *v), (v)) \ X(glTexCoord2i, void, (GLint s, GLint t), (s,t), 106, 68, 8) \
X(glNormal3f, void, (GLfloat nx, GLfloat ny, GLfloat nz), (nx,ny,nz)) \ X(glTexCoord2iv, void, (const GLint *v), (v), 107, 69, 4) \
X(glNormal3fv, void, (const GLfloat *v), (v)) \ X(glTexCoord2s, void, (GLshort s, GLshort t), (s,t), 108, 70, 8) \
X(glNormal3i, void, (GLint nx, GLint ny, GLint nz), (nx,ny,nz)) \ X(glTexCoord2sv, void, (const GLshort *v), (v), 109, 71, 4) \
X(glNormal3iv, void, (const GLint *v), (v)) \ X(glTexCoord3d, void, (GLdouble s, GLdouble t, GLdouble r), (s,t,r), 110, 72, 24) \
X(glNormal3s, void, (GLshort nx, GLshort ny, GLshort nz), (nx,ny,nz)) \ X(glTexCoord3dv, void, (const GLdouble *v), (v), 111, 73, 4) \
X(glNormal3sv, void, (const GLshort *v), (v)) \ X(glTexCoord3f, void, (GLfloat s, GLfloat t, GLfloat r), (s,t,r), 112, 74, 12) \
X(glNormalPointer, void, (GLenum type, GLsizei stride, const GLvoid *pointer), (type,stride,pointer)) \ X(glTexCoord3fv, void, (const GLfloat *v), (v), 113, 75, 4) \
X(glOrtho, void, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left,right,bottom,top,zNear,zFar)) \ X(glTexCoord3i, void, (GLint s, GLint t, GLint r), (s,t,r), 114, 76, 12) \
X(glPassThrough, void, (GLfloat token), (token)) \ X(glTexCoord3iv, void, (const GLint *v), (v), 115, 77, 4) \
X(glPixelMapfv, void, (GLenum map, GLint mapsize, const GLfloat *values), (map,mapsize,values)) \ X(glTexCoord3s, void, (GLshort s, GLshort t, GLshort r), (s,t,r), 116, 78, 12) \
X(glPixelMapuiv, void, (GLenum map, GLint mapsize, const GLuint *values), (map,mapsize,values)) \ X(glTexCoord3sv, void, (const GLshort *v), (v), 117, 79, 4) \
X(glPixelMapusv, void, (GLenum map, GLint mapsize, const GLushort *values), (map,mapsize,values)) \ X(glTexCoord4d, void, (GLdouble s, GLdouble t, GLdouble r, GLdouble q), (s,t,r,q), 118, 80, 32) \
X(glPixelStoref, void, (GLenum pname, GLfloat param), (pname,param)) \ X(glTexCoord4dv, void, (const GLdouble *v), (v), 119, 81, 4) \
X(glPixelStorei, void, (GLenum pname, GLint param), (pname,param)) \ X(glTexCoord4f, void, (GLfloat s, GLfloat t, GLfloat r, GLfloat q), (s,t,r,q), 120, 82, 16) \
X(glPixelTransferf, void, (GLenum pname, GLfloat param), (pname,param)) \ X(glTexCoord4fv, void, (const GLfloat *v), (v), 121, 83, 4) \
X(glPixelTransferi, void, (GLenum pname, GLint param), (pname,param)) \ X(glTexCoord4i, void, (GLint s, GLint t, GLint r, GLint q), (s,t,r,q), 122, 84, 16) \
X(glPixelZoom, void, (GLfloat xfactor, GLfloat yfactor), (xfactor,yfactor)) \ X(glTexCoord4iv, void, (const GLint *v), (v), 123, 85, 4) \
X(glPointParameterf, void, (GLenum pname, GLfloat param), (pname,param)) \ X(glTexCoord4s, void, (GLshort s, GLshort t, GLshort r, GLshort q), (s,t,r,q), 124, 86, 16) \
X(glPointParameterfv, void, (GLenum pname, const GLfloat *params), (pname,params)) \ X(glTexCoord4sv, void, (const GLshort *v), (v), 125, 87, 4) \
X(glPointParameteri, void, (GLenum pname, GLint param), (pname,param)) \ X(glTexCoordPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer), 320, 158, 16) \
X(glPointParameteriv, void, (GLenum pname, const GLint *params), (pname,params)) \ X(glTexEnvf, void, (GLenum target, GLenum pname, GLfloat param), (target,pname,param), 184, -1, 12) \
X(glPointSize, void, (GLfloat size), (size)) \ X(glTexEnvfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params), 185, -1, 12) \
X(glPolygonMode, void, (GLenum face, GLenum mode), (face,mode)) \ X(glTexEnvi, void, (GLenum target, GLenum pname, GLint param), (target,pname,param), 186, -1, 12) \
X(glPolygonOffset, void, (GLfloat factor, GLfloat units), (factor,units)) \ X(glTexEnviv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params), 187, -1, 12) \
X(glPolygonStipple, void, (const GLubyte *mask), (mask)) \ X(glTexGend, void, (GLenum coord, GLenum pname, GLdouble param), (coord,pname,param), 188, -1, 16) \
X(glPopAttrib, void, (void), ()) \ X(glTexGendv, void, (GLenum coord, GLenum pname, const GLdouble *params), (coord,pname,params), 189, -1, 12) \
X(glPopClientAttrib, void, (void), ()) \ X(glTexGenf, void, (GLenum coord, GLenum pname, GLfloat param), (coord,pname,param), 190, -1, 12) \
X(glPopMatrix, void, (void), ()) \ X(glTexGenfv, void, (GLenum coord, GLenum pname, const GLfloat *params), (coord,pname,params), 191, -1, 12) \
X(glPopName, void, (void), ()) \ X(glTexGeni, void, (GLenum coord, GLenum pname, GLint param), (coord,pname,param), 192, -1, 12) \
X(glPrioritizeTextures, void, (GLsizei n, const GLuint *textures, const GLclampf *priorities), (n,textures,priorities)) \ X(glTexGeniv, void, (GLenum coord, GLenum pname, const GLint *params), (coord,pname,params), 193, -1, 12) \
X(glPushAttrib, void, (GLbitfield mask), (mask)) \ 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), 182, -1, 32) \
X(glPushClientAttrib, void, (GLbitfield mask), (mask)) \ 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), 183, -1, 36) \
X(glPushMatrix, void, (void), ()) \ X(glTexParameterf, void, (GLenum target, GLenum pname, GLfloat param), (target,pname,param), 178, -1, 12) \
X(glPushName, void, (GLuint name), (name)) \ X(glTexParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params), 179, -1, 12) \
X(glRasterPos2d, void, (GLdouble x, GLdouble y), (x,y)) \ X(glTexParameteri, void, (GLenum target, GLenum pname, GLint param), (target,pname,param), 180, -1, 12) \
X(glRasterPos2dv, void, (const GLdouble *v), (v)) \ X(glTexParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params), 181, -1, 12) \
X(glRasterPos2f, void, (GLfloat x, GLfloat y), (x,y)) \ 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), 332, -1, 28) \
X(glRasterPos2fv, void, (const GLfloat *v), (v)) \ 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), 333, -1, 36) \
X(glRasterPos2i, void, (GLint x, GLint y), (x,y)) \ X(glTranslated, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z), 303, 142, 24) \
X(glRasterPos2iv, void, (const GLint *v), (v)) \ X(glTranslatef, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z), 304, 143, 12) \
X(glRasterPos2s, void, (GLshort x, GLshort y), (x,y)) \ X(glVertex2d, void, (GLdouble x, GLdouble y), (x,y), 126, 88, 16) \
X(glRasterPos2sv, void, (const GLshort *v), (v)) \ X(glVertex2dv, void, (const GLdouble *v), (v), 127, 89, 4) \
X(glRasterPos3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \ X(glVertex2f, void, (GLfloat x, GLfloat y), (x,y), 128, 90, 8) \
X(glRasterPos3dv, void, (const GLdouble *v), (v)) \ X(glVertex2fv, void, (const GLfloat *v), (v), 129, 91, 4) \
X(glRasterPos3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \ X(glVertex2i, void, (GLint x, GLint y), (x,y), 130, 92, 8) \
X(glRasterPos3fv, void, (const GLfloat *v), (v)) \ X(glVertex2iv, void, (const GLint *v), (v), 131, 93, 4) \
X(glRasterPos3i, void, (GLint x, GLint y, GLint z), (x,y,z)) \ X(glVertex2s, void, (GLshort x, GLshort y), (x,y), 132, 94, 8) \
X(glRasterPos3iv, void, (const GLint *v), (v)) \ X(glVertex2sv, void, (const GLshort *v), (v), 133, 95, 4) \
X(glRasterPos3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z)) \ X(glVertex3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z), 134, 96, 24) \
X(glRasterPos3sv, void, (const GLshort *v), (v)) \ X(glVertex3dv, void, (const GLdouble *v), (v), 135, 97, 4) \
X(glRasterPos4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x,y,z,w)) \ X(glVertex3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z), 136, 98, 12) \
X(glRasterPos4dv, void, (const GLdouble *v), (v)) \ X(glVertex3fv, void, (const GLfloat *v), (v), 137, 99, 4) \
X(glRasterPos4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x,y,z,w)) \ X(glVertex3i, void, (GLint x, GLint y, GLint z), (x,y,z), 138, 100, 12) \
X(glRasterPos4fv, void, (const GLfloat *v), (v)) \ X(glVertex3iv, void, (const GLint *v), (v), 139, 101, 4) \
X(glRasterPos4i, void, (GLint x, GLint y, GLint z, GLint w), (x,y,z,w)) \ X(glVertex3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z), 140, 102, 12) \
X(glRasterPos4iv, void, (const GLint *v), (v)) \ X(glVertex3sv, void, (const GLshort *v), (v), 141, 103, 4) \
X(glRasterPos4s, void, (GLshort x, GLshort y, GLshort z, GLshort w), (x,y,z,w)) \ X(glVertex4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x,y,z,w), 142, 104, 32) \
X(glRasterPos4sv, void, (const GLshort *v), (v)) \ X(glVertex4dv, void, (const GLdouble *v), (v), 143, 105, 4) \
X(glReadBuffer, void, (GLenum mode), (mode)) \ X(glVertex4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x,y,z,w), 144, 106, 16) \
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(glVertex4fv, void, (const GLfloat *v), (v), 145, 107, 4) \
X(glRectd, void, (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2), (x1,y1,x2,y2)) \ X(glVertex4i, void, (GLint x, GLint y, GLint z, GLint w), (x,y,z,w), 146, 108, 16) \
X(glRectdv, void, (const GLdouble *v1, const GLdouble *v2), (v1,v2)) \ X(glVertex4iv, void, (const GLint *v), (v), 147, 109, 4) \
X(glRectf, void, (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2), (x1,y1,x2,y2)) \ X(glVertex4s, void, (GLshort x, GLshort y, GLshort z, GLshort w), (x,y,z,w), 148, 110, 16) \
X(glRectfv, void, (const GLfloat *v1, const GLfloat *v2), (v1,v2)) \ X(glVertex4sv, void, (const GLshort *v), (v), 149, 111, 4) \
X(glRecti, void, (GLint x1, GLint y1, GLint x2, GLint y2), (x1,y1,x2,y2)) \ X(glVertexPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer), 321, 159, 16) \
X(glRectiv, void, (const GLint *v1, const GLint *v2), (v1,v2)) \ X(glViewport, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height), 305, -1, 16) \
X(glRects, void, (GLshort x1, GLshort y1, GLshort x2, GLshort y2), (x1,y1,x2,y2)) \
X(glRectsv, void, (const GLshort *v1, const GLshort *v2), (v1,v2)) \
X(glReleaseFlushHold, GLenum, (GLuint id), (id)) \ /* EOF */
X(glRenderMode, GLint, (GLenum mode), (mode)) \
X(glResetHistogram, void, (GLenum target), (target)) \
X(glResetMinmax, void, (GLenum target), (target)) \
X(glRotated, void, (GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (angle,x,y,z)) \
X(glRotatef, void, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (angle,x,y,z)) \
X(glSampleCoverage, void, (GLclampf value, GLboolean invert), (value,invert)) \
X(glScaled, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glScalef, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glScissor, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glSecondaryColor3b, void, (GLbyte red, GLbyte green, GLbyte blue), (red,green,blue)) \
X(glSecondaryColor3bv, void, (const GLbyte *v), (v)) \
X(glSecondaryColor3d, void, (GLdouble red, GLdouble green, GLdouble blue), (red,green,blue)) \
X(glSecondaryColor3dv, void, (const GLdouble *v), (v)) \
X(glSecondaryColor3f, void, (GLfloat red, GLfloat green, GLfloat blue), (red,green,blue)) \
X(glSecondaryColor3fv, void, (const GLfloat *v), (v)) \
X(glSecondaryColor3i, void, (GLint red, GLint green, GLint blue), (red,green,blue)) \
X(glSecondaryColor3iv, void, (const GLint *v), (v)) \
X(glSecondaryColor3s, void, (GLshort red, GLshort green, GLshort blue), (red,green,blue)) \
X(glSecondaryColor3sv, void, (const GLshort *v), (v)) \
X(glSecondaryColor3ub, void, (GLubyte red, GLubyte green, GLubyte blue), (red,green,blue)) \
X(glSecondaryColor3ubv, void, (const GLubyte *v), (v)) \
X(glSecondaryColor3ui, void, (GLuint red, GLuint green, GLuint blue), (red,green,blue)) \
X(glSecondaryColor3uiv, void, (const GLuint *v), (v)) \
X(glSecondaryColor3us, void, (GLushort red, GLushort green, GLushort blue), (red,green,blue)) \
X(glSecondaryColor3usv, void, (const GLushort *v), (v)) \
X(glSecondaryColorPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glSelectBuffer, void, (GLsizei size, GLuint *buffer), (size,buffer)) \
X(glSeparableFilter2D, void, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column), (target,internalformat,width,height,format,type,row,column)) \
X(glShadeModel, void, (GLenum mode), (mode)) \
X(glStencilFunc, void, (GLenum func, GLint ref, GLuint mask), (func,ref,mask)) \
X(glStencilMask, void, (GLuint mask), (mask)) \
X(glStencilOp, void, (GLenum fail, GLenum zfail, GLenum zpass), (fail,zfail,zpass)) \
X(glTexCoord1d, void, (GLdouble s), (s)) \
X(glTexCoord1dv, void, (const GLdouble *v), (v)) \
X(glTexCoord1f, void, (GLfloat s), (s)) \
X(glTexCoord1fv, void, (const GLfloat *v), (v)) \
X(glTexCoord1i, void, (GLint s), (s)) \
X(glTexCoord1iv, void, (const GLint *v), (v)) \
X(glTexCoord1s, void, (GLshort s), (s)) \
X(glTexCoord1sv, void, (const GLshort *v), (v)) \
X(glTexCoord2d, void, (GLdouble s, GLdouble t), (s,t)) \
X(glTexCoord2dv, void, (const GLdouble *v), (v)) \
X(glTexCoord2f, void, (GLfloat s, GLfloat t), (s,t)) \
X(glTexCoord2fv, void, (const GLfloat *v), (v)) \
X(glTexCoord2i, void, (GLint s, GLint t), (s,t)) \
X(glTexCoord2iv, void, (const GLint *v), (v)) \
X(glTexCoord2s, void, (GLshort s, GLshort t), (s,t)) \
X(glTexCoord2sv, void, (const GLshort *v), (v)) \
X(glTexCoord3d, void, (GLdouble s, GLdouble t, GLdouble r), (s,t,r)) \
X(glTexCoord3dv, void, (const GLdouble *v), (v)) \
X(glTexCoord3f, void, (GLfloat s, GLfloat t, GLfloat r), (s,t,r)) \
X(glTexCoord3fv, void, (const GLfloat *v), (v)) \
X(glTexCoord3i, void, (GLint s, GLint t, GLint r), (s,t,r)) \
X(glTexCoord3iv, void, (const GLint *v), (v)) \
X(glTexCoord3s, void, (GLshort s, GLshort t, GLshort r), (s,t,r)) \
X(glTexCoord3sv, void, (const GLshort *v), (v)) \
X(glTexCoord4d, void, (GLdouble s, GLdouble t, GLdouble r, GLdouble q), (s,t,r,q)) \
X(glTexCoord4dv, void, (const GLdouble *v), (v)) \
X(glTexCoord4f, void, (GLfloat s, GLfloat t, GLfloat r, GLfloat q), (s,t,r,q)) \
X(glTexCoord4fv, void, (const GLfloat *v), (v)) \
X(glTexCoord4i, void, (GLint s, GLint t, GLint r, GLint q), (s,t,r,q)) \
X(glTexCoord4iv, void, (const GLint *v), (v)) \
X(glTexCoord4s, void, (GLshort s, GLshort t, GLshort r, GLshort q), (s,t,r,q)) \
X(glTexCoord4sv, void, (const GLshort *v), (v)) \
X(glTexCoordPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glTexEnvf, void, (GLenum target, GLenum pname, GLfloat param), (target,pname,param)) \
X(glTexEnvfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \
X(glTexEnvi, void, (GLenum target, GLenum pname, GLint param), (target,pname,param)) \
X(glTexEnviv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \
X(glTexGend, void, (GLenum coord, GLenum pname, GLdouble param), (coord,pname,param)) \
X(glTexGendv, void, (GLenum coord, GLenum pname, const GLdouble *params), (coord,pname,params)) \
X(glTexGenf, void, (GLenum coord, GLenum pname, GLfloat param), (coord,pname,param)) \
X(glTexGenfv, void, (GLenum coord, GLenum pname, const GLfloat *params), (coord,pname,params)) \
X(glTexGeni, void, (GLenum coord, GLenum pname, GLint param), (coord,pname,param)) \
X(glTexGeniv, void, (GLenum coord, GLenum pname, const GLint *params), (coord,pname,params)) \
X(glTexImage1D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels), (target,level,internalformat,width,border,format,type,pixels)) \
X(glTexImage2D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels), (target,level,internalformat,width,height,border,format,type,pixels)) \
X(glTexImage3D, void, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels), (target,level,internalformat,width,height,depth,border,format,type,pixels)) \
X(glTexParameterf, void, (GLenum target, GLenum pname, GLfloat param), (target,pname,param)) \
X(glTexParameterfv, void, (GLenum target, GLenum pname, const GLfloat *params), (target,pname,params)) \
X(glTexParameteri, void, (GLenum target, GLenum pname, GLint param), (target,pname,param)) \
X(glTexParameteriv, void, (GLenum target, GLenum pname, const GLint *params), (target,pname,params)) \
X(glTexSubImage1D, void, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels), (target,level,xoffset,width,format,type,pixels)) \
X(glTexSubImage2D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels), (target,level,xoffset,yoffset,width,height,format,type,pixels)) \
X(glTexSubImage3D, void, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels), (target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)) \
X(glTranslated, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glTranslatef, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glValidBackBufferHintAutodesk, GLboolean, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glVertex2d, void, (GLdouble x, GLdouble y), (x,y)) \
X(glVertex2dv, void, (const GLdouble *v), (v)) \
X(glVertex2f, void, (GLfloat x, GLfloat y), (x,y)) \
X(glVertex2fv, void, (const GLfloat *v), (v)) \
X(glVertex2i, void, (GLint x, GLint y), (x,y)) \
X(glVertex2iv, void, (const GLint *v), (v)) \
X(glVertex2s, void, (GLshort x, GLshort y), (x,y)) \
X(glVertex2sv, void, (const GLshort *v), (v)) \
X(glVertex3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glVertex3dv, void, (const GLdouble *v), (v)) \
X(glVertex3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glVertex3fv, void, (const GLfloat *v), (v)) \
X(glVertex3i, void, (GLint x, GLint y, GLint z), (x,y,z)) \
X(glVertex3iv, void, (const GLint *v), (v)) \
X(glVertex3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z)) \
X(glVertex3sv, void, (const GLshort *v), (v)) \
X(glVertex4d, void, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x,y,z,w)) \
X(glVertex4dv, void, (const GLdouble *v), (v)) \
X(glVertex4f, void, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x,y,z,w)) \
X(glVertex4fv, void, (const GLfloat *v), (v)) \
X(glVertex4i, void, (GLint x, GLint y, GLint z, GLint w), (x,y,z,w)) \
X(glVertex4iv, void, (const GLint *v), (v)) \
X(glVertex4s, void, (GLshort x, GLshort y, GLshort z, GLshort w), (x,y,z,w)) \
X(glVertex4sv, void, (const GLshort *v), (v)) \
X(glVertexPointer, void, (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer), (size,type,stride,pointer)) \
X(glViewport, void, (GLint x, GLint y, GLsizei width, GLsizei height), (x,y,width,height)) \
X(glWindowBackBufferHintAutodesk, void, (void), ()) \
X(glWindowPos2d, void, (GLdouble x, GLdouble y), (x,y)) \
X(glWindowPos2dv, void, (const GLdouble *p), (p)) \
X(glWindowPos2f, void, (GLfloat x, GLfloat y), (x,y)) \
X(glWindowPos2fv, void, (const GLfloat *p), (p)) \
X(glWindowPos2i, void, (GLint x, GLint y), (x,y)) \
X(glWindowPos2iv, void, (const GLint *p), (p)) \
X(glWindowPos2s, void, (GLshort x, GLshort y), (x,y)) \
X(glWindowPos2sv, void, (const GLshort *p), (p)) \
X(glWindowPos3d, void, (GLdouble x, GLdouble y, GLdouble z), (x,y,z)) \
X(glWindowPos3dv, void, (const GLdouble *p), (p)) \
X(glWindowPos3f, void, (GLfloat x, GLfloat y, GLfloat z), (x,y,z)) \
X(glWindowPos3fv, void, (const GLfloat *p), (p)) \
X(glWindowPos3i, void, (GLint x, GLint y, GLint z), (x,y,z)) \
X(glWindowPos3iv, void, (const GLint *p), (p)) \
X(glWindowPos3s, void, (GLshort x, GLshort y, GLshort z), (x,y,z)) \
X(glWindowPos3sv, void, (const GLshort *p), (p))

View file

@ -1,4 +1,4 @@
// icdtable.h /* icdtable.h */
#ifndef OPENGL32_PRIVATE_ICDTABLE_H #ifndef OPENGL32_PRIVATE_ICDTABLE_H
#define OPENGL32_PRIVATE_ICDTABLE_H #define OPENGL32_PRIVATE_ICDTABLE_H
@ -12,10 +12,12 @@ enum icdoffsets_e
ICDIDX_COUNT ICDIDX_COUNT
}; };
struct ICDTable typedef struct tagICDTable
{ {
DWORD num_funcs; // Normally 336 (0x150) DWORD num_funcs; /* Normally 336 (0x150) */
PROC dispatch_table[812]; PROC dispatch_table[812];
}; } ICDTable;
#endif//OPENGL32_PRIVATE_ICDTABLE_H #endif /* OPENGL32_PRIVATE_ICDTABLE_H */
/* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: opengl32.c,v 1.9 2004/02/05 04:28:11 royce Exp $ /* $Id: opengl32.c,v 1.10 2004/02/06 13:59:13 royce Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -12,9 +12,10 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <winreg.h> #include <winreg.h>
#include <ntos/types.h>
#include <napi/teb.h>
#include <string.h> #include <string.h>
//#include <GL/gl.h>
#include "opengl32.h" #include "opengl32.h"
/* function prototypes */ /* function prototypes */
@ -26,12 +27,12 @@ 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, typeargs, args) #func, #define X(func, ret, typeargs, args) #func,
GLFUNCS_MACRO GLFUNCS_MACRO
#undef X #undef X
}; };*/
DWORD OPENGL32_tls; DWORD OPENGL32_tls;
GLPROCESSDATA OPENGL32_processdata; GLPROCESSDATA OPENGL32_processdata;
@ -54,9 +55,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;
SECURITY_ATTRIBUTES attrib = { .nLength = sizeof (SECURITY_ATTRIBUTES), ICDTable *dispatchTable = NULL;
.lpSecurityDescriptor = NULL, TEB *teb = NULL;
.bInheritHandle = TRUE }; SECURITY_ATTRIBUTES attrib = { sizeof (SECURITY_ATTRIBUTES), /* nLength */
NULL, /* lpSecurityDescriptor */
TRUE /* bInheritHandle */ };
DBGPRINT( "Info: Called!" ); DBGPRINT( "Info: Called!" );
switch ( Reason ) switch ( Reason )
@ -92,15 +95,36 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
/* The attached process creates a new thread. */ /* The attached process creates a new thread. */
case DLL_THREAD_ATTACH: case DLL_THREAD_ATTACH:
//lpData = (GLTHREADDATA*)LocalAlloc(LPTR, sizeof(GLTHREADDATA)); dispatchTable = (ICDTable*)HeapAlloc( GetProcessHeap(),
HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,
sizeof (ICDTable) );
if (dispatchTable == NULL)
{
DBGPRINT( "Error: Couldn't allocate GL dispatch table" );
return FALSE;
}
lpData = (GLTHREADDATA*)HeapAlloc( GetProcessHeap(), lpData = (GLTHREADDATA*)HeapAlloc( GetProcessHeap(),
HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY,
sizeof (GLTHREADDATA) ); sizeof (GLTHREADDATA) );
if (lpData == NULL) if (lpData == NULL)
{ {
DBGPRINT( "Error: Couldn't allocate GLTHREADDATA" ); DBGPRINT( "Error: Couldn't allocate GLTHREADDATA" );
HeapFree( GetProcessHeap(), 0, dispatchTable );
return FALSE; return FALSE;
} }
teb = NtCurrentTeb();
/* initialize dispatch table with empty functions */
#define X(func, ret, typeargs, args, icdidx, tebidx, stack) \
dispatchTable->dispatch_table[icdidx] = (PROC)glEmptyFunc##stack; \
if (tebidx >= 0) \
teb->glDispatchTable[tebidx] = (PVOID)glEmptyFunc##stack;
GLFUNCS_MACRO
#undef X
teb->glTable = dispatchTable->dispatch_table;
TlsSetValue( OPENGL32_tls, lpData ); TlsSetValue( OPENGL32_tls, lpData );
break; break;
@ -126,17 +150,10 @@ 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
* NOTES: Only call this when you hold the driver_mutex
*/ */
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
@ -146,26 +163,15 @@ 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
* NOTES: Only call this when you hold the driver_mutex
*/ */
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
@ -182,10 +188,6 @@ 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() );
} }
@ -224,7 +226,7 @@ static GLDRIVERDATA *OPENGL32_LoadDriver( LPCWSTR driver )
DBGPRINT( "Info: Dll = %ws", icd->dll ); DBGPRINT( "Info: Dll = %ws", icd->dll );
DBGPRINT( "Info: Version = 0x%08x", icd->version ); DBGPRINT( "Info: Version = 0x%08x", icd->version );
DBGPRINT( "Info: DriverVersion = 0x%08x", icd->driverVersion ); DBGPRINT( "Info: DriverVersion = 0x%08x", icd->driver_version );
DBGPRINT( "Info: Flags = 0x%08x", icd->flags ); DBGPRINT( "Info: Flags = 0x%08x", icd->flags );
/* load/initialize ICD */ /* load/initialize ICD */
@ -363,12 +365,25 @@ GLDRIVERDATA *OPENGL32_LoadICD ( LPCWSTR driver )
{ {
GLDRIVERDATA *icd; GLDRIVERDATA *icd;
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.driver_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return NULL; /* FIXME: do we have to expect such an error and handle it? */
}
/* look if ICD is already loaded */ /* look if ICD is already loaded */
for (icd = OPENGL32_processdata.driver_list; icd; icd = icd->next) for (icd = OPENGL32_processdata.driver_list; icd; icd = icd->next)
{ {
if (!_wcsicmp( driver, icd->driver_name )) /* found */ if (!_wcsicmp( driver, icd->driver_name )) /* found */
{ {
icd->refcount++; icd->refcount++;
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
return icd; return icd;
} }
} }
@ -377,6 +392,11 @@ GLDRIVERDATA *OPENGL32_LoadICD ( LPCWSTR driver )
icd = OPENGL32_LoadDriver( driver ); icd = OPENGL32_LoadDriver( driver );
if (icd != NULL) if (icd != NULL)
icd->refcount = 1; icd->refcount = 1;
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
return icd; return icd;
} }
@ -386,11 +406,25 @@ GLDRIVERDATA *OPENGL32_LoadICD ( LPCWSTR driver )
*/ */
BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd ) BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd )
{ {
BOOL ret = TRUE;
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.driver_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return FALSE; /* FIXME: do we have to expect such an error and handle it? */
}
icd->refcount--; icd->refcount--;
if (icd->refcount == 0) if (icd->refcount == 0)
return OPENGL32_UnloadDriver( icd ); ret = OPENGL32_UnloadDriver( icd );
return TRUE; /* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.driver_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
return ret;
} }

View file

@ -1,4 +1,4 @@
/* $Id: opengl32.h,v 1.8 2004/02/05 04:28:11 royce Exp $ /* $Id: opengl32.h,v 1.9 2004/02/06 13:59:13 royce Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -12,6 +12,12 @@
#ifndef OPENGL32_PRIVATE_H #ifndef OPENGL32_PRIVATE_H
#define OPENGL32_PRIVATE_H #define OPENGL32_PRIVATE_H
/* gl function list */
#include "glfuncs.h"
/* ICD index list/types */
#include "icdtable.h"
/* debug flags */ /* debug flags */
#if !defined(NDEBUG) #if !defined(NDEBUG)
# define DEBUG_OPENGL32 # define DEBUG_OPENGL32
@ -21,7 +27,8 @@
#endif /* !NDEBUG */ #endif /* !NDEBUG */
/* debug macros */ /* debug macros */
#if 0//def DEBUG_OPENGL32 /* FIXME: DPRINT wants DbgPrint - where is it? */ #ifdef DEBUG_OPENGL32 /* FIXME: DPRINT wants DbgPrint - where is it? */
ULONG DbgPrint(PCH Format,...);
# include <debug.h> # include <debug.h>
# define DBGPRINT( fmt, args... ) \ # define DBGPRINT( fmt, args... ) \
DPRINT( "OpenGL32.DLL: %s: "fmt"\n", __FUNCTION__, ##args ) DPRINT( "OpenGL32.DLL: %s: "fmt"\n", __FUNCTION__, ##args )
@ -39,14 +46,7 @@
# endif # endif
#endif #endif
/* function/data attributes */ #if 0
#define EXPORT __declspec(dllexport)
#define NAKED __attribute__((naked))
#define SHARED __attribute__((section("shared"), shared))
/* gl function list */
#include "glfuncs.h"
/* table indices for funcnames and function pointers */ /* table indices for funcnames and function pointers */
enum glfunc_indices enum glfunc_indices
{ {
@ -59,9 +59,10 @@ enum glfunc_indices
/* function name table */ /* function name table */
extern const char* OPENGL32_funcnames[GLIDX_COUNT]; extern const char* OPENGL32_funcnames[GLIDX_COUNT];
#endif
/* FIXME: what type of argument does this take? */ /* Called by the driver to set the dispatch table */
typedef DWORD (CALLBACK * SetContextCallBack) (void *); typedef DWORD (CALLBACK * SetContextCallBack)( const ICDTable * );
/* OpenGL ICD data */ /* OpenGL ICD data */
typedef struct tagGLDRIVERDATA typedef struct tagGLDRIVERDATA
@ -93,12 +94,10 @@ typedef struct tagGLDRIVERDATA
BOOL (*DrvSwapLayerBuffers)( HDC, UINT ); BOOL (*DrvSwapLayerBuffers)( HDC, UINT );
BOOL (*DrvValidateVersion)( DWORD ); BOOL (*DrvValidateVersion)( DWORD );
PVOID func_list[GLIDX_COUNT]; /* glXXX functions supported by ICD */
struct tagGLDRIVERDATA *next; /* next ICD -- linked list */ struct tagGLDRIVERDATA *next; /* next ICD -- linked list */
} GLDRIVERDATA; } GLDRIVERDATA;
/* OpenGL context */ /* Out private OpenGL context (saved in TLS) */
typedef struct tagGLRC typedef struct tagGLRC
{ {
GLDRIVERDATA *icd; /* driver used for this context */ GLDRIVERDATA *icd; /* driver used for this context */
@ -108,7 +107,6 @@ typedef struct tagGLRC
DWORD thread_id; /* thread holding this context */ DWORD thread_id; /* thread holding this context */
HGLRC hglrc; /* GLRC from DrvCreateContext */ HGLRC hglrc; /* GLRC from DrvCreateContext */
PVOID func_list[GLIDX_COUNT]; /* glXXX function pointers */
struct tagGLRC *next; /* linked list */ struct tagGLRC *next; /* linked list */
} GLRC; } GLRC;
@ -138,6 +136,29 @@ BOOL OPENGL32_UnloadICD( GLDRIVERDATA *icd );
DWORD OPENGL32_RegEnumDrivers( DWORD idx, LPWSTR name, LPDWORD cName ); DWORD OPENGL32_RegEnumDrivers( DWORD idx, LPWSTR name, LPDWORD cName );
DWORD OPENGL32_RegGetDriverInfo( LPCWSTR driver, GLDRIVERDATA *icd ); DWORD OPENGL32_RegGetDriverInfo( LPCWSTR driver, GLDRIVERDATA *icd );
/* empty gl functions from gl.c */
void STDCALL glEmptyFunc0();
void STDCALL glEmptyFunc4( long );
void STDCALL glEmptyFunc8( long, long );
void STDCALL glEmptyFunc12( long, long, long );
void STDCALL glEmptyFunc16( long, long, long, long );
void STDCALL glEmptyFunc20( long, long, long, long, long );
void STDCALL glEmptyFunc24( long, long, long, long, long, long );
void STDCALL glEmptyFunc28( long, long, long, long, long, long, long );
void STDCALL glEmptyFunc32( long, long, long, long, long, long, long, long );
void STDCALL glEmptyFunc36( long, long, long, long, long, long, long, long,
long );
void STDCALL glEmptyFunc40( long, long, long, long, long, long, long, long,
long, long );
void STDCALL glEmptyFunc44( long, long, long, long, long, long, long, long,
long, long, long );
void STDCALL glEmptyFunc48( long, long, long, long, long, long, long, long,
long, long, long, long );
void STDCALL glEmptyFunc52( long, long, long, long, long, long, long, long,
long, long, long, long, long );
void STDCALL glEmptyFunc56( long, long, long, long, long, long, long, long,
long, long, long, long, long, long );
#endif//OPENGL32_PRIVATE_H #endif//OPENGL32_PRIVATE_H
/* EOF */ /* EOF */

View file

@ -10,6 +10,8 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <ntos/types.h>
#include <napi/teb.h>
#include "opengl32.h" #include "opengl32.h"
@ -83,8 +85,17 @@ static void WGL_RemoveContext( GLRC *glrc )
*/ */
static BOOL WGL_ContainsContext( GLRC *glrc ) static BOOL WGL_ContainsContext( GLRC *glrc )
{ {
GLRC *p = OPENGL32_processdata.glrc_list; GLRC *p;
/* synchronize */
if (WaitForSingleObject( OPENGL32_processdata.glrc_mutex, INFINITE ) ==
WAIT_FAILED)
{
DBGPRINT( "Error: WaitForSingleObject() failed (%d)", GetLastError() );
return FALSE; /* FIXME: do we have to expect such an error and handle it? */
}
p = OPENGL32_processdata.glrc_list;
while (p != NULL) while (p != NULL)
{ {
if (p == glrc) if (p == glrc)
@ -92,6 +103,10 @@ static BOOL WGL_ContainsContext( GLRC *glrc )
p = p->next; p = p->next;
} }
/* release mutex */
if (!ReleaseMutex( OPENGL32_processdata.glrc_mutex ))
DBGPRINT( "Error: ReleaseMutex() failed (%d)", GetLastError() );
return FALSE; return FALSE;
} }
@ -103,14 +118,65 @@ static BOOL WGL_ContainsContext( GLRC *glrc )
* functions) * functions)
* RETURNS: unkown * RETURNS: unkown
*/ */
DWORD CALLBACK WGL_SetContextCallBack( void *table ) DWORD CALLBACK WGL_SetContextCallBack( const ICDTable *table )
{ {
DBGPRINT( "Function count: %d\n", *(DWORD *)table ); /* UINT i;*/
DBGBREAK(); TEB *teb;
PROC *tebTable, *tebDispatchTable;
teb = NtCurrentTeb();
tebTable = (PROC *)teb->glTable;
tebDispatchTable = (PROC *)teb->glDispatchTable;
DBGPRINT( "Function count: %d\n", table->num_funcs );
/* save table */
memcpy( tebTable, table->dispatch_table,
sizeof (PROC) * table->num_funcs );
memset( tebTable + sizeof (PROC) * table->num_funcs, 0,
(sizeof (table->dispatch_table) / sizeof (PROC)) -
(sizeof (PROC) * table->num_funcs) );
/* FIXME: pull in software fallbacks -- need mesa */
#if 0 /* unused atm */
for (i = 0; i < (sizeof (table->dispatch_table) / sizeof (PROC)); i++)
{
if (tebTable[i] == NULL)
{
/* FIXME: fallback */
DBGPRINT( "Warning: GL proc #%d is NULL!", i );
}
}
#endif
/* put in empty functions as long as we dont have a fallback */
#define X(func, ret, typeargs, args, icdidx, tebidx, stack) \
if (tebTable[icdidx] == NULL) \
{ \
DBGPRINT( "Warning: GL proc '%s' is NULL", #func ); \
tebTable[icdidx] = (PROC)glEmptyFunc##stack; \
}
GLFUNCS_MACRO
#undef X
/* fill teb->glDispatchTable for fast calls */
#define X(func, ret, typeargs, args, icdidx, tebidx, stack) \
if (tebidx >= 0) \
tebDispatchTable[tebidx] = tebTable[icdidx];
GLFUNCS_MACRO
#undef X
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
int WINAPI wglChoosePixelFormat( HDC hdc, CONST PIXELFORMATDESCRIPTOR *pfd )
{
UNIMPLEMENTED;
return 0;
}
/* FUNCTION: Copy data specified by mask from one GLRC to another. /* FUNCTION: Copy data specified by mask from one GLRC to another.
* ARGUMENTS: [IN] src Source GLRC * ARGUMENTS: [IN] src Source GLRC
* [OUT] dst Destination GLRC * [OUT] dst Destination GLRC
@ -168,7 +234,7 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
WCHAR driver[256]; WCHAR driver[256];
DWORD dw, size; DWORD dw, size;
GLDRIVERDATA *icd; GLDRIVERDATA *icd = NULL;
GLRC *glrc; GLRC *glrc;
HGLRC drvHglrc = NULL; HGLRC drvHglrc = NULL;
@ -198,7 +264,7 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
if (icd->DrvCreateLayerContext) if (icd->DrvCreateLayerContext)
drvHglrc = icd->DrvCreateLayerContext( hdc, layer ); drvHglrc = icd->DrvCreateLayerContext( hdc, layer );
else if (drvHglrc)
{ {
if (layer == 0) if (layer == 0)
drvHglrc = icd->DrvCreateContext( hdc ); drvHglrc = icd->DrvCreateContext( hdc );
@ -217,7 +283,7 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
break; break;
} }
if (drvHglrc == NULL) /* no ICD was found */ if (drvHglrc == NULL || icd == NULL) /* no ICD was found */
{ {
/* FIXME: fallback to mesa */ /* FIXME: fallback to mesa */
DBGPRINT( "Error: No working ICD found!" ); DBGPRINT( "Error: No working ICD found!" );
@ -229,9 +295,6 @@ HGLRC WINAPI wglCreateLayerContext( HDC hdc, int layer )
glrc->hglrc = drvHglrc; glrc->hglrc = drvHglrc;
glrc->iFormat = -1; /* what is this used for? */ glrc->iFormat = -1; /* what is this used for? */
glrc->icd = icd; 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 */ /* append glrc to context list */
WGL_AppendContext( glrc ); WGL_AppendContext( glrc );
@ -283,12 +346,19 @@ BOOL WINAPI wglDeleteContext( HGLRC hglrc )
BOOL WINAPI wglDescribeLayerPlane( HDC hdc, int iPixelFormat, int iLayerPlane, BOOL WINAPI wglDescribeLayerPlane( HDC hdc, int iPixelFormat, int iLayerPlane,
UINT nBytes, LPLAYERPLANEDESCRIPTOR plpd ) UINT nBytes, LPLAYERPLANEDESCRIPTOR plpd )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
int WINAPI wglDescribePixelFormat( HDC hdc, int iFormat, UINT nBytes,
LPPIXELFORMATDESCRIPTOR pfd )
{
UNIMPLEMENTED;
return 0;
}
/* FUNCTION: Return the current GLRC /* FUNCTION: Return the current GLRC
* RETURNS: Current GLRC (NULL if none was set current) * RETURNS: Current GLRC (NULL if none was set current)
*/ */
@ -314,6 +384,14 @@ HDC WINAPI wglGetCurrentDC()
int WINAPI wglGetLayerPaletteEntries( HDC hdc, int iLayerPlane, int iStart, int WINAPI wglGetLayerPaletteEntries( HDC hdc, int iLayerPlane, int iStart,
int cEntries, COLORREF *pcr ) int cEntries, COLORREF *pcr )
{ {
UNIMPLEMENTED;
return 0;
}
int WINAPI wglGetPixelFormat( HDC hdc )
{
UNIMPLEMENTED;
return 0; return 0;
} }
@ -366,7 +444,11 @@ BOOL WINAPI wglMakeCurrent( HDC hdc, HGLRC hglrc )
{ {
GLRC *glrc = (GLRC *)hglrc; GLRC *glrc = (GLRC *)hglrc;
/* FIXME: glFlush() current context */ /* flush current context */
if (OPENGL32_threaddata->glrc != NULL)
{
glFlush();
}
/* check hdc */ /* check hdc */
if (GetObjectType( hdc ) != OBJ_DC) if (GetObjectType( hdc ) != OBJ_DC)
@ -392,9 +474,8 @@ BOOL WINAPI wglMakeCurrent( HDC hdc, HGLRC hglrc )
/* call the ICD */ /* call the ICD */
if (glrc->hglrc != NULL) if (glrc->hglrc != NULL)
{ {
/* FIXME: which function to call? DrvSetContext? if (!glrc->icd->DrvSetContext( hdc, glrc->hglrc,
does it crash with NULL as SetContextCallBack? */ WGL_SetContextCallBack ))
if (!glrc->icd->DrvSetContext( hdc, glrc->hglrc, NULL ))
{ {
DBGPRINT( "Error: DrvSetContext failed (%d)\n", GetLastError() ); DBGPRINT( "Error: DrvSetContext failed (%d)\n", GetLastError() );
return FALSE; return FALSE;
@ -414,6 +495,7 @@ BOOL WINAPI wglMakeCurrent( HDC hdc, HGLRC hglrc )
BOOL WINAPI wglRealizeLayerPalette( HDC hdc, int iLayerPlane, BOOL bRealize ) BOOL WINAPI wglRealizeLayerPalette( HDC hdc, int iLayerPlane, BOOL bRealize )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
@ -421,9 +503,18 @@ BOOL WINAPI wglRealizeLayerPalette( HDC hdc, int iLayerPlane, BOOL bRealize )
int WINAPI wglSetLayerPaletteEntries( HDC hdc, int iLayerPlane, int iStart, int WINAPI wglSetLayerPaletteEntries( HDC hdc, int iLayerPlane, int iStart,
int cEntries, CONST COLORREF *pcr ) int cEntries, CONST COLORREF *pcr )
{ {
UNIMPLEMENTED;
return 0; return 0;
} }
BOOL WINAPI wglSetPixelFormat( HDC hdc, int iFormat, CONST PIXELFORMATDESCRIPTOR *pfd )
{
UNIMPLEMENTED;
return FALSE;
}
/* FUNCTION: Enable display-list sharing between multiple GLRCs /* FUNCTION: Enable display-list sharing between multiple GLRCs
* ARGUMENTS: [IN] hglrc1 GLRC number 1 * ARGUMENTS: [IN] hglrc1 GLRC number 1
* [IN] hglrc2 GLRC number 2 * [IN] hglrc2 GLRC number 2
@ -457,6 +548,7 @@ BOOL WINAPI wglShareLists( HGLRC hglrc1, HGLRC hglrc2 )
return glrc1->icd->DrvShareLists( glrc1->hglrc, glrc2->hglrc ); return glrc1->icd->DrvShareLists( glrc1->hglrc, glrc2->hglrc );
} }
/* FUNCTION: Flushes GL and swaps front/back buffer if appropriate /* FUNCTION: Flushes GL and swaps front/back buffer if appropriate
* ARGUMENTS: [IN] hdc Handle to device context to swap buffers for * ARGUMENTS: [IN] hdc Handle to device context to swap buffers for
* RETURNS: TRUE on success, FALSE on failure * RETURNS: TRUE on success, FALSE on failure
@ -490,18 +582,21 @@ BOOL WINAPI wglSwapBuffers( HDC hdc )
BOOL WINAPI wglSwapLayerBuffers( HDC hdc, UINT fuPlanes ) BOOL WINAPI wglSwapLayerBuffers( HDC hdc, UINT fuPlanes )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
BOOL WINAPI wglUseFontBitmapsA( HDC hdc, DWORD first, DWORD count, DWORD listBase ) BOOL WINAPI wglUseFontBitmapsA( HDC hdc, DWORD first, DWORD count, DWORD listBase )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
BOOL WINAPI wglUseFontBitmapsW( HDC hdc, DWORD first, DWORD count, DWORD listBase ) BOOL WINAPI wglUseFontBitmapsW( HDC hdc, DWORD first, DWORD count, DWORD listBase )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
@ -510,6 +605,7 @@ BOOL WINAPI wglUseFontOutlinesA( HDC hdc, DWORD first, DWORD count, DWORD listBa
FLOAT deviation, FLOAT extrusion, int format, FLOAT deviation, FLOAT extrusion, int format,
LPGLYPHMETRICSFLOAT lpgmf ) LPGLYPHMETRICSFLOAT lpgmf )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }
@ -518,6 +614,7 @@ BOOL WINAPI wglUseFontOutlinesW( HDC hdc, DWORD first, DWORD count, DWORD listBa
FLOAT deviation, FLOAT extrusion, int format, FLOAT deviation, FLOAT extrusion, int format,
LPGLYPHMETRICSFLOAT lpgmf ) LPGLYPHMETRICSFLOAT lpgmf )
{ {
UNIMPLEMENTED;
return FALSE; return FALSE;
} }