Stefan Dösinger : wined3d: Move WINED3DRS_COLORVERTEX to the state table.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 11 10:34:48 CST 2006


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Sun Dec 10 22:44:18 2006 +0100

wined3d: Move WINED3DRS_COLORVERTEX to the state table.

---

 dlls/wined3d/device.c |   41 +----------------------------------------
 dlls/wined3d/state.c  |   49 ++++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 0b2645a..42d9308 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3384,51 +3384,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl
     case WINED3DRS_VERTEXBLEND               :
     case WINED3DRS_TWEENFACTOR               :
     case WINED3DRS_INDEXEDVERTEXBLENDENABLE  :
-        StateTable[STATE_RENDER(State)].apply(STATE_RENDER(State), This->stateBlock);
-        break;
-
     case WINED3DRS_COLORVERTEX               :
     case WINED3DRS_DIFFUSEMATERIALSOURCE     :
     case WINED3DRS_SPECULARMATERIALSOURCE    :
     case WINED3DRS_AMBIENTMATERIALSOURCE     :
     case WINED3DRS_EMISSIVEMATERIALSOURCE    :
-        {
-            GLenum Parm = GL_AMBIENT_AND_DIFFUSE;
-
-            if (This->stateBlock->renderState[WINED3DRS_COLORVERTEX]) {
-                TRACE("diff %d, amb %d, emis %d, spec %d\n",
-                      This->stateBlock->renderState[WINED3DRS_DIFFUSEMATERIALSOURCE],
-                      This->stateBlock->renderState[WINED3DRS_AMBIENTMATERIALSOURCE],
-                      This->stateBlock->renderState[WINED3DRS_EMISSIVEMATERIALSOURCE],
-                      This->stateBlock->renderState[WINED3DRS_SPECULARMATERIALSOURCE]);
-
-                if (This->stateBlock->renderState[WINED3DRS_DIFFUSEMATERIALSOURCE] == WINED3DMCS_COLOR1) {
-                    if (This->stateBlock->renderState[WINED3DRS_AMBIENTMATERIALSOURCE] == WINED3DMCS_COLOR1) {
-                        Parm = GL_AMBIENT_AND_DIFFUSE;
-                    } else {
-                        Parm = GL_DIFFUSE;
-                    }
-                } else if (This->stateBlock->renderState[WINED3DRS_AMBIENTMATERIALSOURCE] == WINED3DMCS_COLOR1) {
-                    Parm = GL_AMBIENT;
-                } else if (This->stateBlock->renderState[WINED3DRS_EMISSIVEMATERIALSOURCE] == WINED3DMCS_COLOR1) {
-                    Parm = GL_EMISSION;
-                } else if (This->stateBlock->renderState[WINED3DRS_SPECULARMATERIALSOURCE] == WINED3DMCS_COLOR1) {
-                    Parm = GL_SPECULAR;
-                } else {
-                    Parm = -1;
-                }
-
-                if (Parm == -1) {
-                    if (This->tracking_color != DISABLED_TRACKING) This->tracking_color = NEEDS_DISABLE;
-                } else {
-                    This->tracking_color = NEEDS_TRACKING;
-                    This->tracking_parm  = Parm;
-                }
-
-            } else {
-                if (This->tracking_color != DISABLED_TRACKING) This->tracking_color = NEEDS_DISABLE;
-            }
-        }
+        StateTable[STATE_RENDER(State)].apply(STATE_RENDER(State), This->stateBlock);
         break;
 
     case WINED3DRS_LINEPATTERN               :
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index a2272f6..24006cd 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -810,6 +810,45 @@ static void state_fogdensity(DWORD state
     checkGLcall("glFogf(GL_FOG_DENSITY, (float) Value)");
 }
 
