[dx85] vertex blend fixmes

Jason Edmeades us at the-edmeades.demon.co.uk
Thu Oct 2 16:53:09 CDT 2003


Michael - This will silence those horrible fixmes about 
worldmatrix(0..255) and vertex blend not being supported - We 
incorrectly return support since the NVidia drivers dont claim support 
for it, but DO return a number for the GL_MAX_VERTEX_UNITS_ARB (which is 
only supported as far as I can tell, if arb_vertex_blend is supported... 
weird). Does it help with the textures at all?

Changelog

Check for advertized vertex blend support before querying device 
capabilities, which silences issues about vertex blending

Jason
-------------- next part --------------
diff -u3 dlls/d3d8/dx84/d3d8_private.h dlls/d3d8/d3d8_private.h
--- dlls/d3d8/dx84/d3d8_private.h	2003-10-01 18:09:03.000000000 +0100
+++ dlls/d3d8/d3d8_private.h	2003-10-02 23:16:09.000000000 +0100
@@ -273,6 +273,7 @@
 
     /* IDirect3D8 fields */
     GL_Info                 gl_info;
+    BOOL                    isGLInfoValid;
     IDirect3D8Impl         *direct3d8;
 };
 
diff -u3 dlls/d3d8/dx84/directx.c dlls/d3d8/directx.c
--- dlls/d3d8/dx84/directx.c	2003-10-02 21:32:06.000000000 +0100
+++ dlls/d3d8/directx.c	2003-10-02 23:39:08.000000000 +0100
@@ -55,6 +55,7 @@
   D3DFMT_X8R8G8B8
 };
 
+static void IDirect3D8Impl_FillGLCaps(LPDIRECT3D8 iface, Display* display);
 
 /* retrieve the X display to use on a given DC */
 inline static Display *get_display( HDC hdc )
@@ -456,6 +457,10 @@
     } else {
         glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_tex_size);
     }
+
+    /* If we dont know the device settings, go query them now */
+    if (This->isGLInfoValid == FALSE) IDirect3D8Impl_FillGLCaps(iface, NULL);
+
     pCaps->DeviceType = (DeviceType == D3DDEVTYPE_HAL) ? D3DDEVTYPE_HAL : D3DDEVTYPE_REF;  /* Not quite true, but use h/w supported by opengl I suppose */
     pCaps->AdapterOrdinal = Adapter;
 
@@ -630,14 +635,14 @@
         pCaps->MaxActiveLights = gl_max;
         TRACE("GLCaps: GL_MAX_LIGHTS=%ld\n", pCaps->MaxActiveLights);
 
-#if defined(GL_ARB_vertex_blend)
-	glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
-	pCaps->MaxVertexBlendMatrices = gl_max;
-	pCaps->MaxVertexBlendMatrixIndex = 1;
-#else
-	pCaps->MaxVertexBlendMatrices = 0;
-	pCaps->MaxVertexBlendMatrixIndex = 1;
-#endif
+        if (GL_SUPPORT(ARB_VERTEX_BLEND)) {
+	   glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
+	   pCaps->MaxVertexBlendMatrices = gl_max;
+	   pCaps->MaxVertexBlendMatrixIndex = 1;
+        } else {
+           pCaps->MaxVertexBlendMatrices = 0;
+           pCaps->MaxVertexBlendMatrixIndex = 1;
+        }
 
 #if defined(GL_EXT_texture_filter_anisotropic)
         glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max);
@@ -847,30 +852,35 @@
     GL_EXT_FUNCS_GEN;
 #undef USE_GL_FUNC
 
-    GLX_Extensions = glXQueryExtensionsString(display, DefaultScreen(display));
-    FIXME("GLX_Extensions reported:\n");  
+    if (display != NULL) {
+        GLX_Extensions = glXQueryExtensionsString(display, DefaultScreen(display));
+        FIXME("GLX_Extensions reported:\n");  
     
-    if (NULL == GLX_Extensions) {
-      ERR("   GLX_Extensions returns NULL\n");      
-    } else {
-      while (*GLX_Extensions != 0x00) {
-        const char *Start = GLX_Extensions;
-        char ThisExtn[256];
-	
-        memset(ThisExtn, 0x00, sizeof(ThisExtn));
-        while (*GLX_Extensions != ' ' && *GLX_Extensions != 0x00) {
-	  GLX_Extensions++;
+        if (NULL == GLX_Extensions) {
+          ERR("   GLX_Extensions returns NULL\n");      
+        } else {
+          while (*GLX_Extensions != 0x00) {
+            const char *Start = GLX_Extensions;
+            char ThisExtn[256];
+           
+            memset(ThisExtn, 0x00, sizeof(ThisExtn));
+            while (*GLX_Extensions != ' ' && *GLX_Extensions != 0x00) {
+              GLX_Extensions++;
+            }
+            memcpy(ThisExtn, Start, (GLX_Extensions - Start));
+            FIXME("- %s\n", ThisExtn);
+            if (*GLX_Extensions == ' ') GLX_Extensions++;
+          }
         }
-        memcpy(ThisExtn, Start, (GLX_Extensions - Start));
-        FIXME("- %s\n", ThisExtn);
-        if (*GLX_Extensions == ' ') GLX_Extensions++;
-      }
     }
 
 #define USE_GL_FUNC(type, pfn) This->gl_info.pfn = (type) glXGetProcAddressARB(#pfn);
     GLX_EXT_FUNCS_GEN;
 #undef USE_GL_FUNC
 
+    /* Only save the values obtained when a display is provided */
+    if (display != NULL) This->isGLInfoValid = TRUE;
+
 }
 
 HRESULT  WINAPI  IDirect3D8Impl_CreateDevice               (LPDIRECT3D8 iface,


More information about the wine-patches mailing list