WINED3D: Compilation fixes

H. Verbeet hverbeet at gmail.com
Wed Jul 19 16:13:23 CDT 2006


This patch fixes compilation on systems with older OpenGL headers. It
adds missing constants and uses GL_EXTCALL where appropriate. It also
fixes an incorrect comment in a related part of wined3d_gl.h. Note
that in order to use GL_EXTCALL from IWineD3DImpl_FillGLCaps() we need
to pass it an iface pointer.
-------------- next part --------------
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 776e626..0a0e4e6 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -2061,7 +2061,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
     *  with Default values
     */
 
-    ((IWineD3DImpl *) This->wineD3D)->isGLInfoValid = IWineD3DImpl_FillGLCaps( &((IWineD3DImpl *) This->wineD3D)->gl_info, swapchain->display);
+    ((IWineD3DImpl *) This->wineD3D)->isGLInfoValid = IWineD3DImpl_FillGLCaps( This->wineD3D, swapchain->display);
     /* Setup all the devices defaults */
     IWineD3DStateBlock_InitStartupStateBlock((IWineD3DStateBlock *)This->stateBlock);
 #if 0
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index f757265..75c1633 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -253,7 +253,10 @@ static void select_shader_mode(
  * IWineD3D parts follows
  **********************************************************/
 
-BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info, Display* display) {
+BOOL IWineD3DImpl_FillGLCaps(IWineD3D *iface, Display* display) {
+    IWineD3DImpl *This = (IWineD3DImpl *)iface;
+    WineD3D_GL_Info *gl_info = &This->gl_info;
+
     const char *GL_Extensions    = NULL;
     const char *GLX_Extensions   = NULL;
     const char *gl_string        = NULL;
@@ -541,7 +544,7 @@ #undef USE_GL_FUNC
                 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &gl_max);
                 TRACE_(d3d_caps)(" FOUND: ARB Pixel Shader support - GL_MAX_TEXTURE_IMAGE_UNITS_ARB=%u\n", gl_max);
                 gl_info->max_samplers = min(MAX_SAMPLERS, gl_max);
-                glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max);
+                GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
                 TRACE_(d3d_caps)(" FOUND: ARB Pixel Shader support - max float constants=%u\n", gl_max);
                 gl_info->ps_arb_constantsF = gl_max;
             } else if (strcmp(ThisExtn, "GL_ARB_imaging") == 0) {
@@ -602,7 +605,7 @@ #undef USE_GL_FUNC
                 gl_info->vs_arb_version = VS_VERSION_11;
                 TRACE_(d3d_caps)(" FOUND: ARB Vertex Shader support - version=%02x\n", gl_info->vs_arb_version);
                 gl_info->supported[ARB_VERTEX_PROGRAM] = TRUE;
-                glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max);
+                GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
                 TRACE_(d3d_caps)(" FOUND: ARB Vertex Shader support - max float constants=%u\n", gl_max);
                 gl_info->vs_arb_constantsF = gl_max;
             } else if (strcmp(ThisExtn, "GL_ARB_vertex_blend") == 0) {
@@ -1095,7 +1098,7 @@ static HRESULT WINAPI IWineD3DImpl_GetAd
             WineD3D_Context *fake_ctx = NULL;
             if (glXGetCurrentContext() == NULL) fake_ctx = WineD3D_CreateFakeGLContext();
             /* If we don't know the device settings, go query them now */
-            isGLInfoValid = IWineD3DImpl_FillGLCaps(&This->gl_info, IWineD3DImpl_GetAdapterDisplay(iface, Adapter));
+            isGLInfoValid = IWineD3DImpl_FillGLCaps(iface, IWineD3DImpl_GetAdapterDisplay(iface, Adapter));
             if (fake_ctx != NULL) WineD3D_ReleaseFakeGLContext(fake_ctx);
         }
 
