[dx85] vertex blend fixmes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
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,

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux