ddraw: load OpenGL at runtime

Mike McCormack mike at codeweavers.com
Wed May 14 23:19:18 CDT 2003


Hi All,

This patch binds opengl at runtime, so we can build binaries with OpenGL 
enabled and still use some parts of ddraw on systems without OpenGL.

I haven't tested it appart from compiling it, so if somebody who knows 
more about ddraw could give it a go, and comment that would be great.

Mike


ChangeLog:
* load OpenGL from ddraw at runtime

-------------- next part --------------
? dlls/ddraw/gl_private.h
? dlls/ddraw/x
Index: dlls/ddraw/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/Makefile.in,v
retrieving revision 1.28
diff -u -r1.28 Makefile.in
--- dlls/ddraw/Makefile.in	21 Nov 2002 21:04:16 -0000	1.28
+++ dlls/ddraw/Makefile.in	15 May 2003 04:10:43 -0000
@@ -5,7 +5,7 @@
 MODULE    = ddraw.dll
 IMPORTS   = user32 gdi32 kernel32
 EXTRAINCL = @X_CFLAGS@
-EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
+EXTRALIBS = $(LIBUUID) @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ 
 
 LDDLLFLAGS = @LDDLLFLAGS@
 SYMBOLFILE = $(MODULE).tmp.o
Index: dlls/ddraw/d3dexecutebuffer.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/d3dexecutebuffer.c,v
retrieving revision 1.26
diff -u -r1.26 d3dexecutebuffer.c
--- dlls/ddraw/d3dexecutebuffer.c	11 May 2003 03:28:53 -0000	1.26
+++ dlls/ddraw/d3dexecutebuffer.c	15 May 2003 04:10:44 -0000
@@ -82,12 +82,12 @@
 
 #define DO_VERTEX(index) 			                                \
 {										\
-    glTexCoord2f(vx[index].u,							\
+    pglTexCoord2f(vx[index].u,							\
    	         vx[index].v);							\
-    glNormal3f(vx[index].nx,							\
+    pglNormal3f(vx[index].nx,							\
 	       vx[index].ny,							\
 	       vx[index].nz);							\
-    glVertex4f(vx[index].x,						     	\
+    pglVertex4f(vx[index].x,						     	\
 	       vx[index].y,							\
 	       vx[index].z,							\
 	       vx[index].w);							\
@@ -102,12 +102,12 @@
 {										\
     DWORD col = l_vx[index].c;							\
   										\
-    glColor3f(((col >> 16) & 0xFF) / 255.0,					\
+    pglColor3f(((col >> 16) & 0xFF) / 255.0,					\
 	      ((col >>  8) & 0xFF) / 255.0,					\
 	      ((col >>  0) & 0xFF) / 255.0);					\
-    glTexCoord2f(l_vx[index].u,							\
+    pglTexCoord2f(l_vx[index].u,							\
 	         l_vx[index].v);						\
-    glVertex4f(l_vx[index].x,							\
+    pglVertex4f(l_vx[index].x,							\
 	       l_vx[index].y,							\
 	       l_vx[index].z,							\
 	       l_vx[index].w);							\
@@ -123,16 +123,16 @@
     D3DTLVERTEX *vx = &(tl_vx[index]);						\
     DWORD col = vx->u5.color;							\
 										\
-    glColor3f(((col >> 16) & 0xFF) / 255.0,					\
+    pglColor3f(((col >> 16) & 0xFF) / 255.0,					\
               ((col >>  8) & 0xFF) / 255.0,					\
               ((col >>  0) & 0xFF) / 255.0);					\
-    glTexCoord2f(vx->u7.tu, vx->u8.tv);						\
+    pglTexCoord2f(vx->u7.tu, vx->u8.tv);						\
     if (vx->u4.rhw < 1e-8)							\
-        glVertex3f(vx->u1.sx,							\
+        pglVertex3f(vx->u1.sx,							\
                    vx->u2.sy,							\
                    vx->u3.sz);							\
     else									\
-        glVertex4f(vx->u1.sx / vx->u4.rhw,					\
+        pglVertex4f(vx->u1.sx / vx->u4.rhw,					\
                    vx->u2.sy / vx->u4.rhw,					\
                    vx->u3.sz / vx->u4.rhw,					\
                    1.0 / vx->u4.rhw);						\
@@ -144,7 +144,7 @@
 
 #define TRIANGLE_LOOP(macro)				\
 {							\
-    glBegin(GL_TRIANGLES); 				\
+    pglBegin(GL_TRIANGLES); 				\
     for (i = 0; i < count; i++) {			\
         LPD3DTRIANGLE ci = (LPD3DTRIANGLE) instr;	\
       							\
@@ -179,7 +179,7 @@
 							\
         instr += size;					\
     }							\
-    glEnd();						\
+    pglEnd();						\
 }
 
 
@@ -237,7 +237,7 @@
 		switch (This->vertex_type) {
 		    case D3DVT_VERTEX:
 		        /* This time, there is lighting */
-		        glEnable(GL_LIGHTING);
+		        pglEnable(GL_LIGHTING);
 			
 			if (TRACE_ON(ddraw)) {
 			    TRACE("  Projection Matrix : (%p)\n", lpDevice->proj_mat);
@@ -254,7 +254,7 @@
 
 		    case D3DVT_LVERTEX:
 			/* No lighting */
-			glDisable(GL_LIGHTING);
+			pglDisable(GL_LIGHTING);
 
 			if (TRACE_ON(ddraw)) {
 			    TRACE("  Projection Matrix : (%p)\n", lpDevice->proj_mat);
@@ -271,8 +271,8 @@
 
 		    case D3DVT_TLVERTEX: {
 			/* First, disable lighting and fogging */
-			glDisable(GL_LIGHTING);
-			glDisable(GL_FOG);
+			pglDisable(GL_LIGHTING);
+			pglDisable(GL_FOG);
 			
 			d3ddevice_set_ortho(lpDevice);
 		    } break;
@@ -320,15 +320,15 @@
 		    
 		    /* Do the multiplication..
 		       As I am VERY lazy, I let OpenGL do the multiplication for me */
-		    glMatrixMode(GL_PROJECTION);
+		    pglMatrixMode(GL_PROJECTION);
 		    /* Save the current matrix */
-		    glPushMatrix();
+		    pglPushMatrix();
 		    /* Load Matrix one and do the multiplication */
-		    glLoadMatrixf((float *) c);
-		    glMultMatrixf((float *) b);
-		    glGetFloatv(GL_PROJECTION_MATRIX, (float *) a);
+		    pglLoadMatrixf((float *) c);
+		    pglMultMatrixf((float *) b);
+		    pglGetFloatv(GL_PROJECTION_MATRIX, (float *) a);
 		    /* Restore the current matrix */
-		    glPopMatrix();
+		    pglPopMatrix();
 		    
 		    instr += size;
 		}
@@ -396,7 +396,7 @@
 			    light[1] = ((dwLightState >>  8) & 0xFF) / 255.0;
 			    light[2] = ((dwLightState >>  0) & 0xFF) / 255.0;
 			    light[3] = 1.0;
-			    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float *) light);
+			    pglLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float *) light);
 			    
 			    TRACE("    R:%02lx G:%02lx B:%02lx A:%02lx\n",
 				  ((dwLightState >> 16) & 0xFF),
Index: dlls/ddraw/d3dlight.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/d3dlight.c,v
retrieving revision 1.13
diff -u -r1.13 d3dlight.c
--- dlls/ddraw/d3dlight.c	20 Jan 2003 23:24:05 -0000	1.13
+++ dlls/ddraw/d3dlight.c	15 May 2003 04:10:44 -0000
@@ -155,7 +155,7 @@
     update(This);
     /* If was not active, activate it */
     if ((glThis->parent.light.dwFlags & D3DLIGHT_ACTIVE) == 0) {
-        glEnable(glThis->light_num);
+        pglEnable(glThis->light_num);
 	glThis->parent.light.dwFlags |= D3DLIGHT_ACTIVE;
     }
     LEAVE_GL();
@@ -166,7 +166,7 @@
     ENTER_GL();
     /* If was not active, activate it */
     if ((glThis->parent.light.dwFlags & D3DLIGHT_ACTIVE) != 0) {
-        glDisable(glThis->light_num);
+        pglDisable(glThis->light_num);
 	glThis->parent.light.dwFlags &= ~D3DLIGHT_ACTIVE;
     }
     LEAVE_GL();
Index: dlls/ddraw/d3dmaterial.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/d3dmaterial.c,v
retrieving revision 1.14
diff -u -r1.14 d3dmaterial.c
--- dlls/ddraw/d3dmaterial.c	7 Jan 2003 20:36:30 -0000	1.14
+++ dlls/ddraw/d3dmaterial.c	15 May 2003 04:10:44 -0000
@@ -290,16 +290,16 @@
 
     /* Set the current Material */
     ENTER_GL();
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_DIFFUSE,
 		 (float *) &(This->mat.u.diffuse));
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_AMBIENT,
 		 (float *) &(This->mat.u1.ambient));
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_SPECULAR,
 		 (float *) &(This->mat.u2.specular));
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_EMISSION,
 		 (float *) &(This->mat.u3.emissive));
     LEAVE_GL();
Index: dlls/ddraw/d3dtexture.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/d3dtexture.c,v
retrieving revision 1.45
diff -u -r1.45 d3dtexture.c
--- dlls/ddraw/d3dtexture.c	12 May 2003 03:09:17 -0000	1.45
+++ dlls/ddraw/d3dtexture.c	15 May 2003 04:10:45 -0000
@@ -94,7 +94,7 @@
     GLuint tex_name = glThis->tex_name;
     
     TRACE(" activating OpenGL texture id %d.\n", tex_name);
-    glBindTexture(GL_TEXTURE_2D, tex_name);
+    pglBindTexture(GL_TEXTURE_2D, tex_name);
 
     if (This->mipmap_level != 0) {
         WARN(" application activating a sub-level of the mipmapping chain (level %d) !\n", This->mipmap_level);
@@ -164,7 +164,7 @@
 				      GL_UNSIGNED_BYTE, /* table type */
 				      table);           /* the color table */
 		    
-		    glTexImage2D(GL_TEXTURE_2D,       /* target */
+		    pglTexImage2D(GL_TEXTURE_2D,       /* target */
 				 surf_ptr->mipmap_level, /* level */
 				 GL_COLOR_INDEX8_EXT, /* internal format */
 				 src_d->dwWidth, src_d->dwHeight, /* width, height */
@@ -517,7 +517,7 @@
 	    
 	    if ((upload_done == FALSE) && (error == FALSE)) {
 	        if (gl_surf_ptr->initial_upload_done == FALSE) {
-		    glTexImage2D(GL_TEXTURE_2D,
+		    pglTexImage2D(GL_TEXTURE_2D,
 				 surf_ptr->mipmap_level,
 				 format,
 				 src_d->dwWidth, src_d->dwHeight,
@@ -527,7 +527,7 @@
 				 surface == NULL ? src_d->lpSurface : surface);
 		    gl_surf_ptr->initial_upload_done = TRUE;
 		} else {
-		    glTexSubImage2D(GL_TEXTURE_2D,
+		    pglTexSubImage2D(GL_TEXTURE_2D,
 				    surf_ptr->mipmap_level,
 				    0, 0,
 				    src_d->dwWidth, src_d->dwHeight,
@@ -646,7 +646,7 @@
     /* And delete texture handle */
     ENTER_GL();
     if (glThis->tex_name != 0)
-        glDeleteTextures(1, &(glThis->tex_name));
+        pglDeleteTextures(1, &(glThis->tex_name));
     LEAVE_GL();	
 
     /* And if this texture was the current one, remove it at the device level */
@@ -945,7 +945,7 @@
 
 	ENTER_GL();
 	if (surf->mipmap_level == 0) {
-	    glGenTextures(1, &(private->tex_name));
+	    pglGenTextures(1, &(private->tex_name));
 	    if (private->tex_name == 0) ERR("Error at creation of OpenGL texture ID !\n");
 	    TRACE(" GL texture created for surface %p (private data at %p and GL id %d).\n", surf, private, private->tex_name);
 	} else {
Index: dlls/ddraw/ddraw_private.h
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw_private.h,v
retrieving revision 1.35
diff -u -r1.35 ddraw_private.h
--- dlls/ddraw/ddraw_private.h	2 Jan 2003 19:51:25 -0000	1.35
+++ dlls/ddraw/ddraw_private.h	15 May 2003 04:10:45 -0000
@@ -353,6 +353,7 @@
 
 extern Convert ModeEmulations[8];
 extern int _common_depth_to_pixelformat(DWORD depth,LPDIRECTDRAW ddraw);
+extern BOOL opengl_initialized;
 
 /******************************************************************************
  * Structure conversion (for thunks)
Index: dlls/ddraw/main.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/main.c,v
retrieving revision 1.31
diff -u -r1.31 main.c
--- dlls/ddraw/main.c	15 Mar 2003 00:12:43 -0000	1.31
+++ dlls/ddraw/main.c	15 May 2003 04:10:45 -0000
@@ -37,6 +37,10 @@
 /* This for all the enumeration and creation of D3D-related objects */
 #include "ddraw_private.h"
 #include "wine/debug.h"
+#include "wine/library.h"
+#include "wine/port.h"
+
+#include "gl_private.h"
 
 #define MAX_DDRAW_DRIVERS 3
 static const ddraw_driver* DDRAW_drivers[MAX_DDRAW_DRIVERS];
@@ -48,6 +52,83 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
 
+static void *gl_handle = NULL;
+BOOL opengl_initialized = 0;
+
+#define MAKE_FUNCPTR(f) typeof(f) * p##f = NULL;
+
+MAKE_FUNCPTR(glAlphaFunc)
+MAKE_FUNCPTR(glBegin)
+MAKE_FUNCPTR(glBindTexture)
+MAKE_FUNCPTR(glBlendFunc)
+MAKE_FUNCPTR(glClear)
+MAKE_FUNCPTR(glClearColor)
+MAKE_FUNCPTR(glClearDepth)
+MAKE_FUNCPTR(glClearStencil)
+MAKE_FUNCPTR(glClipPlane)
+MAKE_FUNCPTR(glColor3f)
+MAKE_FUNCPTR(glColor3ub)
+MAKE_FUNCPTR(glColor4ub)
+MAKE_FUNCPTR(glColorMaterial)
+MAKE_FUNCPTR(glCullFace)
+MAKE_FUNCPTR(glDeleteTextures)
+MAKE_FUNCPTR(glDepthFunc)
+MAKE_FUNCPTR(glDepthMask)
+MAKE_FUNCPTR(glDisable)
+MAKE_FUNCPTR(glDrawBuffer)
+MAKE_FUNCPTR(glDrawPixels)
+MAKE_FUNCPTR(glEnable)
+MAKE_FUNCPTR(glEnd)
+MAKE_FUNCPTR(glFlush)
+MAKE_FUNCPTR(glFogf)
+MAKE_FUNCPTR(glFogfv)
+MAKE_FUNCPTR(glFogi)
+MAKE_FUNCPTR(glFrontFace)
+MAKE_FUNCPTR(glGenTextures)
+MAKE_FUNCPTR(glGetBooleanv)
+MAKE_FUNCPTR(glGetFloatv)
+MAKE_FUNCPTR(glGetIntegerv)
+MAKE_FUNCPTR(glHint)
+MAKE_FUNCPTR(glLightModelfv)
+MAKE_FUNCPTR(glLightModeli)
+MAKE_FUNCPTR(glLightfv)
+MAKE_FUNCPTR(glLoadIdentity)
+MAKE_FUNCPTR(glLoadMatrixf)
+MAKE_FUNCPTR(glMaterialf)
+MAKE_FUNCPTR(glMaterialfv)
+MAKE_FUNCPTR(glMatrixMode)
+MAKE_FUNCPTR(glMultMatrixf)
+MAKE_FUNCPTR(glNormal3f)
+MAKE_FUNCPTR(glNormal3fv)
+MAKE_FUNCPTR(glPolygonMode)
+MAKE_FUNCPTR(glPolygonOffset)
+MAKE_FUNCPTR(glPopMatrix)
+MAKE_FUNCPTR(glPushMatrix)
+MAKE_FUNCPTR(glRasterPos2f)
+MAKE_FUNCPTR(glReadBuffer)
+MAKE_FUNCPTR(glReadPixels)
+MAKE_FUNCPTR(glShadeModel)
+MAKE_FUNCPTR(glStencilFunc)
+MAKE_FUNCPTR(glStencilMask)
+MAKE_FUNCPTR(glStencilOp)
+MAKE_FUNCPTR(glTexCoord2f)
+MAKE_FUNCPTR(glTexCoord2fv)
+MAKE_FUNCPTR(glTexEnvi)
+MAKE_FUNCPTR(glTexImage2D)
+MAKE_FUNCPTR(glTexParameteri)
+MAKE_FUNCPTR(glTexParameterfv)
+MAKE_FUNCPTR(glTexSubImage2D)
+MAKE_FUNCPTR(glTranslatef)
+MAKE_FUNCPTR(glVertex3f)
+MAKE_FUNCPTR(glVertex3fv)
+MAKE_FUNCPTR(glVertex4f)
+MAKE_FUNCPTR(glXCreateContext)
+MAKE_FUNCPTR(glXDestroyContext)
+MAKE_FUNCPTR(glXMakeCurrent)
+MAKE_FUNCPTR(glXSwapBuffers)
+
+#undef MAKE_FUNCPTR
+
 /**********************************************************************/
 
 typedef struct {
@@ -55,6 +136,100 @@
     LPVOID lpContext;
 } DirectDrawEnumerateProcData;
 
+static BOOL DDRAW_bind_to_opengl( void )
+{
+    char *glname = "libGL.so";
+
+    gl_handle = wine_dlopen(glname, RTLD_NOW, NULL, 0);
+    if(!gl_handle) {
+        WINE_MESSAGE("Wine cannot find the OpenGL graphics library (%s).\n",glname);
+	return FALSE;
+    }
+
+#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(gl_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;}
+
+    LOAD_FUNCPTR(glAlphaFunc)
+    LOAD_FUNCPTR(glBegin)
+    LOAD_FUNCPTR(glBindTexture)
+    LOAD_FUNCPTR(glBlendFunc)
+    LOAD_FUNCPTR(glClear)
+    LOAD_FUNCPTR(glClearColor)
+    LOAD_FUNCPTR(glClearDepth)
+    LOAD_FUNCPTR(glClearStencil)
+    LOAD_FUNCPTR(glClipPlane)
+    LOAD_FUNCPTR(glColor3f)
+    LOAD_FUNCPTR(glColor3ub)
+    LOAD_FUNCPTR(glColor4ub)
+    LOAD_FUNCPTR(glColorMaterial)
+    LOAD_FUNCPTR(glCullFace)
+    LOAD_FUNCPTR(glDeleteTextures)
+    LOAD_FUNCPTR(glDepthFunc)
+    LOAD_FUNCPTR(glDepthMask)
+    LOAD_FUNCPTR(glDisable)
+    LOAD_FUNCPTR(glDrawBuffer)
+    LOAD_FUNCPTR(glDrawPixels)
+    LOAD_FUNCPTR(glEnable)
+    LOAD_FUNCPTR(glEnd)
+    LOAD_FUNCPTR(glFlush)
+    LOAD_FUNCPTR(glFogf)
+    LOAD_FUNCPTR(glFogfv)
+    LOAD_FUNCPTR(glFogi)
+    LOAD_FUNCPTR(glFrontFace)
+    LOAD_FUNCPTR(glGenTextures)
+    LOAD_FUNCPTR(glGetBooleanv)
+    LOAD_FUNCPTR(glGetFloatv)
+    LOAD_FUNCPTR(glGetIntegerv)
+    LOAD_FUNCPTR(glHint)
+    LOAD_FUNCPTR(glLightModelfv)
+    LOAD_FUNCPTR(glLightModeli)
+    LOAD_FUNCPTR(glLightfv)
+    LOAD_FUNCPTR(glLoadIdentity)
+    LOAD_FUNCPTR(glLoadMatrixf)
+    LOAD_FUNCPTR(glMaterialf)
+    LOAD_FUNCPTR(glMaterialfv)
+    LOAD_FUNCPTR(glMatrixMode)
+    LOAD_FUNCPTR(glMultMatrixf)
+    LOAD_FUNCPTR(glNormal3f)
+    LOAD_FUNCPTR(glNormal3fv)
+    LOAD_FUNCPTR(glPolygonMode)
+    LOAD_FUNCPTR(glPolygonOffset)
+    LOAD_FUNCPTR(glPopMatrix)
+    LOAD_FUNCPTR(glPushMatrix)
+    LOAD_FUNCPTR(glRasterPos2f)
+    LOAD_FUNCPTR(glReadBuffer)
+    LOAD_FUNCPTR(glReadPixels)
+    LOAD_FUNCPTR(glShadeModel)
+    LOAD_FUNCPTR(glStencilFunc)
+    LOAD_FUNCPTR(glStencilMask)
+    LOAD_FUNCPTR(glStencilOp)
+    LOAD_FUNCPTR(glTexCoord2f)
+    LOAD_FUNCPTR(glTexCoord2fv)
+    LOAD_FUNCPTR(glTexEnvi)
+    LOAD_FUNCPTR(glTexImage2D)
+    LOAD_FUNCPTR(glTexParameteri)
+    LOAD_FUNCPTR(glTexSubImage2D)
+    LOAD_FUNCPTR(glTranslatef)
+    LOAD_FUNCPTR(glVertex3f)
+    LOAD_FUNCPTR(glVertex3fv)
+    LOAD_FUNCPTR(glVertex4f)
+    LOAD_FUNCPTR(glXCreateContext)
+    LOAD_FUNCPTR(glXDestroyContext)
+    LOAD_FUNCPTR(glXMakeCurrent)
+    LOAD_FUNCPTR(glXSwapBuffers)
+#undef LOAD_FUNCPTR
+
+    return TRUE;
+
+sym_not_found:
+    WINE_MESSAGE(
+      "Wine cannot find certain functions that it needs inside the OpenGL\n"
+      "graphics library.  To enable Wine to use OpenGL please upgrade\n"
+      "your OpenGL libraries\n");
+    wine_dlclose(gl_handle, NULL, 0);
+    gl_handle = NULL;
+    return FALSE;
+}
+
 /***********************************************************************
  *		DirectDrawEnumerateExA (DDRAW.@)
  */
@@ -531,6 +706,7 @@
             wine_tsx11_lock_ptr   = (void *)GetProcAddress( mod, "wine_tsx11_lock" );
             wine_tsx11_unlock_ptr = (void *)GetProcAddress( mod, "wine_tsx11_unlock" );
         }
+        opengl_initialized = DDRAW_bind_to_opengl();
     }
 
     if (DDRAW_num_drivers > 0)
Index: dlls/ddraw/mesa.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/mesa.c,v
retrieving revision 1.37
diff -u -r1.37 mesa.c
--- dlls/ddraw/mesa.c	12 May 2003 03:09:17 -0000	1.37
+++ dlls/ddraw/mesa.c	15 May 2003 04:10:46 -0000
@@ -125,9 +125,9 @@
 	      
 	    case D3DRENDERSTATE_TEXTUREPERSPECTIVE: /* 4 */
 	        if (dwRenderState)
-		    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+		    pglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
 		else
-		    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
+		    pglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
 	        break;
 
 	    case D3DRENDERSTATE_WRAPU: /* 5 */
@@ -146,11 +146,11 @@
 		   
 		   Maybe replacing the Z function by ALWAYS would be a better idea. */
 	        if (dwRenderState == D3DZB_TRUE)
-		    glEnable(GL_DEPTH_TEST);
+		    pglEnable(GL_DEPTH_TEST);
 		else if (dwRenderState == D3DZB_FALSE)
-		    glDisable(GL_DEPTH_TEST);
+		    pglDisable(GL_DEPTH_TEST);
 		else {
-		    glEnable(GL_DEPTH_TEST);
+		    pglEnable(GL_DEPTH_TEST);
 		    WARN(" w-buffering not supported.\n");
 		}
 	        break;
@@ -158,13 +158,13 @@
 	    case D3DRENDERSTATE_FILLMODE:           /*  8 */
 	        switch ((D3DFILLMODE) dwRenderState) {
 		    case D3DFILL_POINT:
-		        glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);        
+		        pglPolygonMode(GL_FRONT_AND_BACK,GL_POINT);        
 			break;
 		    case D3DFILL_WIREFRAME:
-			glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 
+			pglPolygonMode(GL_FRONT_AND_BACK,GL_LINE); 
 			break;
 		    case D3DFILL_SOLID:
-			glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); 
+			pglPolygonMode(GL_FRONT_AND_BACK,GL_FILL); 
 			break;
 		    default:
 			ERR("Unhandled fill mode %ld !\n",dwRenderState);
@@ -174,10 +174,10 @@
 	    case D3DRENDERSTATE_SHADEMODE:          /*  9 */
 	        switch ((D3DSHADEMODE) dwRenderState) {
 		    case D3DSHADE_FLAT:
-		        glShadeModel(GL_FLAT);
+		        pglShadeModel(GL_FLAT);
 			break;
 		    case D3DSHADE_GOURAUD:
-			glShadeModel(GL_SMOOTH);
+			pglShadeModel(GL_SMOOTH);
 			break;
 		    default:
 			ERR("Unhandled shade mode %ld !\n",dwRenderState);
@@ -186,16 +186,16 @@
 
 	    case D3DRENDERSTATE_ZWRITEENABLE:     /* 14 */
 	        if (dwRenderState)
-		    glDepthMask(GL_TRUE);
+		    pglDepthMask(GL_TRUE);
 		else
-		    glDepthMask(GL_FALSE);
+		    pglDepthMask(GL_FALSE);
 	        break;
 	      
 	    case D3DRENDERSTATE_ALPHATESTENABLE:  /* 15 */
 	        if (dwRenderState)
-		    glEnable(GL_ALPHA_TEST);
+		    pglEnable(GL_ALPHA_TEST);
 	        else
-		    glDisable(GL_ALPHA_TEST);
+		    pglDisable(GL_ALPHA_TEST);
 	        break;
 
 	    case D3DRENDERSTATE_TEXTUREMAG: {     /* 17 */
@@ -242,7 +242,7 @@
 
 	    case D3DRENDERSTATE_SRCBLEND:           /* 19 */
 	    case D3DRENDERSTATE_DESTBLEND:          /* 20 */
-	        glBlendFunc(convert_D3D_blendop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_SRCBLEND - 1]),
+	        pglBlendFunc(convert_D3D_blendop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_SRCBLEND - 1]),
 			    convert_D3D_blendop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_DESTBLEND - 1]));
 	        break;
 
@@ -250,7 +250,7 @@
 	        switch ((D3DTEXTUREBLEND) dwRenderState) {
 		    case D3DTBLEND_MODULATE:
 		    case D3DTBLEND_MODULATEALPHA:
-		        glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		        pglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
 			break;
 		    default:
 		        ERR("Unhandled texture environment %ld !\n",dwRenderState);
@@ -260,17 +260,17 @@
 	    case D3DRENDERSTATE_CULLMODE:           /* 22 */
 	        switch ((D3DCULL) dwRenderState) {
 		    case D3DCULL_NONE:
-		         glDisable(GL_CULL_FACE);
+		         pglDisable(GL_CULL_FACE);
 			 break;
 		    case D3DCULL_CW:
-			 glEnable(GL_CULL_FACE);
-			 glFrontFace(GL_CCW);
-			 glCullFace(GL_BACK);
+			 pglEnable(GL_CULL_FACE);
+			 pglFrontFace(GL_CCW);
+			 pglCullFace(GL_BACK);
 			 break;
 		    case D3DCULL_CCW:
-			 glEnable(GL_CULL_FACE);
-			 glFrontFace(GL_CW);
-			 glCullFace(GL_BACK);
+			 pglEnable(GL_CULL_FACE);
+			 pglFrontFace(GL_CW);
+			 pglCullFace(GL_BACK);
 			 break;
 		    default:
 			 ERR("Unhandled cull mode %ld !\n",dwRenderState);
@@ -278,27 +278,27 @@
 	        break;
 
 	    case D3DRENDERSTATE_ZFUNC:            /* 23 */
-	        glDepthFunc(convert_D3D_compare_to_GL(dwRenderState));
+	        pglDepthFunc(convert_D3D_compare_to_GL(dwRenderState));
 	        break;
 	      
 	    case D3DRENDERSTATE_ALPHAREF:   /* 24 */
 	    case D3DRENDERSTATE_ALPHAFUNC:  /* 25 */
-	        glAlphaFunc(convert_D3D_compare_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_ALPHAFUNC - 1]),
+	        pglAlphaFunc(convert_D3D_compare_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_ALPHAFUNC - 1]),
 			    (lpStateBlock->render_state[D3DRENDERSTATE_ALPHAREF - 1] & 0x000000FF) / 255.0);
 	        break;
 
 	    case D3DRENDERSTATE_DITHERENABLE:     /* 26 */
 	        if (dwRenderState)
-		    glEnable(GL_DITHER);
+		    pglEnable(GL_DITHER);
 		else
-		    glDisable(GL_DITHER);
+		    pglDisable(GL_DITHER);
 	        break;
 
 	    case D3DRENDERSTATE_ALPHABLENDENABLE:   /* 27 */
 	        if (dwRenderState) {
-		    glEnable(GL_BLEND);
+		    pglEnable(GL_BLEND);
 		} else {
-		    glDisable(GL_BLEND);
+		    pglDisable(GL_BLEND);
 		}
 	        break;
 	      
@@ -327,7 +327,7 @@
 		color[1] = ((dwRenderState >>  8) & 0xFF)/255.0f;
 		color[2] = ((dwRenderState >>  0) & 0xFF)/255.0f;
 		color[3] = ((dwRenderState >> 24) & 0xFF)/255.0f;
-		glFogfv(GL_FOG_COLOR,color);
+		pglFogfv(GL_FOG_COLOR,color);
 		/* Note: glFogiv does not seem to work */
 	    } break;
 
@@ -339,28 +339,28 @@
 		break;
 
 	    case D3DRENDERSTATE_FOGDENSITY:    /* 38 */
-		glFogi(GL_FOG_DENSITY,*(float*)&dwRenderState);
+		pglFogi(GL_FOG_DENSITY,*(float*)&dwRenderState);
 		break;
 
 	    case D3DRENDERSTATE_COLORKEYENABLE:     /* 41 */
 	        /* This needs to be fixed. */
 	        if (dwRenderState)
-		    glEnable(GL_BLEND);
+		    pglEnable(GL_BLEND);
 		else
-		    glDisable(GL_BLEND);
+		    pglDisable(GL_BLEND);
 	        break;
 
 	    case D3DRENDERSTATE_ZBIAS: /* 47 */
 	        /* This is a tad bit hacky.. But well, no idea how to do it better in OpenGL :-/ */
 	        if (dwRenderState == 0) {
-		    glDisable(GL_POLYGON_OFFSET_FILL);
-		    glDisable(GL_POLYGON_OFFSET_LINE);
-		    glDisable(GL_POLYGON_OFFSET_POINT);
+		    pglDisable(GL_POLYGON_OFFSET_FILL);
+		    pglDisable(GL_POLYGON_OFFSET_LINE);
+		    pglDisable(GL_POLYGON_OFFSET_POINT);
 		} else {
-		    glEnable(GL_POLYGON_OFFSET_FILL);
-		    glEnable(GL_POLYGON_OFFSET_LINE);
-		    glEnable(GL_POLYGON_OFFSET_POINT);
-		    glPolygonOffset(1.0, dwRenderState * 1.0);
+		    pglEnable(GL_POLYGON_OFFSET_FILL);
+		    pglEnable(GL_POLYGON_OFFSET_LINE);
+		    pglEnable(GL_POLYGON_OFFSET_POINT);
+		    pglPolygonOffset(1.0, dwRenderState * 1.0);
 		}
 	        break;
 	      
@@ -369,15 +369,15 @@
 
 	    case D3DRENDERSTATE_STENCILENABLE:    /* 52 */
 	        if (dwRenderState)
-		    glEnable(GL_STENCIL_TEST);
+		    pglEnable(GL_STENCIL_TEST);
 		else
-		    glDisable(GL_STENCIL_TEST);
+		    pglDisable(GL_STENCIL_TEST);
 		break;
 	    
 	    case D3DRENDERSTATE_STENCILFAIL:      /* 53 */
 	    case D3DRENDERSTATE_STENCILZFAIL:     /* 54 */
 	    case D3DRENDERSTATE_STENCILPASS:      /* 55 */
-		glStencilOp(convert_D3D_stencilop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_STENCILFAIL - 1]),
+		pglStencilOp(convert_D3D_stencilop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_STENCILFAIL - 1]),
 			    convert_D3D_stencilop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_STENCILZFAIL - 1]),
 			    convert_D3D_stencilop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_STENCILPASS - 1]));
 		break;
