Stefan Dösinger : wined3d: Move the vertexblend support check to the template.

Alexandre Julliard julliard at winehq.org
Fri Jul 18 06:46:35 CDT 2008


Module: wine
Branch: master
Commit: ebc77732c1484d1b1cab9ad5cec84fb9c63918a7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ebc77732c1484d1b1cab9ad5cec84fb9c63918a7

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Sat Jul  5 16:21:26 2008 -0500

wined3d: Move the vertexblend support check to the template.

---

 dlls/wined3d/state.c |   65 +++++++++++++++++++++++++++----------------------
 1 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index db3beea..abbeeb2 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -2628,6 +2628,25 @@ static void transform_worldex(DWORD state, IWineD3DStateBlockImpl *stateblock, W
     }
 }
 
+static void state_vertexblend_w(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
+    static BOOL once = FALSE;
+
+    switch(stateblock->renderState[WINED3DRS_VERTEXBLEND]) {
+        case WINED3DVBF_1WEIGHTS:
+        case WINED3DVBF_2WEIGHTS:
+        case WINED3DVBF_3WEIGHTS:
+            if(!once) {
+                once = TRUE;
+                /* TODO: Implement vertex blending in drawStridedSlow */
+                FIXME("Vertex blending enabled, but not supported by hardware\n");
+            }
+            break;
+
+        case WINED3DVBF_TWEENING:
+            WARN("Tweening not supported yet\n");
+    }
+}
+
 static void state_vertexblend(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
     WINED3DVERTEXBLENDFLAGS val = stateblock->renderState[WINED3DRS_VERTEXBLEND];
 
@@ -2635,42 +2654,29 @@ static void state_vertexblend(DWORD state, IWineD3DStateBlockImpl *stateblock, W
         case WINED3DVBF_1WEIGHTS:
         case WINED3DVBF_2WEIGHTS:
         case WINED3DVBF_3WEIGHTS:
-            if(GL_SUPPORT(ARB_VERTEX_BLEND)) {
-                glEnable(GL_VERTEX_BLEND_ARB);
-                checkGLcall("glEnable(GL_VERTEX_BLEND_ARB)");
+            glEnable(GL_VERTEX_BLEND_ARB);
+            checkGLcall("glEnable(GL_VERTEX_BLEND_ARB)");
 
-                /* D3D adds one more matrix which has weight (1 - sum(weights)). This is enabled at context
-                 * creation with enabling GL_WEIGHT_SUM_UNITY_ARB.
-                 */
-                GL_EXTCALL(glVertexBlendARB(stateblock->renderState[WINED3DRS_VERTEXBLEND] + 1));
-
-                if(!stateblock->wineD3DDevice->vertexBlendUsed) {
-                    int i;
-                    for(i = 1; i < GL_LIMITS(blends); i++) {
-                        if(!isStateDirty(context, STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(i)))) {
-                            transform_worldex(STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(i)), stateblock, context);
-                        }
+            /* D3D adds one more matrix which has weight (1 - sum(weights)). This is enabled at context
+             * creation with enabling GL_WEIGHT_SUM_UNITY_ARB.
+             */
+            GL_EXTCALL(glVertexBlendARB(stateblock->renderState[WINED3DRS_VERTEXBLEND] + 1));
+
+            if(!stateblock->wineD3DDevice->vertexBlendUsed) {
+                int i;
+                for(i = 1; i < GL_LIMITS(blends); i++) {
+                    if(!isStateDirty(context, STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(i)))) {
+                        transform_worldex(STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(i)), stateblock, context);
                     }
-                    stateblock->wineD3DDevice->vertexBlendUsed = TRUE;
-                }
-            } else {
-                static BOOL once = FALSE;
-                if(!once) {
-                    once = TRUE;
-                    /* TODO: Implement vertex blending in drawStridedSlow */
-                    FIXME("Vertex blending enabled, but not supported by hardware\n");
                 }
+                stateblock->wineD3DDevice->vertexBlendUsed = TRUE;
             }
             break;
 
         case WINED3DVBF_DISABLE:
         case WINED3DVBF_0WEIGHTS: /* for Indexed vertex blending - not supported */
-            if(GL_SUPPORT(ARB_VERTEX_BLEND)) {
-                glDisable(GL_VERTEX_BLEND_ARB);
-                checkGLcall("glDisable(GL_VERTEX_BLEND_ARB)");
-            } else {
-                TRACE("Vertex blending disabled\n");
-            }
+            glDisable(GL_VERTEX_BLEND_ARB);
+            checkGLcall("glDisable(GL_VERTEX_BLEND_ARB)");
             break;
 
         case WINED3DVBF_TWEENING:
@@ -4330,7 +4336,8 @@ const struct StateEntryTemplate ffp_vertexstate_template[] = {
     { STATE_RENDER(WINED3DRS_SPECULARMATERIALSOURCE),     { STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      }, 0                               },
     { STATE_RENDER(WINED3DRS_AMBIENTMATERIALSOURCE),      { STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      }, 0                               },
     { STATE_RENDER(WINED3DRS_EMISSIVEMATERIALSOURCE),     { STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      }, 0                               },
-    { STATE_RENDER(WINED3DRS_VERTEXBLEND),                { STATE_RENDER(WINED3DRS_VERTEXBLEND),                state_vertexblend   }, 0                               },
+    { STATE_RENDER(WINED3DRS_VERTEXBLEND),                { STATE_RENDER(WINED3DRS_VERTEXBLEND),                state_vertexblend   }, ARB_VERTEX_BLEND                },
+    { STATE_RENDER(WINED3DRS_VERTEXBLEND),                { STATE_RENDER(WINED3DRS_VERTEXBLEND),                state_vertexblend_w }, 0                               },
     { STATE_RENDER(WINED3DRS_POINTSIZE),                  { STATE_RENDER(WINED3DRS_POINTSCALEENABLE),           state_pscale        }, 0                               },
     { STATE_RENDER(WINED3DRS_POINTSIZE_MIN),              { STATE_RENDER(WINED3DRS_POINTSIZE_MIN),              state_psizemin_arb  }, ARB_POINT_PARAMETERS            },
     { STATE_RENDER(WINED3DRS_POINTSIZE_MIN),              { STATE_RENDER(WINED3DRS_POINTSIZE_MIN),              state_psizemin_ext  }, EXT_POINT_PARAMETERS            },




More information about the wine-cvs mailing list