[PATCH] WineD3D: Move fog to the vertex states=0A=

Stefan Doesinger stefan at codeweavers.com
Wed Jul 2 20:49:43 CDT 2008


=0A=
Fog is rather tricky to classificate. For one part it consists of the =
fog coordinate calculation, which is done in the=0A=
vertex pipeline in opengl. On the other hand, the actual fog application =
is replaced by some opengl fragment pipeline=0A=
implementations(ARBfp and GLSL), but not by others(atifs, nvts). We may =
want to split the state_fog() code up in two=0A=
functions, one handling the vertex application and another handling the =
fragment parts=0A=
---=0A=
 dlls/wined3d/state.c |   17 +++++++++++------=0A=
 1 files changed, 11 insertions(+), 6 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c=0A=
index d9cc694..b5b1b3e 100644=0A=
--- a/dlls/wined3d/state.c=0A=
+++ b/dlls/wined3d/state.c=0A=
@@ -896,7 +896,6 @@ static void state_stencilwrite(DWORD state, =
IWineD3DStateBlockImpl *stateblock,=0A=
 }=0A=
 =0A=
 static void state_fog(DWORD state, IWineD3DStateBlockImpl *stateblock, =
WineD3DContext *context) {=0A=
-    /* TODO: Put this into the vertex type block once that is in the =
state table */=0A=
     BOOL fogenable =3D stateblock->renderState[WINED3DRS_FOGENABLE];=0A=
     BOOL is_ps3 =3D use_ps(stateblock->wineD3DDevice)=0A=
                   && ((IWineD3DPixelShaderImpl =
*)stateblock->pixelShader)->baseShader.hex_version >=3D =
WINED3DPS_VERSION(3,0);=0A=
@@ -3850,16 +3849,16 @@ const struct StateEntry FFPStateTable[] =3D=0A=
     { /* 25, WINED3DRS_ALPHAFUNC                    */      =
STATE_RENDER(WINED3DRS_ALPHATESTENABLE),            NULL                =
},=0A=
     { /* 26, WINED3DRS_DITHERENABLE                 */      =
STATE_RENDER(WINED3DRS_DITHERENABLE),               NULL                =
},=0A=
     { /* 27, WINED3DRS_ALPHABLENDENABLE             */      =
STATE_RENDER(WINED3DRS_ALPHABLENDENABLE),           NULL                =
},=0A=
-    { /* 28, WINED3DRS_FOGENABLE                    */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
},=0A=
+    { /* 28, WINED3DRS_FOGENABLE                    */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  NULL                =
},=0A=
     { /* 29, WINED3DRS_SPECULARENABLE               */      =
STATE_RENDER(WINED3DRS_SPECULARENABLE),             NULL                =
},=0A=
     { /* 30, WINED3DRS_ZVISIBLE                     */      0 /* Not =
supported according to the msdn */,        state_nogl          },=0A=
     { /* 31, WINED3DRS_SUBPIXEL                     */      =
STATE_RENDER(WINED3DRS_SUBPIXEL),                   NULL                =
},=0A=
     { /* 32, WINED3DRS_SUBPIXELX                    */      =
STATE_RENDER(WINED3DRS_SUBPIXELX),                  NULL                =
},=0A=
     { /* 33, WINED3DRS_STIPPLEDALPHA                */      =
STATE_RENDER(WINED3DRS_STIPPLEDALPHA),              NULL                =
},=0A=
     { /* 34, WINED3DRS_FOGCOLOR                     */      =
STATE_RENDER(WINED3DRS_FOGCOLOR),                   state_fogcolor      =
},=0A=
-    { /* 35, WINED3DRS_FOGTABLEMODE                 */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
},=0A=
-    { /* 36, WINED3DRS_FOGSTART                     */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
},=0A=
-    { /* 37, WINED3DRS_FOGEND                       */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
},=0A=
+    { /* 35, WINED3DRS_FOGTABLEMODE                 */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  NULL                =
},=0A=
+    { /* 36, WINED3DRS_FOGSTART                     */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  NULL                =
},=0A=
+    { /* 37, WINED3DRS_FOGEND                       */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  NULL                =
},=0A=
     { /* 38, WINED3DRS_FOGDENSITY                   */      =
STATE_RENDER(WINED3DRS_FOGDENSITY),                 state_fogdensity    =
},=0A=
     { /* 39, WINED3DRS_STIPPLEENABLE                */      =
STATE_RENDER(WINED3DRS_STIPPLEENABLE),              state_stippleenable =
},=0A=
     { /* 40, WINED3DRS_EDGEANTIALIAS                */      =
STATE_RENDER(WINED3DRS_ALPHABLENDENABLE),           NULL                =
},=0A=
@@ -3963,7 +3962,7 @@ const struct StateEntry FFPStateTable[] =3D=0A=
     { /*137, WINED3DRS_LIGHTING                     */      =
STATE_RENDER(WINED3DRS_LIGHTING),                   state_lighting      =
},=0A=
     { /*138, WINED3DRS_EXTENTS                      */      =
STATE_RENDER(WINED3DRS_EXTENTS),                    state_extents       =
},=0A=
     { /*139, WINED3DRS_AMBIENT                      */      =
STATE_RENDER(WINED3DRS_AMBIENT),                    state_ambient       =
},=0A=
-    { /*140, WINED3DRS_FOGVERTEXMODE                */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
},=0A=
+    { /*140, WINED3DRS_FOGVERTEXMODE                */      =
STATE_RENDER(WINED3DRS_FOGENABLE),                  NULL                =
},=0A=
     { /*141, WINED3DRS_COLORVERTEX                  */      =
STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      =
},=0A=
     { /*142, WINED3DRS_LOCALVIEWER                  */      =
STATE_RENDER(WINED3DRS_LOCALVIEWER),                state_localviewer   =
},=0A=
     { /*143, WINED3DRS_NORMALIZENORMALS             */      =
STATE_RENDER(WINED3DRS_NORMALIZENORMALS),           state_normalize     =
},=0A=
@@ -5265,6 +5264,12 @@ const struct StateEntryTemplate =
ffp_vertexstate_template[] =3D {=0A=
     { =
STATE_TEXTURESTAGE(5,WINED3DTSS_TEXTURETRANSFORMFLAGS),{STATE_TRANSFORM(W=
INED3DTS_TEXTURE5),              transform_texture   }},=0A=
     { =
STATE_TEXTURESTAGE(6,WINED3DTSS_TEXTURETRANSFORMFLAGS),{STATE_TRANSFORM(W=
INED3DTS_TEXTURE6),              transform_texture   }},=0A=
     { =
STATE_TEXTURESTAGE(7,WINED3DTSS_TEXTURETRANSFORMFLAGS),{STATE_TRANSFORM(W=
INED3DTS_TEXTURE7),              transform_texture   }},=0A=
+      /* Fog */=0A=
+    { STATE_RENDER(WINED3DRS_FOGENABLE),                  { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}},=0A=
+    { STATE_RENDER(WINED3DRS_FOGTABLEMODE),               { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}},=0A=
+    { STATE_RENDER(WINED3DRS_FOGSTART),                   { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}},=0A=
+    { STATE_RENDER(WINED3DRS_FOGEND),                     { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}},=0A=
+    { STATE_RENDER(WINED3DRS_FOGVERTEXMODE),              { =
STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           =
}},=0A=
     {0 /* Terminate */,                                   { 0,          =
                                        0                   }},=0A=
 };=0A=
 =0A=
-- =0A=
1.5.4.5=0A=
=0A=

------=_NextPart_000_0001_01C8E154.62DC3400--




More information about the wine-patches mailing list