@@ -385,13 +385,13 @@
 	    case D3DRENDERSTATE_STENCILFUNC:      /* 56 */
 	    case D3DRENDERSTATE_STENCILREF:       /* 57 */
 	    case D3DRENDERSTATE_STENCILMASK:      /* 58 */
-		glStencilFunc(convert_D3D_compare_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_STENCILFUNC - 1]),
+		pglStencilFunc(convert_D3D_compare_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_STENCILFUNC - 1]),
 			      lpStateBlock->render_state[D3DRENDERSTATE_STENCILREF - 1],
 			      lpStateBlock->render_state[D3DRENDERSTATE_STENCILMASK - 1]);
 		break;
 	  
 	    case D3DRENDERSTATE_STENCILWRITEMASK: /* 59 */
-	        glStencilMask(dwRenderState);
+	        pglStencilMask(dwRenderState);
 	        break;
 
 	    case D3DRENDERSTATE_CLIPPING:          /* 136 */
@@ -407,9 +407,9 @@
 		    }
 		    for (i = 0, runner = 0x00000001; i < This->max_clipping_planes; i++, runner = (runner << 1)) {
 			if (mask & runner) {
-			    glEnable(GL_CLIP_PLANE0 + i);
+			    pglEnable(GL_CLIP_PLANE0 + i);
 			} else {
-			    glDisable(GL_CLIP_PLANE0 + i);
+			    pglDisable(GL_CLIP_PLANE0 + i);
 			}
 		    }
 		}
