[D3D] GL dynamic linking (reworked a bit :-) )

Lionel Ulmer lionel.ulmer at free.fr
Fri May 23 13:45:55 CDT 2003


Hi all,

This is Mike's patch tested on my box and a bit reworked (basically, to
prevent having the list of GL API calls defined 4 times, I added a gl_api.h
header file). As C's preprocessor is single-pass, the list is still here
twice (but it's better than four times :-) ).

It's also up-to-date with my latest work (ie I had to add about 7 API
function calls).

It also prints nicer error messages :-) (ie no need to have users panic if
GL is not loaded properly as long as D3D is not required)

Notes for packagers : I think now you can build with OpenGL activated but
                      remove the dependency on OpenGL at package-creation
                      time. This would have a single Wine version that works
                      well whatever the configuration (as the only DLLs
                      linking GL directly are anyway totally non-functionnal
                      without any GL support : GL, GLU and D3D8).

        Lionel


Changelog :
 Mike McCormack <mike at codeweavers.com>
 Lionel Ulmer <lionel.ulmer at free.fr>
 - make DDraw not linked 'statically' to OpenGL
 - some warning fixes

-- 
		 Lionel Ulmer - http://www.bbrox.org/
-------------- next part --------------
--- dlls/ddraw_CVS/Makefile.in	Sat Nov 23 20:45:28 2002
+++ dlls/ddraw/Makefile.in	Thu May 22 23:14:31 2003
@@ -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
--- dlls/ddraw_CVS/d3ddevice/mesa.c	Thu May 22 00:32:08 2003
+++ dlls/ddraw/d3ddevice/mesa.c	Thu May 22 23:24:16 2003
@@ -2511,9 +2511,10 @@
 	 */
 	if (This->surface_desc.u4.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) {
 	    if (This->palette) {
-	        color |= ((This->palette->palents[lpbltfx->u5.dwFillColor].peRed << 16) |
-			  (This->palette->palents[lpbltfx->u5.dwFillColor].peGreen << 8) |
-			  (This->palette->palents[lpbltfx->u5.dwFillColor].peBlue));
+	        color = ((0xFF000000) |
+			 (This->palette->palents[lpbltfx->u5.dwFillColor].peRed << 16) |
+			 (This->palette->palents[lpbltfx->u5.dwFillColor].peGreen << 8) |
+			 (This->palette->palents[lpbltfx->u5.dwFillColor].peBlue));
 	    } else {
 	        color = 0xFF000000;
 	    }
@@ -2538,8 +2539,13 @@
 		       (This->surface_desc.u4.ddpfPixelFormat.u5.dwRGBAlphaBitMask == 0x00000000)) {
 	        color = 0xFF000000 | lpbltfx->u5.dwFillColor;
 	    }
+	    else {
+	        ERR("Wrong surface type for BLT override !\n");
+		return DDERR_INVALIDPARAMS;
+	    }
 	} else {
 	    ERR("Wrong surface type for BLT override !\n");
+	    return DDERR_INVALIDPARAMS;
 	}
 	
         TRACE(" executing D3D Device override.\n");
--- dlls/ddraw_CVS/ddraw/hal.c	Thu Jan 30 22:07:23 2003
+++ dlls/ddraw/ddraw/hal.c	Thu May 22 23:14:31 2003
@@ -138,11 +138,10 @@
 	dd_gbl.lpD3DHALCallbacks2 = (ULONG_PTR)&d3d_hal_cbs2;
     }
 
-#ifdef HAVE_OPENGL
-    if (d3d_hal_data.hwCaps.dwFlags & D3DDD_WINE_OPENGL_DEVICE) {
+    if( opengl_initialized && 
+           (d3d_hal_data.hwCaps.dwFlags & D3DDD_WINE_OPENGL_DEVICE) ) {
         /*GL_DirectDraw_Init(&dd_gbl);*/
     }
-#endif
 
     return FALSE;
 }
