[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