@@ -417,9 +417,9 @@
 
 	    case D3DRENDERSTATE_LIGHTING:    /* 137 */
 	        if (dwRenderState)
-		    glEnable(GL_LIGHTING);
+		    pglEnable(GL_LIGHTING);
 		else
-		    glDisable(GL_LIGHTING);
+		    pglDisable(GL_LIGHTING);
 	        break;
 		
 	    case D3DRENDERSTATE_AMBIENT: {            /* 139 */
@@ -429,7 +429,7 @@
 		light[1] = ((dwRenderState >>  8) & 0xFF) / 255.0;
 		light[2] = ((dwRenderState >>  0) & 0xFF) / 255.0;
 		light[3] = ((dwRenderState >> 24) & 0xFF) / 255.0;
-		glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float *) light);
+		pglLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float *) light);
 	    } break;
 
 	    case D3DRENDERSTATE_COLORVERTEX:          /* 141 */
@@ -438,18 +438,18 @@
 		  
 	    case D3DRENDERSTATE_LOCALVIEWER:          /* 142 */
 	        if (dwRenderState)
-		    glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
+		    pglLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
 		else
-		    glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
+		    pglLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
 		break;
 
 	    case D3DRENDERSTATE_NORMALIZENORMALS:     /* 143 */
 	        if (dwRenderState) {
-		    glEnable(GL_NORMALIZE);
-		    glEnable(GL_RESCALE_NORMAL);
+		    pglEnable(GL_NORMALIZE);
+		    pglEnable(GL_RESCALE_NORMAL);
 		} else {
-		    glDisable(GL_NORMALIZE);
-		    glDisable(GL_RESCALE_NORMAL);
+		    pglDisable(GL_NORMALIZE);
+		    pglDisable(GL_RESCALE_NORMAL);
 		}
 		break;
 