--- dlls/ddraw_CVS/ddraw/main.c	Fri May 16 09:51:47 2003
+++ dlls/ddraw/ddraw/main.c	Fri May 23 20:27:09 2003
@@ -184,28 +184,44 @@
 	      IsEqualGUID( &IID_IDirect3D3 , refiid ) ||
 	      IsEqualGUID( &IID_IDirect3D7 , refiid ) )
     {
-        IDirect3DImpl *d3d_impl;
-	HRESULT ret_value;
+        if (opengl_initialized) {
+	    IDirect3DImpl *d3d_impl;
+	    HRESULT ret_value;
 
-	ret_value = direct3d_create(&d3d_impl, This);
-	if (FAILED(ret_value)) return ret_value;
+	    ret_value = direct3d_create(&d3d_impl, This);
+	    if (FAILED(ret_value)) return ret_value;
+	    
+	    if ( IsEqualGUID( &IID_IDirect3D  , refiid ) ) {
+	        *obj = ICOM_INTERFACE(d3d_impl, IDirect3D);
+		TRACE(" returning Direct3D interface at %p.\n", *obj);	    
+	    } else if ( IsEqualGUID( &IID_IDirect3D2  , refiid ) ) {
+	        *obj = ICOM_INTERFACE(d3d_impl, IDirect3D2);
+		TRACE(" returning Direct3D2 interface at %p.\n", *obj);	    
+	    } else if ( IsEqualGUID( &IID_IDirect3D3  , refiid ) ) {
+	        *obj = ICOM_INTERFACE(d3d_impl, IDirect3D3);
+		TRACE(" returning Direct3D3 interface at %p.\n", *obj);	    
+	    } else {
+	        *obj = ICOM_INTERFACE(d3d_impl, IDirect3D7);
+		TRACE(" returning Direct3D7 interface at %p.\n", *obj);	    
+	    }
 
-	if ( IsEqualGUID( &IID_IDirect3D  , refiid ) ) {
-  	    *obj = ICOM_INTERFACE(d3d_impl, IDirect3D);
-	    TRACE(" returning Direct3D interface at %p.\n", *obj);	    
-	} else 	if ( IsEqualGUID( &IID_IDirect3D2  , refiid ) ) {
-  	    *obj = ICOM_INTERFACE(d3d_impl, IDirect3D2);
-	    TRACE(" returning Direct3D2 interface at %p.\n", *obj);	    
-	} else 	if ( IsEqualGUID( &IID_IDirect3D3  , refiid ) ) {
-  	    *obj = ICOM_INTERFACE(d3d_impl, IDirect3D3);
-	    TRACE(" returning Direct3D3 interface at %p.\n", *obj);	    
+	    /* And store the D3D object */
+	    This->d3d = d3d_impl;
 	} else {
-  	    *obj = ICOM_INTERFACE(d3d_impl, IDirect3D7);
-	    TRACE(" returning Direct3D7 interface at %p.\n", *obj);	    
+	    ERR("Application requests a Direct3D interface but dynamic OpenGL support loading failed !\n");
+	    ERR("(%p)->(%s,%p): no interface\n",This,debugstr_guid(refiid),obj);
+	    return E_NOINTERFACE;
 	}
-
-	/* And store the D3D object */
-	This->d3d = d3d_impl;
+    }
+#else
+    else if ( IsEqualGUID( &IID_IDirect3D  , refiid ) ||
+	      IsEqualGUID( &IID_IDirect3D2 , refiid ) ||
+	      IsEqualGUID( &IID_IDirect3D3 , refiid ) ||
+	      IsEqualGUID( &IID_IDirect3D7 , refiid ) )
+    {
+        ERR("Application requests a Direct3D interface but OpenGL support not built-in !\n");
+	ERR("(%p)->(%s,%p): no interface\n",This,debugstr_guid(refiid),obj);
+	return E_NOINTERFACE;
     }
 #endif
     else
--- dlls/ddraw_CVS/ddraw/user.c	Sat Mar 15 21:47:04 2003
+++ dlls/ddraw/ddraw/user.c	Thu May 22 23:14:31 2003
@@ -173,10 +173,11 @@
 		| DDFXCAPS_BLTSTRETCHX | DDFXCAPS_BLTSTRETCHXN		\
 		| 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;
-#endif /* HAVE_OPENGL */
+    if( opengl_initialized )
+    {
+        /* Hack for D3D code */
+        This->caps.dwCaps |= DDCAPS_3D;
+    }
     This->caps.dwCaps2 |= DDCAPS2_CERTIFIED | DDCAPS2_NOPAGELOCKREQUIRED |
 			  DDCAPS2_PRIMARYGAMMA | DDCAPS2_WIDESURFACES;
     This->caps.dwCKeyCaps |= CKEY_CAPS;
@@ -198,10 +199,11 @@
 				 DDSCAPS_OFFSCREENPLAIN | DDSCAPS_PALETTE |
 				 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;
-#endif /* HAVE_OPENGL */
+    if( opengl_initialized )
+    {
+        /* Hacks for D3D code */
+        This->caps.ddsCaps.dwCaps |= DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER;
+    }
     
     This->caps.ddsOldCaps.dwCaps = This->caps.ddsCaps.dwCaps;
 #undef BLIT_CAPS
--- dlls/ddraw_CVS/ddraw_private.h	Wed May 21 22:42:08 2003
+++ dlls/ddraw/ddraw_private.h	Thu May 22 23:14:31 2003
@@ -355,6 +355,7 @@
 
 extern Convert ModeEmulations[8];
 extern int _common_depth_to_pixelformat(DWORD depth,LPDIRECTDRAW ddraw);
+extern BOOL opengl_initialized;
 
 /******************************************************************************
  * Structure conversion (for thunks)
--- dlls/ddraw_CVS/dsurface/main.c	Wed May 21 22:42:09 2003
+++ dlls/ddraw/dsurface/main.c	Thu May 22 23:14:31 2003
@@ -179,8 +179,12 @@
 	return S_OK;
     }
 #ifdef HAVE_OPENGL
-    else if ( IsEqualGUID( &IID_D3DDEVICE_OpenGL, riid ) ||
-	      IsEqualGUID( &IID_IDirect3DHALDevice, riid) )
+    /* interfaces following here require OpenGL */
+    if( !opengl_initialized )
+        return E_NOINTERFACE;
+
+    if ( IsEqualGUID( &IID_D3DDEVICE_OpenGL, riid ) ||
+	  IsEqualGUID( &IID_IDirect3DHALDevice, riid) )
     {
         IDirect3DDeviceImpl *d3ddevimpl;
 	HRESULT ret_value;
@@ -220,7 +224,7 @@
 	}
 	This->ref++;
 	return ret_value;
-    }    
+    }
 #endif
 
     return E_NOINTERFACE;