@@ -1526,7 +1529,7 @@ static HRESULT WINAPI IWineD3DImpl_GetDe
     /* If we don't know the device settings, go query them now */
     if (This->isGLInfoValid == FALSE) {
         /* use the desktop window to fill gl caps */
-        BOOL rc = IWineD3DImpl_FillGLCaps(&This->gl_info, IWineD3DImpl_GetAdapterDisplay(iface, Adapter));
+        BOOL rc = IWineD3DImpl_FillGLCaps(iface, IWineD3DImpl_GetAdapterDisplay(iface, Adapter));
 
         /* We are running off a real context, save the values */
         if (rc) This->isGLInfoValid = TRUE;
@@ -1915,7 +1918,7 @@ static HRESULT  WINAPI IWineD3DImpl_Crea
     /* Setup some defaults for creating the implicit swapchain */
     ENTER_GL();
     /* FIXME: both of those should be made per adapter */
-    IWineD3DImpl_FillGLCaps(&This->gl_info, IWineD3DImpl_GetAdapterDisplay(iface, Adapter));
+    IWineD3DImpl_FillGLCaps(iface, IWineD3DImpl_GetAdapterDisplay(iface, Adapter));
     LEAVE_GL();
     select_shader_mode(&This->gl_info, DeviceType,
         &wined3d_settings.ps_selected_mode, &wined3d_settings.vs_selected_mode);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index fc2fc4a..daedc52 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -390,8 +390,7 @@ #define GET_TEXCOORD_SIZE_FROM_FVF(d3dvt
     (((((d3dvtVertexType) >> (16 + (2 * (tex_num)))) + 1) & 0x03) + 1)
 
 /* Routine to fill gl caps for swapchains and IWineD3D */
-BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info,
-                             Display* display);
+BOOL IWineD3DImpl_FillGLCaps(IWineD3D *iface, Display* display);
 
 /*****************************************************************************
  * Internal representation of a light
diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h
index 9616e73..7937626 100644
--- a/include/wine/wined3d_gl.h
+++ b/include/wine/wined3d_gl.h
@@ -690,6 +690,7 @@ #endif
 #ifndef GL_ARB_vertex_shader
 #define GL_ARB_vertex_shader 1
 #define GL_VERTEX_SHADER_ARB              0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
 #define GL_PROGRAM_OBJECT_ARB             0x8B40
 #define GL_SHADER_OBJECT_ARB              0x8B48
 #define GL_OBJECT_TYPE_ARB                0x8B4E
@@ -1474,7 +1475,7 @@ #define GL_EXT_FUNCS_GEN \
     USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FEXTPROC,       glSecondaryColor3fEXT); \
     USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FVEXTPROC,      glSecondaryColor3fvEXT); \
     USE_GL_FUNC(PGLFNGLSECONDARYCOLORPOINTEREXTPROC,  glSecondaryColorPointerEXT); \
-    /* GL_EXT_secondary_color */ \
+    /* GL_ARB_vertex_program */ \
     USE_GL_FUNC(PGLFNGENPROGRAMSARBPROC,              glGenProgramsARB); \
     USE_GL_FUNC(PGLFNBINDPROGRAMARBPROC,              glBindProgramARB); \
     USE_GL_FUNC(PGLFNPROGRAMSTRINGARBPROC,            glProgramStringARB); \
@@ -1483,6 +1484,7 @@ #define GL_EXT_FUNCS_GEN \
     USE_GL_FUNC(PGLFNVERTEXATTRIBPOINTERARBPROC,      glVertexAttribPointerARB); \
     USE_GL_FUNC(PGLFNENABLEVERTEXATTRIBARRAYARBPROC,  glEnableVertexAttribArrayARB); \
     USE_GL_FUNC(PGLFNDISABLEVERTEXATTRIBARRAYARBPROC, glDisableVertexAttribArrayARB); \
+    USE_GL_FUNC(PGLFNGETPROGRAMIVARBPROC,             glGetProgramivARB); \
     /* GL_ARB_shader_objects */ \
     USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC,     glGetObjectParameterivARB); \
     USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC,     glGetObjectParameterfvARB); \





More information about the wine-patches mailing list