Index: dlls/ddraw/mesa_private.h
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/mesa_private.h,v
retrieving revision 1.42
diff -u -r1.42 mesa_private.h
--- dlls/ddraw/mesa_private.h	12 May 2003 03:09:17 -0000	1.42
+++ dlls/ddraw/mesa_private.h	15 May 2003 04:10:46 -0000
@@ -26,26 +26,7 @@
 
 #ifdef HAVE_OPENGL
 
-#undef APIENTRY
-#undef CALLBACK
-#undef WINAPI
-
-#define XMD_H /* This is to prevent the Xmd.h inclusion bug :-/ */
-#include <GL/gl.h>
-#include <GL/glx.h>
-#ifdef HAVE_GL_GLEXT_H
-# include <GL/glext.h>
-#endif
-#undef  XMD_H
-
-#undef APIENTRY
-#undef CALLBACK
-#undef WINAPI
-
-/* Redefines the constants */
-#define CALLBACK    __stdcall
-#define WINAPI      __stdcall
-#define APIENTRY    WINAPI
+#include "gl_private.h"
 
 /* X11 locking */
 
Index: dlls/ddraw/d3ddevice/mesa.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/d3ddevice/mesa.c,v
retrieving revision 1.97
diff -u -r1.97 mesa.c
--- dlls/ddraw/d3ddevice/mesa.c	13 May 2003 00:41:58 -0000	1.97
+++ dlls/ddraw/d3ddevice/mesa.c	15 May 2003 04:10:47 -0000
@@ -109,7 +109,7 @@
 {
     TRACE("(%p, %ld)\n",(Display*)display,(Drawable)drawable);
     ENTER_GL();
-    glXSwapBuffers((Display*)display,(Drawable)drawable);
+    pglXSwapBuffers((Display*)display,(Drawable)drawable);
     LEAVE_GL();
     return TRUE;
 }
@@ -124,7 +124,7 @@
    
     ENTER_GL();
     TRACE("glxMakeCurrent %p, %ld, %p\n",glThis->display,glThis->drawable, glThis->gl_context);
-    if (glXMakeCurrent(glThis->display, glThis->drawable, glThis->gl_context) == False) {
+    if (pglXMakeCurrent(glThis->display, glThis->drawable, glThis->gl_context) == False) {
 	ERR("Error in setting current context (context %p drawable %ld)!\n",
 	    glThis->gl_context, glThis->drawable);
     }
@@ -265,10 +265,10 @@
     devcap = (Mesa_DeviceCapabilities *) private->device_capabilities;
 
     ENTER_GL();
-    ext_string = glGetString(GL_EXTENSIONS);
+    ext_string = pglGetString(GL_EXTENSIONS);
     /* Query for the ColorTable Extension */
     if (strstr(ext_string, "GL_EXT_paletted_texture")) {
-        devcap->ptr_ColorTableEXT = (PFNGLCOLORTABLEEXTPROC) glXGetProcAddressARB("glColorTableEXT");
+        devcap->ptr_ColorTableEXT = (PFNGLCOLORTABLEEXTPROC) pglXGetProcAddressARB("glColorTableEXT");
 	TRACE("Color table extension supported (function at %p)\n", devcap->ptr_ColorTableEXT);
     } else {
         TRACE("Color table extension not found.\n");
@@ -348,7 +348,7 @@
 	DeleteCriticalSection(&(This->crit));
 	
 	ENTER_GL();
-	glXDestroyContext(glThis->display, glThis->gl_context);
+	pglXDestroyContext(glThis->display, glThis->gl_context);
 	LEAVE_GL();
 	HeapFree(GetProcessHeap(), 0, This->clipping_planes);
 
@@ -694,32 +694,32 @@
     switch (d3dpt) {
         case D3DPT_POINTLIST:
             TRACE("Start POINTS\n");
-	    glBegin(GL_POINTS);
+	    pglBegin(GL_POINTS);
 	    break;
 
 	case D3DPT_LINELIST:
 	    TRACE("Start LINES\n");
-	    glBegin(GL_LINES);
+	    pglBegin(GL_LINES);
 	    break;
 
 	case D3DPT_LINESTRIP:
 	    TRACE("Start LINE_STRIP\n");
-	    glBegin(GL_LINE_STRIP);
+	    pglBegin(GL_LINE_STRIP);
 	    break;
 
 	case D3DPT_TRIANGLELIST:
 	    TRACE("Start TRIANGLES\n");
-	    glBegin(GL_TRIANGLES);
+	    pglBegin(GL_TRIANGLES);
 	    break;
 
 	case D3DPT_TRIANGLESTRIP:
 	    TRACE("Start TRIANGLE_STRIP\n");
-	    glBegin(GL_TRIANGLE_STRIP);
+	    pglBegin(GL_TRIANGLE_STRIP);
 	    break;
 
 	case D3DPT_TRIANGLEFAN:
 	    TRACE("Start TRIANGLE_FAN\n");
-	    glBegin(GL_TRIANGLE_FAN);
+	    pglBegin(GL_TRIANGLE_FAN);
 	    break;
 
 	default:
@@ -787,7 +787,7 @@
              if no fogging state change occured */
     if (This->state_block.render_state[D3DRENDERSTATE_FOGENABLE - 1] == TRUE) {
         if (vertex_transformed == TRUE) {
-	    glDisable(GL_FOG);
+	    pglDisable(GL_FOG);
 	    /* Now check if our fog_table still corresponds to the current vertex color.
 	       Element '0x..00' is always the fog color as it corresponds to maximum fog intensity */
 	    if ((glThis->fog_table[0 * 0x10000 + 0x0000] != ((This->state_block.render_state[D3DRENDERSTATE_FOGCOLOR - 1] >>  0) & 0xFF)) ||
@@ -799,32 +799,32 @@
 	} else {
 	    if (This->state_block.render_state[D3DRENDERSTATE_FOGTABLEMODE - 1] != D3DFOG_NONE) {
 	        switch (This->state_block.render_state[D3DRENDERSTATE_FOGTABLEMODE - 1]) {
-                    case D3DFOG_LINEAR: glFogi(GL_FOG_MODE, GL_LINEAR); break; 
-		    case D3DFOG_EXP:    glFogi(GL_FOG_MODE, GL_EXP); break; 
-		    case D3DFOG_EXP2:   glFogi(GL_FOG_MODE, GL_EXP2); break;
+                    case D3DFOG_LINEAR: pglFogi(GL_FOG_MODE, GL_LINEAR); break; 
+		    case D3DFOG_EXP:    pglFogi(GL_FOG_MODE, GL_EXP); break; 
+		    case D3DFOG_EXP2:   pglFogi(GL_FOG_MODE, GL_EXP2); break;
 		}
 		if (vertex_lit == FALSE) {
-		    glFogf(GL_FOG_START, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGSTART - 1]);
-		    glFogf(GL_FOG_END, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGEND - 1]);
+		    pglFogf(GL_FOG_START, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGSTART - 1]);
+		    pglFogf(GL_FOG_END, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGEND - 1]);
 		} else {
 		    /* Special case of 'pixel fog' */
-		    glFogf(GL_FOG_START, ZfromZproj(This, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGSTART - 1]));
-		    glFogf(GL_FOG_END, ZfromZproj(This, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGEND - 1]));
+		    pglFogf(GL_FOG_START, ZfromZproj(This, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGSTART - 1]));
+		    pglFogf(GL_FOG_END, ZfromZproj(This, *(float*)&This->state_block.render_state[D3DRENDERSTATE_FOGEND - 1]));
 		}
-		glEnable(GL_FOG);
+		pglEnable(GL_FOG);
 	    } else {
-                glDisable(GL_FOG);
+                pglDisable(GL_FOG);
 	    }
         }
     } else {
-	glDisable(GL_FOG);
+	pglDisable(GL_FOG);
     }
     
     /* Handle the 'no-normal' case */
     if ((vertex_lit == FALSE) && (This->state_block.render_state[D3DRENDERSTATE_LIGHTING - 1] == TRUE))