--- dlls/ddraw_CVS/main.c	Sat Mar 15 21:47:04 2003
+++ dlls/ddraw/main.c	Fri May 23 20:31:06 2003
@@ -22,6 +22,8 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#define GLPRIVATE_NO_REDEFINE
+
 #include "config.h"
 
 #include <assert.h>
@@ -37,6 +39,12 @@
 /* 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"
+
+#undef GLPRIVATE_NO_REDEFINE
 
 #define MAX_DDRAW_DRIVERS 3
 static const ddraw_driver* DDRAW_drivers[MAX_DDRAW_DRIVERS];
@@ -55,6 +63,52 @@
     LPVOID lpContext;
 } DirectDrawEnumerateProcData;
 
+BOOL opengl_initialized = 0;
+
+#ifdef HAVE_OPENGL
+
+static void *gl_handle = NULL;
+
+#define GL_API_FUNCTION(f) typeof(f) * p##f;
+#include "gl_api.h"
+#undef GL_API_FUNCTION
+
+#ifndef SONAME_LIBGL
+#define SONAME_LIBGL "libGL.so"
+#endif
+
+static BOOL DDRAW_bind_to_opengl( void )
+{
+    char *glname = SONAME_LIBGL;
+
+    gl_handle = wine_dlopen(glname, RTLD_NOW, NULL, 0);
+    if (!gl_handle) {
+        WARN("Wine cannot find the OpenGL graphics library (%s).\n",glname);
+	return FALSE;
+    }
+
+#define GL_API_FUNCTION(f)  \
+    if((p##f = wine_dlsym(gl_handle, #f, NULL, 0)) == NULL) \
+    { \
+        WARN("Can't find symbol %s\n", #f); \
+        goto sym_not_found; \
+    }
+#include "gl_api.h"
+#undef GL_API_FUNCTION
+
+    return TRUE;
+
+sym_not_found:
+    WARN("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;
+}
+
+#endif /* HAVE_OPENGL */
+
 /***********************************************************************
  *		DirectDrawEnumerateExA (DDRAW.@)
  */
@@ -531,6 +585,9 @@
             wine_tsx11_lock_ptr   = (void *)GetProcAddress( mod, "wine_tsx11_lock" );
             wine_tsx11_unlock_ptr = (void *)GetProcAddress( mod, "wine_tsx11_unlock" );
         }
+#ifdef HAVE_OPENGL
+        opengl_initialized = DDRAW_bind_to_opengl();
+#endif /* HAVE_OPENGL */
     }
 
     if (DDRAW_num_drivers > 0)
--- dlls/ddraw_CVS/mesa_private.h	Wed May 21 22:42:08 2003
+++ dlls/ddraw/mesa_private.h	Thu May 22 23:14:31 2003
@@ -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 */
 
