[PATCH] WineD3D: Move the vertexblend support check to the =

Stefan Doesinger stefan at codeweavers.com
Sat Jul 5 16:21:26 CDT 2008


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

------=_NextPart_000_0042_01C8E844.F785F270--




More information about the wine-patches mailing list