-        glEnable(GL_LIGHTING);
+        pglEnable(GL_LIGHTING);
     else 
-	glDisable(GL_LIGHTING);
+	pglDisable(GL_LIGHTING);
 
     /* Handle the code for pre-vertex material properties */
     if (vertex_transformed == FALSE) {
@@ -834,7 +834,7 @@
 		(This->state_block.render_state[D3DRENDERSTATE_AMBIENTMATERIALSOURCE - 1] != D3DMCS_MATERIAL) ||
 		(This->state_block.render_state[D3DRENDERSTATE_EMISSIVEMATERIALSOURCE - 1] != D3DMCS_MATERIAL) ||
 		(This->state_block.render_state[D3DRENDERSTATE_SPECULARMATERIALSOURCE - 1] != D3DMCS_MATERIAL)) {
-	        glEnable(GL_COLOR_MATERIAL);
+	        pglEnable(GL_COLOR_MATERIAL);
 	    }
 	}
     }
@@ -950,40 +950,40 @@
 
 /* These are the various handler used in the generic path */
 inline static void handle_xyz(D3DVALUE *coords) {
-    glVertex3fv(coords);
+    pglVertex3fv(coords);
 }
 inline static void handle_xyzrhw(D3DVALUE *coords) {
     if (coords[3] < 1e-8)
-        glVertex3fv(coords);
+        pglVertex3fv(coords);
     else {
         GLfloat w = 1.0 / coords[3];
 	
-        glVertex4f(coords[0] * w,
+        pglVertex4f(coords[0] * w,
 		   coords[1] * w,
 		   coords[2] * w,
 		   w);
     }
 }
 inline static void handle_normal(D3DVALUE *coords) {
-    glNormal3fv(coords);
+    pglNormal3fv(coords);
 }
 
 inline static void handle_diffuse_base(STATEBLOCK *sb, DWORD *color) {
     if ((sb->render_state[D3DRENDERSTATE_ALPHATESTENABLE - 1] == TRUE) ||
 	(sb->render_state[D3DRENDERSTATE_ALPHABLENDENABLE - 1] == TRUE)) {
-        glColor4ub((*color >> 16) & 0xFF,
+        pglColor4ub((*color >> 16) & 0xFF,
 		   (*color >>  8) & 0xFF,
 		   (*color >>  0) & 0xFF,
 		   (*color >> 24) & 0xFF);
     } else {
-        glColor3ub((*color >> 16) & 0xFF,
+        pglColor3ub((*color >> 16) & 0xFF,
 		   (*color >>  8) & 0xFF,
 		   (*color >>  0) & 0xFF);    
     }
 }
 
 inline static void handle_specular_base(STATEBLOCK *sb, DWORD *color) {
-    glColor4ub((*color >> 16) & 0xFF,
+    pglColor4ub((*color >> 16) & 0xFF,
 	       (*color >>  8) & 0xFF,
 	       (*color >>  0) & 0xFF,
 	       (*color >> 24) & 0xFF); /* No idea if the alpha field is really used.. */
@@ -994,20 +994,20 @@
 	(sb->render_state[D3DRENDERSTATE_LIGHTING - 1] == TRUE) &&
 	(sb->render_state[D3DRENDERSTATE_COLORVERTEX - 1] == TRUE)) {
         if (sb->render_state[D3DRENDERSTATE_DIFFUSEMATERIALSOURCE - 1] == D3DMCS_COLOR1) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
 	    handle_diffuse_base(sb, color);
 	}
 	if (sb->render_state[D3DRENDERSTATE_AMBIENTMATERIALSOURCE - 1] == D3DMCS_COLOR1) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
 	    handle_diffuse_base(sb, color);
 	}
 	if ((sb->render_state[D3DRENDERSTATE_SPECULARMATERIALSOURCE - 1] == D3DMCS_COLOR1) &&
 	    (sb->render_state[D3DRENDERSTATE_SPECULARENABLE - 1] == TRUE)) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
 	    handle_diffuse_base(sb, color);
 	}
 	if (sb->render_state[D3DRENDERSTATE_EMISSIVEMATERIALSOURCE - 1] == D3DMCS_COLOR1) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION);
 	    handle_diffuse_base(sb, color);
 	}
     } else {
@@ -1020,20 +1020,20 @@
 	(sb->render_state[D3DRENDERSTATE_LIGHTING - 1] == TRUE) &&
 	(sb->render_state[D3DRENDERSTATE_COLORVERTEX - 1] == TRUE)) {
         if (sb->render_state[D3DRENDERSTATE_DIFFUSEMATERIALSOURCE - 1] == D3DMCS_COLOR2) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
 	    handle_specular_base(sb, color);
 	}
 	if (sb->render_state[D3DRENDERSTATE_AMBIENTMATERIALSOURCE - 1] == D3DMCS_COLOR2) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
 	    handle_specular_base(sb, color);
 	}
 	if ((sb->render_state[D3DRENDERSTATE_SPECULARMATERIALSOURCE - 1] == D3DMCS_COLOR2) &&
 	    (sb->render_state[D3DRENDERSTATE_SPECULARENABLE - 1] == TRUE)) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
 	    handle_specular_base(sb, color);
 	}
 	if (sb->render_state[D3DRENDERSTATE_EMISSIVEMATERIALSOURCE - 1] == D3DMCS_COLOR2) {
-	    glColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION);
+	    pglColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION);
 	    handle_specular_base(sb, color);
 	}
     }
@@ -1067,11 +1067,11 @@
 }
 
 inline static void handle_texture(D3DVALUE *coords) {
-    glTexCoord2fv(coords);
+    pglTexCoord2fv(coords);
 }
 inline static void handle_textures(D3DVALUE *coords, int tex_index) {
     /* For the moment, draw only the first texture.. */
-    if (tex_index == 0) glTexCoord2fv(coords);
+    if (tex_index == 0) pglTexCoord2fv(coords);
 }
 
 static void draw_primitive_strided(IDirect3DDeviceImpl *This,
@@ -1104,7 +1104,7 @@
     if ((d3dvtVertexType & D3DFVF_POSITION_MASK) != D3DFVF_XYZ) {
         vertex_lighted = TRUE;
     } else {
-        if ((d3dvtVertexType & D3DFVF_NORMAL) == 0) glNormal3f(0.0, 0.0, 0.0);
+        if ((d3dvtVertexType & D3DFVF_NORMAL) == 0) pglNormal3f(0.0, 0.0, 0.0);
     }
     
     draw_primitive_handle_GL_state(This,
@@ -1270,10 +1270,10 @@
         ERR(" matrix weighting not handled yet....\n");
     }
     
-    glEnd();
+    pglEnd();
 
     /* Whatever the case, disable the color material stuff */
-    glDisable(GL_COLOR_MATERIAL);
+    pglDisable(GL_COLOR_MATERIAL);
 
     LEAVE_GL();
     TRACE("End\n");    
@@ -1541,15 +1541,15 @@
     }
 
     if (is_color) {
-        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT + num, src);
+        pglTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT + num, src);
 	if (is_alpha_replicate) {
-	    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT + num, is_complement ? GL_ONE_MINUS_SRC_ALPHA : GL_SRC_ALPHA);
+	    pglTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT + num, is_complement ? GL_ONE_MINUS_SRC_ALPHA : GL_SRC_ALPHA);
 	} else {
-	    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT + num, is_complement ? GL_ONE_MINUS_SRC_COLOR : GL_SRC_COLOR);
+	    pglTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT + num, is_complement ? GL_ONE_MINUS_SRC_COLOR : GL_SRC_COLOR);
 	}
     } else {
-        glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT + num, src);
-	glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT + num, is_complement ? GL_ONE_MINUS_SRC_ALPHA : GL_SRC_ALPHA);
+        pglTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT + num, src);
+	pglTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT + num, is_complement ? GL_ONE_MINUS_SRC_ALPHA : GL_SRC_ALPHA);
     }
 
     return handled;
@@ -1628,7 +1628,7 @@
 		}
 	    }
 
-	    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+	    pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
 			    convert_min_filter_to_GL(This->state_block.texture_stage_state[dwStage][D3DTSS_MINFILTER - 1],
 						     This->state_block.texture_stage_state[dwStage][D3DTSS_MIPFILTER - 1]));
 	    break;
@@ -1641,7 +1641,7 @@
 		    default: FIXME(" Unhandled stage type : D3DTSS_MAGFILTER => %08lx\n", dwState); break;
 		}
 	    }
-	    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, convert_mag_filter_to_GL(dwState));
+	    pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, convert_mag_filter_to_GL(dwState));
             break;
 
         case D3DTSS_ADDRESS:
@@ -1661,10 +1661,10 @@
 	    }
 	    if ((d3dTexStageStateType == D3DTSS_ADDRESS) ||
 		(d3dTexStageStateType == D3DTSS_ADDRESSU))
-	        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, arg);
+	        pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, arg);
 	    if ((d3dTexStageStateType == D3DTSS_ADDRESS) ||
 		(d3dTexStageStateType == D3DTSS_ADDRESSV))
-	        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, arg);
+	        pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, arg);
         } break;
 
 	case D3DTSS_ALPHAOP:
@@ -1706,18 +1706,18 @@
 	    }
 
             if ((d3dTexStageStateType == D3DTSS_COLOROP) && (dwState == D3DTOP_DISABLE) && (dwStage == 0)) {
-                glDisable(GL_TEXTURE_2D);
+                pglDisable(GL_TEXTURE_2D);
 		TRACE(" disabling 2D texturing.\n");
             } else {
 	        /* Re-enable texturing */
 	        if ((dwStage == 0) && (This->current_texture[0] != NULL)) {
-		    glEnable(GL_TEXTURE_2D);
+		    pglEnable(GL_TEXTURE_2D);
 		    TRACE(" enabling 2D texturing.\n");
 		}
 		
                 /* Re-Enable GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT */
                 if (dwState != D3DTOP_DISABLE) {
-                    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+                    pglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
                 }
 
                 /* Now set up the operand correctly */
@@ -1730,7 +1730,7 @@
 
 		    case D3DTOP_SELECTARG1:
 		    case D3DTOP_SELECTARG2:
-			glTexEnvi(GL_TEXTURE_ENV, parm, GL_REPLACE);
+			pglTexEnvi(GL_TEXTURE_ENV, parm, GL_REPLACE);
 			break;
 			
 		    case D3DTOP_MODULATE4X:
@@ -1738,17 +1738,17 @@
 		    case D3DTOP_MODULATE2X:
 			scale = scale * 2;  /* Drop through */
 		    case D3DTOP_MODULATE:
-			glTexEnvi(GL_TEXTURE_ENV, parm, GL_MODULATE);
+			pglTexEnvi(GL_TEXTURE_ENV, parm, GL_MODULATE);
 			break;
 
 		    case D3DTOP_ADD:
-			glTexEnvi(GL_TEXTURE_ENV, parm, GL_ADD);
+			pglTexEnvi(GL_TEXTURE_ENV, parm, GL_ADD);
 			break;
 
 		    case D3DTOP_ADDSIGNED2X:
 			scale = scale * 2;  /* Drop through */
 		    case D3DTOP_ADDSIGNED:
-			glTexEnvi(GL_TEXTURE_ENV, parm, GL_ADD_SIGNED_EXT);
+			pglTexEnvi(GL_TEXTURE_ENV, parm, GL_ADD_SIGNED_EXT);
 			break;
 
 		    default:
@@ -1779,9 +1779,9 @@
 	    
 	    if (handled) {
 	        if (d3dTexStageStateType == D3DTSS_ALPHAOP) {
-		    glTexEnvi(GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale);
+		    pglTexEnvi(GL_TEXTURE_ENV, GL_ALPHA_SCALE, scale);
 		} else {
-		    glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, scale);
+		    pglTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, scale);
 		}			
 		TRACE(" Stage type is : %s => %s\n", type, value);
 	    } else {
@@ -1859,7 +1859,7 @@
 	    color[2] = ((dwState >>  0) & 0xFF) / 255.0;
 	    color[3] = ((dwState >> 24) & 0xFF) / 255.0;
 
-	    glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color);
+	    pglTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color);
 	} break;
 	    
 	case D3DTSS_TEXCOORDINDEX: {
@@ -1939,8 +1939,8 @@
 	This->current_texture[dwStage] = NULL;
 
         TRACE(" disabling 2D texturing.\n");
-	glBindTexture(GL_TEXTURE_2D, 0);
-        glDisable(GL_TEXTURE_2D);
+	pglBindTexture(GL_TEXTURE_2D, 0);
+        pglDisable(GL_TEXTURE_2D);
     } else {
         IDirectDrawSurfaceImpl *tex_impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, lpTexture2);
 	GLint max_mip_level;