--- /dev/null	Mon Jul 18 01:46:18 1994
+++ dlls/ddraw/gl_private.h	Fri May 23 20:10:43 2003
@@ -0,0 +1,138 @@
+/* GL 'hack' private include file
+ * Copyright (c) 2003 Lionel Ulmer / Mike McCormack
+ *
+ * This file contains all structures that are not exported
+ * through d3d.h and all common macros.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#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 GL_API_FUNCTION(f) extern typeof(f) * p##f;
+#include "gl_api.h"
+#undef GL_API_FUNCTION
+
+#ifndef GLPRIVATE_NO_REDEFINE
+
+#define glAlphaFunc pglAlphaFunc
+#define glBegin pglBegin
+#define glBindTexture pglBindTexture
+#define glBlendFunc pglBlendFunc
+#define glClear pglClear
+#define glClearColor pglClearColor
+#define glClearDepth pglClearDepth
+#define glClearStencil pglClearStencil
+#define glClipPlane pglClipPlane
+#define glColor3f pglColor3f
+#define glColor3ub pglColor3ub
+#define glColor4ub pglColor4ub
+#define glColorMaterial pglColorMaterial
+#define glCullFace pglCullFace
+#define glDeleteTextures pglDeleteTextures
+#define glDepthFunc pglDepthFunc
+#define glDepthMask pglDepthMask
+#define glDepthRange pglDepthRange
+#define glDisable pglDisable
+#define glDrawBuffer pglDrawBuffer
+#define glDrawPixels pglDrawPixels
+#define glEnable pglEnable
+#define glEnd pglEnd
+#define glFlush pglFlush
+#define glFogf pglFogf
+#define glFogfv pglFogfv
+#define glFogi pglFogi
+#define glFrontFace pglFrontFace
+#define glGenTextures pglGenTextures
+#define glGetBooleanv pglGetBooleanv
+#define glGetError pglGetError
+#define glGetFloatv pglGetFloatv
+#define glGetIntegerv pglGetIntegerv
+#define glGetTexEnviv pglGetTexEnviv
+#define glGetTexParameteriv pglGetTexParameteriv
+#define glHint pglHint
+#define glLightModelfv pglLightModelfv
+#define glLightModeli pglLightModeli
+#define glLightfv pglLightfv
+#define glLoadIdentity pglLoadIdentity
+#define glLoadMatrixf pglLoadMatrixf
+#define glMaterialf pglMaterialf
+#define glMaterialfv pglMaterialfv
+#define glMatrixMode pglMatrixMode
+#define glMultMatrixf pglMultMatrixf
+#define glNormal3f pglNormal3f
+#define glNormal3fv pglNormal3fv
+#define glPixelStorei pglPixelStorei
+#define glPolygonMode pglPolygonMode
+#define glPolygonOffset pglPolygonOffset
+#define glPopMatrix pglPopMatrix
+#define glPushMatrix pglPushMatrix
+#define glRasterPos2f pglRasterPos2f
+#define glReadBuffer pglReadBuffer
+#define glReadPixels pglReadPixels
+#define glScissor pglScissor
+#define glShadeModel pglShadeModel
+#define glStencilFunc pglStencilFunc
+#define glStencilMask pglStencilMask
+#define glStencilOp pglStencilOp
+#define glTexCoord2f pglTexCoord2f
+#define glTexCoord2fv pglTexCoord2fv
+#define glTexEnvfv pglTexEnvfv
+#define glTexEnvi pglTexEnvi
+#define glTexImage2D pglTexImage2D
+#define glTexParameteri pglTexParameteri
+#define glTexParameterfv pglTexParameterfv
+#define glTexSubImage2D pglTexSubImage2D
+#define glTranslatef pglTranslatef
+#define glVertex3d pglVertex3d
+#define glVertex3f pglVertex3f
+#define glVertex3fv pglVertex3fv
+#define glVertex4f pglVertex4f
+#define glViewport pglViewport
+#define glXCreateContext pglXCreateContext
+#define glXDestroyContext pglXDestroyContext
+#define glXMakeCurrent pglXMakeCurrent
+#define glXSwapBuffers pglXSwapBuffers
+
+#endif /* GLPRIVATE_NO_REDEFINE */
+
+#endif /* HAVE_OPENGL */
+
+#endif /* __GRAPHICS_WINE_GL_PRIVATE_H */
+
--- /dev/null	Mon Jul 18 01:46:18 1994
+++ dlls/ddraw/gl_api.h	Fri May 23 20:14:08 2003
@@ -0,0 +1,106 @@
+/* GL API list 
+ * Copyright (c) 2003 Lionel Ulmer / Mike McCormack
+ *
+ * This file contains all structures that are not exported
+ * through d3d.h and all common macros.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* Note : this file is NOT protected against double-inclusion for pretty good
+          reasons :-) */
+
+#ifndef GL_API_FUNCTION
+#error "This file should be included with GL_API_FUNCTION defined !"
+#endif
+
+GL_API_FUNCTION(glAlphaFunc)
+GL_API_FUNCTION(glBegin)
+GL_API_FUNCTION(glBindTexture)
+GL_API_FUNCTION(glBlendFunc)
+GL_API_FUNCTION(glClear)
+GL_API_FUNCTION(glClearColor)
+GL_API_FUNCTION(glClearDepth)
+GL_API_FUNCTION(glClearStencil)
+GL_API_FUNCTION(glClipPlane)
+GL_API_FUNCTION(glColor3f)
+GL_API_FUNCTION(glColor3ub)
+GL_API_FUNCTION(glColor4ub)
+GL_API_FUNCTION(glColorMaterial)
+GL_API_FUNCTION(glCullFace)
+GL_API_FUNCTION(glDeleteTextures)
+GL_API_FUNCTION(glDepthFunc)
+GL_API_FUNCTION(glDepthMask)
+GL_API_FUNCTION(glDepthRange)
+GL_API_FUNCTION(glDisable)
+GL_API_FUNCTION(glDrawBuffer)
+GL_API_FUNCTION(glDrawPixels)
+GL_API_FUNCTION(glEnable)
+GL_API_FUNCTION(glEnd)
+GL_API_FUNCTION(glFlush)
+GL_API_FUNCTION(glFogf)
+GL_API_FUNCTION(glFogfv)
+GL_API_FUNCTION(glFogi)
+GL_API_FUNCTION(glFrontFace)
+GL_API_FUNCTION(glGenTextures)
+GL_API_FUNCTION(glGetBooleanv)
+GL_API_FUNCTION(glGetError)
+GL_API_FUNCTION(glGetFloatv)
+GL_API_FUNCTION(glGetIntegerv)
+GL_API_FUNCTION(glGetTexEnviv)
+GL_API_FUNCTION(glGetTexParameteriv)
+GL_API_FUNCTION(glHint)
+GL_API_FUNCTION(glLightModelfv)
+GL_API_FUNCTION(glLightModeli)
+GL_API_FUNCTION(glLightfv)
+GL_API_FUNCTION(glLoadIdentity)
+GL_API_FUNCTION(glLoadMatrixf)
+GL_API_FUNCTION(glMaterialf)
+GL_API_FUNCTION(glMaterialfv)
+GL_API_FUNCTION(glMatrixMode)
+GL_API_FUNCTION(glMultMatrixf)
+GL_API_FUNCTION(glNormal3f)
+GL_API_FUNCTION(glNormal3fv)
+GL_API_FUNCTION(glPixelStorei)
+GL_API_FUNCTION(glPolygonMode)
+GL_API_FUNCTION(glPolygonOffset)
+GL_API_FUNCTION(glPopMatrix)
+GL_API_FUNCTION(glPushMatrix)
+GL_API_FUNCTION(glRasterPos2f)
+GL_API_FUNCTION(glReadBuffer)
+GL_API_FUNCTION(glReadPixels)
+GL_API_FUNCTION(glScissor)
+GL_API_FUNCTION(glShadeModel)
+GL_API_FUNCTION(glStencilFunc)
+GL_API_FUNCTION(glStencilMask)
+GL_API_FUNCTION(glStencilOp)
+GL_API_FUNCTION(glTexCoord2f)
+GL_API_FUNCTION(glTexCoord2fv)
+GL_API_FUNCTION(glTexEnvfv)
+GL_API_FUNCTION(glTexEnvi)
+GL_API_FUNCTION(glTexImage2D)
+GL_API_FUNCTION(glTexParameteri)
+GL_API_FUNCTION(glTexParameterfv)
+GL_API_FUNCTION(glTexSubImage2D)
+GL_API_FUNCTION(glTranslatef)
+GL_API_FUNCTION(glVertex3d)
+GL_API_FUNCTION(glVertex3f)
+GL_API_FUNCTION(glVertex3fv)
+GL_API_FUNCTION(glVertex4f)
+GL_API_FUNCTION(glViewport)
+GL_API_FUNCTION(glXCreateContext)
+GL_API_FUNCTION(glXDestroyContext)
+GL_API_FUNCTION(glXMakeCurrent)
+GL_API_FUNCTION(glXSwapBuffers)


More information about the wine-patches mailing list