+/* TODO: Merge with primitive type + init_materials()!! */
+static void state_colormat(DWORD state, IWineD3DStateBlockImpl *stateblock) {
+    GLenum Parm = GL_AMBIENT_AND_DIFFUSE;
+
+    if (stateblock->renderState[WINED3DRS_COLORVERTEX]) {
+        TRACE("diff %d, amb %d, emis %d, spec %d\n",
+              stateblock->renderState[WINED3DRS_DIFFUSEMATERIALSOURCE],
+              stateblock->renderState[WINED3DRS_AMBIENTMATERIALSOURCE],
+              stateblock->renderState[WINED3DRS_EMISSIVEMATERIALSOURCE],
+              stateblock->renderState[WINED3DRS_SPECULARMATERIALSOURCE]);
+
+        if (stateblock->renderState[WINED3DRS_DIFFUSEMATERIALSOURCE] == D3DMCS_COLOR1) {
+            if (stateblock->renderState[WINED3DRS_AMBIENTMATERIALSOURCE] == D3DMCS_COLOR1) {
+                Parm = GL_AMBIENT_AND_DIFFUSE;
+            } else {
+                Parm = GL_DIFFUSE;
+            }
+        } else if (stateblock->renderState[WINED3DRS_AMBIENTMATERIALSOURCE] == D3DMCS_COLOR1) {
+            Parm = GL_AMBIENT;
+        } else if (stateblock->renderState[WINED3DRS_EMISSIVEMATERIALSOURCE] == D3DMCS_COLOR1) {
+            Parm = GL_EMISSION;
+        } else if (stateblock->renderState[WINED3DRS_SPECULARMATERIALSOURCE] == D3DMCS_COLOR1) {
+            Parm = GL_SPECULAR;
+        } else {
+            Parm = -1;
+        }
+
+        if (Parm == -1) {
+            if (stateblock->wineD3DDevice->tracking_color != DISABLED_TRACKING) stateblock->wineD3DDevice->tracking_color = NEEDS_DISABLE;
+        } else {
+            stateblock->wineD3DDevice->tracking_color = NEEDS_TRACKING;
+            stateblock->wineD3DDevice->tracking_parm  = Parm;
+        }
+
+    } else {
+        if (stateblock->wineD3DDevice->tracking_color != DISABLED_TRACKING) stateblock->wineD3DDevice->tracking_color = NEEDS_DISABLE;
+    }
+}
+
 const struct StateEntry StateTable[] =
 {
       /* State name                                         representative,                                     apply function */
@@ -956,14 +995,14 @@ const struct StateEntry StateTable[] =
     { /*138, WINED3DRS_EXTENTS                      */      STATE_RENDER(WINED3DRS_EXTENTS),                    state_unknown       },
     { /*139, WINED3DRS_AMBIENT                      */      STATE_RENDER(WINED3DRS_AMBIENT),                    state_ambient       },
     { /*140, WINED3DRS_FOGVERTEXMODE                */      STATE_RENDER(WINED3DRS_FOGENABLE),                  state_fog           },
-    { /*141, WINED3DRS_COLORVERTEX                  */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_unknown       },
+    { /*141, WINED3DRS_COLORVERTEX                  */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      },
     { /*142, WINED3DRS_LOCALVIEWER                  */      STATE_RENDER(WINED3DRS_LOCALVIEWER),                state_unknown       },
     { /*143, WINED3DRS_NORMALIZENORMALS             */      STATE_RENDER(WINED3DRS_NORMALIZENORMALS),           state_unknown       },
     { /*144, WINED3DRS_COLORKEYBLENDENABLE          */      STATE_RENDER(WINED3DRS_COLORKEYBLENDENABLE),        state_unknown       },
-    { /*145, WINED3DRS_DIFFUSEMATERIALSOURCE        */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_unknown       },
-    { /*146, WINED3DRS_SPECULARMATERIALSOURCE       */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_unknown       },
-    { /*147, WINED3DRS_AMBIENTMATERIALSOURCE        */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_unknown       },
-    { /*148, WINED3DRS_EMISSIVEMATERIALSOURCE       */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_unknown       },
+    { /*145, WINED3DRS_DIFFUSEMATERIALSOURCE        */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      },
+    { /*146, WINED3DRS_SPECULARMATERIALSOURCE       */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      },
+    { /*147, WINED3DRS_AMBIENTMATERIALSOURCE        */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      },
+    { /*148, WINED3DRS_EMISSIVEMATERIALSOURCE       */      STATE_RENDER(WINED3DRS_COLORVERTEX),                state_colormat      },
     { /*149, Undefined                              */      0,                                                  state_undefined     },
     { /*150, Undefined                              */      0,                                                  state_undefined     },
     { /*151, WINED3DRS_VERTEXBLEND                  */      0,                                                  state_nogl          },




More information about the wine-cvs mailing list