@@ -1950,7 +1950,7 @@
 
 	if (This->state_block.texture_stage_state[dwStage][D3DTSS_COLOROP - 1] != D3DTOP_DISABLE) {
 	    /* Do not re-enable texturing if it was disabled due to the COLOROP code */
-	    glEnable(GL_TEXTURE_2D);
+	    pglEnable(GL_TEXTURE_2D);
 	    TRACE(" enabling 2D texturing.\n");
 	}
 	gltex_upload_texture(tex_impl);
@@ -1961,12 +1961,12 @@
 	    max_mip_level = tex_impl->surface_desc.u2.dwMipMapCount - 1;
 	}
 	
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
+	pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 
 			convert_mag_filter_to_GL(This->state_block.texture_stage_state[dwStage][D3DTSS_MAGFILTER - 1]));
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+	pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
 			convert_min_filter_to_GL(This->state_block.texture_stage_state[dwStage][D3DTSS_MINFILTER - 1],
 						  This->state_block.texture_stage_state[dwStage][D3DTSS_MIPFILTER - 1]));
-	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, max_mip_level);
+	pglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, max_mip_level);
     }
     LEAVE_GL();
     
@@ -2001,19 +2001,19 @@
     
     This->current_material = *lpMat;
 
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_DIFFUSE,
 		 (float *) &(This->current_material.u.diffuse));
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_AMBIENT,
 		 (float *) &(This->current_material.u1.ambient));
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_SPECULAR,
 		 (float *) &(This->current_material.u2.specular));
-    glMaterialfv(GL_FRONT_AND_BACK,
+    pglMaterialfv(GL_FRONT_AND_BACK,
 		 GL_EMISSION,
 		 (float *) &(This->current_material.u3.emissive));
-    glMaterialf(GL_FRONT_AND_BACK,
+    pglMaterialf(GL_FRONT_AND_BACK,
 		GL_SHININESS,
 		This->current_material.u4.power); /* Not sure about this... */
 
@@ -2043,34 +2043,34 @@
 	    float direction[4];
 	    float cut_off = 180.0;
 	    
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_AMBIENT,  (float *) &(lpLight->dcvAmbient));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_DIFFUSE,  (float *) &(lpLight->dcvDiffuse));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPECULAR, (float *) &(lpLight->dcvSpecular));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_CUTOFF, &cut_off);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_AMBIENT,  (float *) &(lpLight->dcvAmbient));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_DIFFUSE,  (float *) &(lpLight->dcvDiffuse));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPECULAR, (float *) &(lpLight->dcvSpecular));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_CUTOFF, &cut_off);
 
 	    direction[0] = lpLight->dvDirection.u1.x;
 	    direction[1] = lpLight->dvDirection.u2.y;
 	    direction[2] = lpLight->dvDirection.u3.z;
 	    direction[3] = 0.0;
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_POSITION, (float *) direction);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_POSITION, (float *) direction);
 	} break;
 
         case D3DLIGHT_POINT: {
 	    float position[4];
 	    float cut_off = 180.0;
 
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_AMBIENT,  (float *) &(lpLight->dcvAmbient));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_DIFFUSE,  (float *) &(lpLight->dcvDiffuse));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPECULAR, (float *) &(lpLight->dcvSpecular));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_AMBIENT,  (float *) &(lpLight->dcvAmbient));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_DIFFUSE,  (float *) &(lpLight->dcvDiffuse));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPECULAR, (float *) &(lpLight->dcvSpecular));
 	    position[0] = lpLight->dvPosition.u1.x;
 	    position[1] = lpLight->dvPosition.u2.y;
 	    position[2] = lpLight->dvPosition.u3.z;
 	    position[3] = 1.0;
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_POSITION, (float *) position);
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_CONSTANT_ATTENUATION, &(lpLight->dvAttenuation0));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_LINEAR_ATTENUATION, &(lpLight->dvAttenuation1));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_QUADRATIC_ATTENUATION, &(lpLight->dvAttenuation2));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_CUTOFF, &cut_off);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_POSITION, (float *) position);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_CONSTANT_ATTENUATION, &(lpLight->dvAttenuation0));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_LINEAR_ATTENUATION, &(lpLight->dvAttenuation1));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_QUADRATIC_ATTENUATION, &(lpLight->dvAttenuation2));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_CUTOFF, &cut_off);
 	} break;
 
         case D3DLIGHT_SPOT: {
@@ -2078,25 +2078,25 @@
 	    float position[4];
 	    float cut_off = 90.0 * (lpLight->dvPhi / M_PI);
 
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_AMBIENT,  (float *) &(lpLight->dcvAmbient));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_DIFFUSE,  (float *) &(lpLight->dcvDiffuse));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPECULAR, (float *) &(lpLight->dcvSpecular));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_AMBIENT,  (float *) &(lpLight->dcvAmbient));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_DIFFUSE,  (float *) &(lpLight->dcvDiffuse));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPECULAR, (float *) &(lpLight->dcvSpecular));
 
 	    direction[0] = lpLight->dvDirection.u1.x;
 	    direction[1] = lpLight->dvDirection.u2.y;
 	    direction[2] = lpLight->dvDirection.u3.z;
 	    direction[3] = 0.0;
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_DIRECTION, (float *) direction);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_DIRECTION, (float *) direction);
 	    position[0] = lpLight->dvPosition.u1.x;
 	    position[1] = lpLight->dvPosition.u2.y;
 	    position[2] = lpLight->dvPosition.u3.z;
 	    position[3] = 1.0;
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_POSITION, (float *) position);
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_CONSTANT_ATTENUATION, &(lpLight->dvAttenuation0));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_LINEAR_ATTENUATION, &(lpLight->dvAttenuation1));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_QUADRATIC_ATTENUATION, &(lpLight->dvAttenuation2));
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_CUTOFF, &cut_off);
-	    glLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_EXPONENT, &(lpLight->dvFalloff));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_POSITION, (float *) position);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_CONSTANT_ATTENUATION, &(lpLight->dvAttenuation0));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_LINEAR_ATTENUATION, &(lpLight->dvAttenuation1));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_QUADRATIC_ATTENUATION, &(lpLight->dvAttenuation2));
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_CUTOFF, &cut_off);
+	    pglLightfv(GL_LIGHT0 + dwLightIndex, GL_SPOT_EXPONENT, &(lpLight->dvFalloff));
 	    if ((lpLight->dvTheta != 0.0) || (lpLight->dvTheta != lpLight->dvPhi)) {
 	        WARN("dvTheta not fully supported yet !\n");
 	    }
@@ -2124,9 +2124,9 @@
 	    TRACE(" setting default light parameters...\n");
 	    GL_IDirect3DDeviceImpl_7_SetLight(iface, dwLightIndex, &(This->light_parameters[dwLightIndex]));
 	}
-	glEnable(GL_LIGHT0 + dwLightIndex);
+	pglEnable(GL_LIGHT0 + dwLightIndex);
     } else {
-        glDisable(GL_LIGHT0 + dwLightIndex);
+        pglDisable(GL_LIGHT0 + dwLightIndex);
     }
 
     return DD_OK;
@@ -2153,7 +2153,7 @@
     plane[3] = pPlaneEquation[3];
 
     /* XXX: is here also code needed to handle the transformation of the world? */
-    glClipPlane( GL_CLIP_PLANE0+dwIndex, (const GLdouble*)(&plane) );
+    pglClipPlane( GL_CLIP_PLANE0+dwIndex, (const GLdouble*)(&plane) );
 
     return D3D_OK;
 }
@@ -2400,41 +2400,41 @@
     ENTER_GL();
     if (dwFlags & D3DCLEAR_ZBUFFER) {
 	bitfield |= GL_DEPTH_BUFFER_BIT;
-        glGetBooleanv(GL_DEPTH_WRITEMASK, &ztest);
-	glDepthMask(GL_TRUE); /* Enables Z writing to be sure to delete also the Z buffer */
-	glGetFloatv(GL_DEPTH_CLEAR_VALUE, &old_z_clear_value);
-	glClearDepth(dvZ);
+        pglGetBooleanv(GL_DEPTH_WRITEMASK, &ztest);
+	pglDepthMask(GL_TRUE); /* Enables Z writing to be sure to delete also the Z buffer */
+	pglGetFloatv(GL_DEPTH_CLEAR_VALUE, &old_z_clear_value);
+	pglClearDepth(dvZ);
 	TRACE(" depth value : %f\n", dvZ);
     }
     if (dwFlags & D3DCLEAR_STENCIL) {
         bitfield |= GL_STENCIL_BUFFER_BIT;
-	glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &old_stencil_clear_value);
-	glClearStencil(dwStencil);
+	pglGetIntegerv(GL_STENCIL_CLEAR_VALUE, &old_stencil_clear_value);
+	pglClearStencil(dwStencil);
 	TRACE(" stencil value : %ld\n", dwStencil);
     }    
     if (dwFlags & D3DCLEAR_TARGET) {
         bitfield |= GL_COLOR_BUFFER_BIT;
-	glGetFloatv(GL_COLOR_CLEAR_VALUE, old_color_clear_value);
-	glClearColor(((dwColor >> 16) & 0xFF) / 255.0,
+	pglGetFloatv(GL_COLOR_CLEAR_VALUE, old_color_clear_value);
+	pglClearColor(((dwColor >> 16) & 0xFF) / 255.0,
 		     ((dwColor >>  8) & 0xFF) / 255.0,
 		     ((dwColor >>  0) & 0xFF) / 255.0,
 		     ((dwColor >> 24) & 0xFF) / 255.0);
 	TRACE(" color value (ARGB) : %08lx\n", dwColor);
     }
     
-    glClear(bitfield);
+    pglClear(bitfield);
     
     if (dwFlags & D3DCLEAR_ZBUFFER) {
-        glDepthMask(ztest);
-	glClearDepth(old_z_clear_value);
+        pglDepthMask(ztest);
+	pglClearDepth(old_z_clear_value);
     }
      if (dwFlags & D3DCLEAR_STENCIL) {
         bitfield |= GL_STENCIL_BUFFER_BIT;
-	glClearStencil(old_stencil_clear_value);
+	pglClearStencil(old_stencil_clear_value);
     }    
     if (dwFlags & D3DCLEAR_TARGET) {
         bitfield |= GL_COLOR_BUFFER_BIT;
-	glClearColor(old_color_clear_value[0],
+	pglClearColor(old_color_clear_value[0],
 		     old_color_clear_value[1],
 		     old_color_clear_value[2],
 		     old_color_clear_value[3]);
@@ -2486,8 +2486,8 @@
     trans_mat[ 2] = 0.0; trans_mat[ 6] = 0.0; trans_mat[10] = 1.0;           trans_mat[14] = -1.0;
     trans_mat[ 3] = 0.0; trans_mat[ 7] = 0.0; trans_mat[11] = 0.0;           trans_mat[15] =  1.0;
     
-    glMatrixMode(GL_MODELVIEW);
-    glLoadIdentity();
+    pglMatrixMode(GL_MODELVIEW);
+    pglLoadIdentity();
     /* See the OpenGL Red Book for an explanation of the following translation (in the OpenGL
        Correctness Tips section).
        
@@ -2496,9 +2496,9 @@
        one and we will have strange artifacts (as the rounding and stuff may give different results
        for different pixels, ie sometimes take the left pixel, sometimes the right).
     */
-    glTranslatef(0.375, 0.375, 0);
-    glMatrixMode(GL_PROJECTION);
-    glLoadMatrixf(trans_mat);
+    pglTranslatef(0.375, 0.375, 0);
+    pglMatrixMode(GL_PROJECTION);
+    pglLoadMatrixf(trans_mat);
 }
 
 void
@@ -2506,13 +2506,13 @@
 		       D3DMATRIX *world_mat, D3DMATRIX *view_mat, D3DMATRIX *proj_mat)
 {
     if ((matrices & (VIEWMAT_CHANGED|WORLDMAT_CHANGED)) != 0) {
-        glMatrixMode(GL_MODELVIEW);
-	glLoadMatrixf((float *) view_mat);
-	glMultMatrixf((float *) world_mat);
+        pglMatrixMode(GL_MODELVIEW);
+	pglLoadMatrixf((float *) view_mat);
+	pglMultMatrixf((float *) world_mat);
     }
     if ((matrices & PROJMAT_CHANGED) != 0) {
-	glMatrixMode(GL_PROJECTION);
-	glLoadMatrixf((float *) proj_mat);
+	pglMatrixMode(GL_PROJECTION);
+	pglLoadMatrixf((float *) proj_mat);
     }
 }
 
@@ -2548,15 +2548,15 @@
 	
 	ENTER_GL();
 
-	glGetIntegerv(GL_READ_BUFFER, &prev_read);
-	glFlush();
+	pglGetIntegerv(GL_READ_BUFFER, &prev_read);
+	pglFlush();
 	
 	if ((This->surface_desc.ddsCaps.dwCaps & (DDSCAPS_FRONTBUFFER|DDSCAPS_PRIMARYSURFACE)) != 0) {
 	    /* Application wants to lock the front buffer */
-	    glReadBuffer(GL_FRONT);
+	    pglReadBuffer(GL_FRONT);
 	} else if ((This->surface_desc.ddsCaps.dwCaps & (DDSCAPS_BACKBUFFER)) == (DDSCAPS_BACKBUFFER)) {
 	    /* Application wants to lock the back buffer */
-	    glReadBuffer(GL_BACK);
+	    pglReadBuffer(GL_BACK);
 	} else {
 	    WARN(" do not support 3D surface locking for this surface type - trying to use default buffer.\n");
 	}
@@ -2577,12 +2577,12 @@
 	    loc_rect = *pRect;
 	}
 #if 0
-	glReadPixels(loc_rect.left, loc_rect.top, loc_rect.right, loc_rect.bottom,
+	pglReadPixels(loc_rect.left, loc_rect.top, loc_rect.right, loc_rect.bottom,
 		     GL_RGB, buffer_type, ((char *)This->surface_desc.lpSurface
 					   + loc_rect.top * This->surface_desc.u1.lPitch
 					   + loc_rect.left * GET_BPP(This->surface_desc)));
 #endif
-	glReadBuffer(prev_read);
+	pglReadBuffer(prev_read);
 	LEAVE_GL();
     }
 }
@@ -2598,14 +2598,14 @@
 	
 	ENTER_GL();
 
-	glGetIntegerv(GL_DRAW_BUFFER, &prev_draw);
+	pglGetIntegerv(GL_DRAW_BUFFER, &prev_draw);
 
 	if ((This->surface_desc.ddsCaps.dwCaps & (DDSCAPS_FRONTBUFFER|DDSCAPS_PRIMARYSURFACE)) != 0) {
 	    /* Application wants to lock the front buffer */
-	    glDrawBuffer(GL_FRONT);
+	    pglDrawBuffer(GL_FRONT);
 	} else if ((This->surface_desc.ddsCaps.dwCaps & (DDSCAPS_BACKBUFFER)) == (DDSCAPS_BACKBUFFER)) {
 	    /* Application wants to lock the back buffer */
-	    glDrawBuffer(GL_BACK);
+	    pglDrawBuffer(GL_BACK);
 	} else {
 	    WARN(" do not support 3D surface unlocking for this surface type - trying to use default buffer.\n");
 	}
@@ -2620,12 +2620,12 @@
 	    LeaveCriticalSection(&(This->d3ddevice->crit));
 	    return;
 	}
-	glRasterPos2f(0.0, 0.0);
+	pglRasterPos2f(0.0, 0.0);
 #if 0
-	glDrawPixels(This->surface_desc.dwWidth, This->surface_desc.dwHeight, 
+	pglDrawPixels(This->surface_desc.dwWidth, This->surface_desc.dwHeight, 
 		     GL_RGB, buffer_type, This->surface_desc.lpSurface);
 #endif
-	glDrawBuffer(prev_draw);
+	pglDrawBuffer(prev_draw);
 
 	LEAVE_GL();
    }
@@ -2698,7 +2698,7 @@
         TRACE(" visual found\n");
     }
 
-    gl_object->gl_context = glXCreateContext(gl_object->display, vis,
+    gl_object->gl_context = pglXCreateContext(gl_object->display, vis,
 					     NULL, GL_TRUE);
 
     if (gl_object->gl_context == NULL) {
@@ -2774,7 +2774,7 @@
     TRACE(" current context set\n");
 
     /* allocate the clipping planes */
-    glGetIntegerv(GL_MAX_CLIP_PLANES,&max_clipping_planes);
+    pglGetIntegerv(GL_MAX_CLIP_PLANES,&max_clipping_planes);
     if (max_clipping_planes>32) {
 	object->max_clipping_planes=32;
     } else {
@@ -2783,13 +2783,13 @@
     TRACE(" capable of %d clipping planes\n", (int)object->max_clipping_planes );
     object->clipping_planes = (d3d7clippingplane*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, object->max_clipping_planes * sizeof(d3d7clippingplane));
 
-    glHint(GL_FOG_HINT,GL_NICEST);
+    pglHint(GL_FOG_HINT,GL_NICEST);
     
-    glClearColor(0.0, 0.0, 0.0, 0.0);
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-    glDrawBuffer(buffer);
-    glReadBuffer(buffer);
-    /* glDisable(GL_DEPTH_TEST); Need here to check for the presence of a ZBuffer and to reenable it when the ZBuffer is attached */
+    pglClearColor(0.0, 0.0, 0.0, 0.0);
+    pglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+    pglDrawBuffer(buffer);
+    pglReadBuffer(buffer);
+    /* pglDisable(GL_DEPTH_TEST); Need here to check for the presence of a ZBuffer and to reenable it when the ZBuffer is attached */
     LEAVE_GL();
 
     /* fill_device_capabilities(d3d->ddraw); */    
Index: dlls/ddraw/ddraw/hal.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw/hal.c,v
retrieving revision 1.9
diff -u -r1.9 hal.c
--- dlls/ddraw/ddraw/hal.c	13 Jan 2003 18:30:47 -0000	1.9
+++ dlls/ddraw/ddraw/hal.c	15 May 2003 04:10:48 -0000
@@ -139,8 +139,10 @@
     }
 
 #ifdef HAVE_OPENGL
-    if (d3d_hal_data.hwCaps.dwFlags & D3DDD_WINE_OPENGL_DEVICE) {
-        /*GL_DirectDraw_Init(&dd_gbl);*/
+    if( opengl_initialized ) {
+        if (d3d_hal_data.hwCaps.dwFlags & D3DDD_WINE_OPENGL_DEVICE) {
+            /*GL_DirectDraw_Init(&dd_gbl);*/
+        }
     }
 #endif
 
Index: dlls/ddraw/ddraw/main.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw/main.c,v
retrieving revision 1.40
diff -u -r1.40 main.c
--- dlls/ddraw/ddraw/main.c	11 May 2003 03:46:53 -0000	1.40
+++ dlls/ddraw/ddraw/main.c	15 May 2003 04:10:48 -0000
@@ -179,10 +179,11 @@
 	*obj = ICOM_INTERFACE(This, IDirectDraw4);
     }
 #ifdef HAVE_OPENGL
-    else if ( IsEqualGUID( &IID_IDirect3D  , refiid ) ||
+    else if ( opengl_initialized && 
+            ( IsEqualGUID( &IID_IDirect3D  , refiid ) ||
 	      IsEqualGUID( &IID_IDirect3D2 , refiid ) ||
 	      IsEqualGUID( &IID_IDirect3D3 , refiid ) ||
-	      IsEqualGUID( &IID_IDirect3D7 , refiid ) )
+	      IsEqualGUID( &IID_IDirect3D7 , refiid ) ) )
     {
         IDirect3DImpl *d3d_impl;
 	HRESULT ret_value;
Index: dlls/ddraw/ddraw/user.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/ddraw/user.c,v
retrieving revision 1.15
diff -u -r1.15 user.c
--- dlls/ddraw/ddraw/user.c	7 Mar 2003 20:34:34 -0000	1.15
+++ dlls/ddraw/ddraw/user.c	15 May 2003 04:10:49 -0000
@@ -174,8 +174,11 @@
 		| DDFXCAPS_BLTSTRETCHY | DDFXCAPS_BLTSTRETCHYN)
     This->caps.dwCaps |= DDCAPS_GDI | DDCAPS_PALETTE | BLIT_CAPS;
 #ifdef HAVE_OPENGL
-    /* Hack for D3D code */
-    This->caps.dwCaps |= DDCAPS_3D;
+    if( opengl_initialized )
+    {
+        /* Hack for D3D code */
+        This->caps.dwCaps |= DDCAPS_3D;
+    }
 #endif /* HAVE_OPENGL */
     This->caps.dwCaps2 |= DDCAPS2_CERTIFIED | DDCAPS2_NOPAGELOCKREQUIRED |
 			  DDCAPS2_PRIMARYGAMMA | DDCAPS2_WIDESURFACES;
@@ -199,8 +202,11 @@
 				 DDSCAPS_PRIMARYSURFACE | DDSCAPS_SYSTEMMEMORY |
 				 DDSCAPS_VIDEOMEMORY | DDSCAPS_VISIBLE;
 #ifdef HAVE_OPENGL
-    /* Hacks for D3D code */
-    This->caps.ddsCaps.dwCaps |= DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER;
+    if( opengl_initialized )
+    {
+        /* Hacks for D3D code */
+        This->caps.ddsCaps.dwCaps |= DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER;
+    }
 #endif /* HAVE_OPENGL */
     
     This->caps.ddsOldCaps.dwCaps = This->caps.ddsCaps.dwCaps;
Index: dlls/ddraw/dsurface/main.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/dsurface/main.c,v
retrieving revision 1.46
diff -u -r1.46 main.c
--- dlls/ddraw/dsurface/main.c	15 Mar 2003 01:11:14 -0000	1.46
+++ dlls/ddraw/dsurface/main.c	15 May 2003 04:10:49 -0000
@@ -179,48 +179,51 @@
 	return S_OK;
     }
 #ifdef HAVE_OPENGL
-    else if ( IsEqualGUID( &IID_D3DDEVICE_OpenGL, riid ) ||
-	      IsEqualGUID( &IID_IDirect3DHALDevice, riid) )
+    else if( opengl_initialized )
     {
-        IDirect3DDeviceImpl *d3ddevimpl;
-	HRESULT ret_value;
+        if ( IsEqualGUID( &IID_D3DDEVICE_OpenGL, riid ) ||
+	      IsEqualGUID( &IID_IDirect3DHALDevice, riid) )
+        {
+            IDirect3DDeviceImpl *d3ddevimpl;
+	    HRESULT ret_value;
 
-	ret_value = d3ddevice_create(&d3ddevimpl, This->ddraw_owner->d3d, This);
-	if (FAILED(ret_value)) return ret_value;
+	    ret_value = d3ddevice_create(&d3ddevimpl, This->ddraw_owner->d3d, This);
+	    if (FAILED(ret_value)) return ret_value;
 
-	*ppObj = ICOM_INTERFACE(d3ddevimpl, IDirect3DDevice);
-	TRACE(" returning Direct3DDevice interface at %p.\n", *ppObj);
+	    *ppObj = ICOM_INTERFACE(d3ddevimpl, IDirect3DDevice);
+	    TRACE(" returning Direct3DDevice interface at %p.\n", *ppObj);
 	
-	This->ref++; /* No idea if this is correct.. Need to check using real Windows */
-	return ret_value;
-    }
-    else if (IsEqualGUID( &IID_IDirect3DTexture, riid ) ||
-	     IsEqualGUID( &IID_IDirect3DTexture2, riid ))
-    {
-	HRESULT ret_value = S_OK;
+	    This->ref++; /* No idea if this is correct.. Need to check using real Windows */
+	    return ret_value;
+        }
+        else if (IsEqualGUID( &IID_IDirect3DTexture, riid ) ||
+	         IsEqualGUID( &IID_IDirect3DTexture2, riid ))
+        {
+	    HRESULT ret_value = S_OK;
 
-	if ((This->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE) == 0) return E_NOINTERFACE;
+	    if ((This->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE) == 0) return E_NOINTERFACE;
 
-	/* In case the texture surface was created before the D3D creation */
-	if (This->tex_private == NULL) {
-   	    if (This->ddraw_owner->d3d == NULL) {
-	        ERR("Texture created with no D3D object yet.. Not supported !\n");
-		return E_NOINTERFACE;
-	    }
+	    /* In case the texture surface was created before the D3D creation */
+	    if (This->tex_private == NULL) {
+   	        if (This->ddraw_owner->d3d == NULL) {
+	            ERR("Texture created with no D3D object yet.. Not supported !\n");
+		    return E_NOINTERFACE;
+	        }
 
-	    ret_value = This->ddraw_owner->d3d->create_texture(This->ddraw_owner->d3d, This, FALSE, This->mip_main);
-	    if (FAILED(ret_value)) return ret_value;
-	}
-	if (IsEqualGUID( &IID_IDirect3DTexture, riid )) {
-	    *ppObj = ICOM_INTERFACE(This, IDirect3DTexture);
-	    TRACE(" returning Direct3DTexture interface at %p.\n", *ppObj);
-	} else {
-	    *ppObj = ICOM_INTERFACE(This, IDirect3DTexture2);
-	    TRACE(" returning Direct3DTexture2 interface at %p.\n", *ppObj);
-	}
-	This->ref++;
-	return ret_value;
-    }    
+	        ret_value = This->ddraw_owner->d3d->create_texture(This->ddraw_owner->d3d, This, FALSE, This->mip_main);
+	        if (FAILED(ret_value)) return ret_value;
+	    }
+	    if (IsEqualGUID( &IID_IDirect3DTexture, riid )) {
+	        *ppObj = ICOM_INTERFACE(This, IDirect3DTexture);
+	        TRACE(" returning Direct3DTexture interface at %p.\n", *ppObj);
+	    } else {
+	        *ppObj = ICOM_INTERFACE(This, IDirect3DTexture2);
+	        TRACE(" returning Direct3DTexture2 interface at %p.\n", *ppObj);
+	    }
+	    This->ref++;
+	    return ret_value;
+        }    
+    }
 #endif
 
     return E_NOINTERFACE;
--- /dev/null	1994-07-18 08:46:18.000000000 +0900
+++ dlls/ddraw/gl_private.h	2003-05-15 12:58:01.000000000 +0900
@@ -0,0 +1,105 @@
+
+#ifndef __GRAPHICS_WINE_GL_PRIVATE_H
+#define __GRAPHICS_WINE_GL_PRIVATE_H
+
+#ifdef HAVE_OPENGL
+
+#undef APIENTRY
+#undef CALLBACK
+#undef WINAPI
+
+#define XMD_H /* This is to prevent the Xmd.h inclusion bug :-/ */
+#include <GL/gl.h>
+#include <GL/glx.h>
+#ifdef HAVE_GL_GLEXT_H
+# include <GL/glext.h>
+#endif
+#undef  XMD_H
+
+#undef APIENTRY
+#undef CALLBACK
+#undef WINAPI
+
+/* Redefines the constants */
+#define CALLBACK    __stdcall
+#define WINAPI      __stdcall
+#define APIENTRY    WINAPI
+
+#define MAKE_FUNCPTR(f) extern typeof(f) * p##f;
+
+MAKE_FUNCPTR(glAlphaFunc)
+MAKE_FUNCPTR(glBegin)
+MAKE_FUNCPTR(glBindTexture)
+MAKE_FUNCPTR(glBlendFunc)
+MAKE_FUNCPTR(glClear)
+MAKE_FUNCPTR(glClearColor)
+MAKE_FUNCPTR(glClearDepth)
+MAKE_FUNCPTR(glClearStencil)
+MAKE_FUNCPTR(glClipPlane)
+MAKE_FUNCPTR(glColor3f)
+MAKE_FUNCPTR(glColor3ub)
+MAKE_FUNCPTR(glColor4ub)
+MAKE_FUNCPTR(glColorMaterial)
+MAKE_FUNCPTR(glCullFace)
+MAKE_FUNCPTR(glDeleteTextures)
+MAKE_FUNCPTR(glDepthFunc)
+MAKE_FUNCPTR(glDepthMask)
+MAKE_FUNCPTR(glDisable)
+MAKE_FUNCPTR(glDrawBuffer)
+MAKE_FUNCPTR(glDrawPixels)
+MAKE_FUNCPTR(glEnable)
+MAKE_FUNCPTR(glEnd)
+MAKE_FUNCPTR(glFlush)
+MAKE_FUNCPTR(glFogf)
+MAKE_FUNCPTR(glFogfv)
+MAKE_FUNCPTR(glFogi)
+MAKE_FUNCPTR(glFrontFace)
+MAKE_FUNCPTR(glGenTextures)
+MAKE_FUNCPTR(glGetBooleanv)
+MAKE_FUNCPTR(glGetFloatv)
+MAKE_FUNCPTR(glGetIntegerv)
+MAKE_FUNCPTR(glHint)
+MAKE_FUNCPTR(glLightModelfv)
+MAKE_FUNCPTR(glLightModeli)
+MAKE_FUNCPTR(glLightfv)
+MAKE_FUNCPTR(glLoadIdentity)
+MAKE_FUNCPTR(glLoadMatrixf)
+MAKE_FUNCPTR(glMaterialf)
+MAKE_FUNCPTR(glMaterialfv)
+MAKE_FUNCPTR(glMatrixMode)
+MAKE_FUNCPTR(glMultMatrixf)
+MAKE_FUNCPTR(glNormal3f)
+MAKE_FUNCPTR(glNormal3fv)
+MAKE_FUNCPTR(glPolygonMode)
+MAKE_FUNCPTR(glPolygonOffset)
+MAKE_FUNCPTR(glPopMatrix)
+MAKE_FUNCPTR(glPushMatrix)
+MAKE_FUNCPTR(glRasterPos2f)
+MAKE_FUNCPTR(glReadBuffer)
+MAKE_FUNCPTR(glReadPixels)
+MAKE_FUNCPTR(glShadeModel)
+MAKE_FUNCPTR(glStencilFunc)
+MAKE_FUNCPTR(glStencilMask)
+MAKE_FUNCPTR(glStencilOp)
+MAKE_FUNCPTR(glTexCoord2f)
+MAKE_FUNCPTR(glTexCoord2fv)
+MAKE_FUNCPTR(glTexEnvi)
+MAKE_FUNCPTR(glTexImage2D)
+MAKE_FUNCPTR(glTexParameteri)
+MAKE_FUNCPTR(glTexParameterfv)
+MAKE_FUNCPTR(glTexSubImage2D)
+MAKE_FUNCPTR(glTranslatef)
+MAKE_FUNCPTR(glVertex3f)
+MAKE_FUNCPTR(glVertex3fv)
+MAKE_FUNCPTR(glVertex4f)
+MAKE_FUNCPTR(glXCreateContext)
+MAKE_FUNCPTR(glXDestroyContext)
+MAKE_FUNCPTR(glXMakeCurrent)
+MAKE_FUNCPTR(glXSwapBuffers)
+
+#undef MAKE_FUNCPTR
+
+#endif /* HAVE_OPENGL */
+
+#endif /* __GRAPHICS_WINE_GL_PRIVATE_H */
+


More information about the wine-patches mailing list