[PATCH] Completed Set RenderState in device.c

Chris Ahrendt celticht32 at aol.com
Tue Jul 29 22:53:17 CDT 2008


---
 dlls/wined3d/device.c        |  207 +++++++++++++++++++++++++++++++++++++++++-
 include/wine/wined3d_types.h |    7 ++
 2 files changed, 210 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 0a6bd2b..7031a2a 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3248,15 +3248,214 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetViewport(IWineD3DDevice *iface, WINE
 
 /*****
  * Get / Set Render States
- * TODO: Verify against dx9 definitions
- *****/
+ Parms
+ State This param will be any member of the WINED3DRENDERSTATETYPE type.
+ 
+ Value This is dependent on the State value 
+
+ ****/
 static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, WINED3DRENDERSTATETYPE State, DWORD Value) {
 
     IWineD3DDeviceImpl  *This     = (IWineD3DDeviceImpl *)iface;
     DWORD oldValue = This->stateBlock->renderState[State];
 
     TRACE("(%p)->state = %s(%d), value = %d\n", This, debug_d3drenderstate(State), State, Value);
-
+    
+    switch(State)
+    {
+     /* These States do not need Value checking
+         They either contain a valid DWORD value or a TRUE == 0
+         or FALSE > 0. So do not need the type checking of the
+         other calls */
+     case WINED3DRS_BLENDOPALPHA:
+     case WINED3DRS_FOGCOLOR:
+     case WINED3DRS_SEPARATEALPHABLENDENABLE:
+     case WINED3DRS_TWOSIDEDSTENCILMODE:
+     case WINED3DRS_ENABLEADAPTIVETESSELLATION:
+     case WINED3DRS_ANTIALIASEDLINEENABLE:
+     case WINED3DRS_SCISSORTESTENABLE:
+     case WINED3DRS_INDEXEDVERTEXBLENDENABLE:
+     case WINED3DRS_MULTISAMPLEANTIALIAS:
+     case WINED3DRS_POINTSPRITEENABLE:
+     case WINED3DRS_POINTSCALEENABLE:
+     case WINED3DRS_NORMALIZENORMALS:
+     case WINED3DRS_LOCALVIEWER:
+     case WINED3DRS_COLORVERTEX:
+     case WINED3DRS_CLIPPING:
+     case WINED3DRS_ZENABLE:
+     case WINED3DRS_STENCILENABLE:
+     case WINED3DRS_RANGEFOGENABLE:
+     case WINED3DRS_ALPHABLENDENABLE:     
+     case WINED3DRS_DITHERENABLE:
+     case WINED3DRS_ZWRITEENABLE:
+     case WINED3DRS_ALPHATESTENABLE:
+     case WINED3DRS_FOGENABLE:
+     case WINED3DRS_SPECULARENABLE:
+     case WINED3DRS_LIGHTING:
+     case WINED3DRS_LASTPIXEL:
+     case WINED3DRS_DEPTHBIAS:
+     case WINED3DRS_SRGBWRITEENABLE:
+     case WINED3DRS_BLENDFACTOR:
+     case WINED3DRS_COLORWRITEENABLE1:
+     case WINED3DRS_MULTISAMPLEMASK:
+     case WINED3DRS_AMBIENT:
+     case WINED3DRS_TEXTUREFACTOR:
+     case WINED3DRS_STENCILWRITEMASK:
+     case WINED3DRS_STENCILMASK:
+     case WINED3DRS_COLORWRITEENABLE2:
+     case WINED3DRS_COLORWRITEENABLE3:
+     case WINED3DRS_ADAPTIVETESS_X:
+     case WINED3DRS_ADAPTIVETESS_Y:
+     case WINED3DRS_ADAPTIVETESS_Z:
+     case WINED3DRS_ADAPTIVETESS_W:
+     case WINED3DRS_SLOPESCALEDEPTHBIAS:
+     case WINED3DRS_TWEENFACTOR:     
+     case WINED3DRS_COLORWRITEENABLE:
+     case WINED3DRS_POINTSIZE_MAX:
+     case WINED3DRS_WRAP0:
+     case WINED3DRS_WRAP1:
+     case WINED3DRS_WRAP2:
+     case WINED3DRS_WRAP3:
+     case WINED3DRS_WRAP4:
+     case WINED3DRS_WRAP5:
+     case WINED3DRS_WRAP6:
+     case WINED3DRS_WRAP7:
+     case WINED3DRS_WRAP8:
+     case WINED3DRS_WRAP9:
+     case WINED3DRS_WRAP10:
+     case WINED3DRS_WRAP11:
+     case WINED3DRS_WRAP12:
+     case WINED3DRS_WRAP13:
+     case WINED3DRS_WRAP14:
+     case WINED3DRS_WRAP15:
+     case WINED3DRS_STENCILREF:
+     case WINED3DRS_FOGSTART:
+     case WINED3DRS_FOGEND:
+     case WINED3DRS_FOGDENSITY:
+     case WINED3DRS_CLIPPLANEENABLE:
+     case WINED3DRS_POINTSIZE:
+     case WINED3DRS_POINTSIZE_MIN:
+     case WINED3DRS_POINTSCALE_A:
+     case WINED3DRS_POINTSCALE_B:
+     case WINED3DRS_POINTSCALE_C:
+          break;
+
+     case WINED3DRS_FILLMODE:
+          if ((Value >= WINED3DFILL_POINT) &&  (Value <= WINED3DFILL_SOLID)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_SHADEMODE:
+          if ((Value >= WINED3DSHADE_FLAT) && (Value <= WINED3DSHADE_PHONG)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_SRCBLENDALPHA:
+     case WINED3DRS_DESTBLENDALPHA:
+     case WINED3DRS_DESTBLEND:
+     case WINED3DRS_SRCBLEND:
+          if ((Value >= WINED3DBLEND_ZERO) && (Value <= WINED3DBLEND_INVSRCCOLOR2)) break;
+          TRACE("Invalid Value\n");       
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_CULLMODE:
+          if ((Value >= WINED3DCULL_NONE) && (Value <= WINED3DCULL_CCW)) break;
+          TRACE("Invalid Value\n");          
+          return WINED3DERR_INVALIDCALL;
+     break;
+     
+     case WINED3DRS_CCW_STENCILFUNC:
+     case WINED3DRS_STENCILFUNC:
+     case WINED3DRS_ALPHAFUNC:
+     case WINED3DRS_ZFUNC:
+          if ((Value >= WINED3DCMP_NEVER) && (Value <= WINED3DCMP_ALWAYS)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_ALPHAREF:
+          /* Valid values are between 0 and FF */
+          if ((Value >= 0) || 
+              (Value <= 0xFF)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_FOGVERTEXMODE:
+     case WINED3DRS_FOGTABLEMODE:
+          if ((Value >= WINED3DFOG_NONE) && (Value <= WINED3DFOG_LINEAR)) break;
+          TRACE("Invalid Value\n");          
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_CCW_STENCILFAIL:
+     case WINED3DRS_CCW_STENCILZFAIL:
+     case WINED3DRS_CCW_STENCILPASS:
+     case WINED3DRS_STENCILPASS:
+     case WINED3DRS_STENCILZFAIL:
+     case WINED3DRS_STENCILFAIL:
+          if ((Value >= WINED3DSTENCILOP_KEEP) && (Value <= WINED3DSTENCILOP_DECR)) break;
+          TRACE("Invalid Value\n");          
+          return WINED3DERR_INVALIDCALL;
+     break;
+     
+     case WINED3DRS_SPECULARMATERIALSOURCE:
+     case WINED3DRS_AMBIENTMATERIALSOURCE:
+     case WINED3DRS_EMISSIVEMATERIALSOURCE:
+     case WINED3DRS_DIFFUSEMATERIALSOURCE:
+         if ((Value >= WINED3DMCS_MATERIAL) && (Value <= WINED3DMCS_COLOR2)) break;
+          TRACE("Invalid Value\n");          
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_VERTEXBLEND:
+         if ((Value >= WINED3DVBF_DISABLE) && (Value <= WINED3DVBF_0WEIGHTS)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_PATCHEDGESTYLE:
+          if ((Value == WINED3DPATCHEDGE_DISCRETE) || 
+              (Value == WINED3DPATCHEDGE_CONTINUOUS)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_DEBUGMONITORTOKEN:
+          if ((Value == WINED3DDMT_ENABLE) || 
+              (Value == WINED3DDMT_DISABLE)) break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_BLENDOP:
+          if ((Value >= WINED3DBLENDOP_ADD) && (Value <= WINED3DBLENDOP_MAX))  break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_NORMALDEGREE:
+     case WINED3DRS_POSITIONDEGREE:
+          if ((Value >= WINED3DDEGREE_LINEAR)&&(Value <= WINED3DDEGREE_QUINTIC))  break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     case WINED3DRS_MINTESSELLATIONLEVEL:
+     case WINED3DRS_MAXTESSELLATIONLEVEL:
+          if ((Value >= WINED3DDEGREE_LINEAR) && (Value <= WINED3DDEGREE_QUINTIC))  break;
+          TRACE("Invalid Value\n");
+          return WINED3DERR_INVALIDCALL;
+     break;
+
+     default:
+        TRACE("Unkown State type = %d\n",State);
+        return WINED3DERR_INVALIDCALL;
+    } 
+ 
     This->updateStateBlock->changed.renderState[State] = TRUE;
     This->updateStateBlock->renderState[State] = Value;
 
@@ -3278,7 +3477,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, W
 
 static HRESULT WINAPI IWineD3DDeviceImpl_GetRenderState(IWineD3DDevice *iface, WINED3DRENDERSTATETYPE State, DWORD *pValue) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    TRACE("(%p) for State %d = %d\n", This, State, This->stateBlock->renderState[State]);
+        TRACE("(%p) for State %d = %d\n", This, State, This->stateBlock->renderState[State]);
     *pValue = This->stateBlock->renderState[State];
     return WINED3D_OK;
 }
diff --git a/include/wine/wined3d_types.h b/include/wine/wined3d_types.h
index c67c311..7cfdeb8 100644
--- a/include/wine/wined3d_types.h
+++ b/include/wine/wined3d_types.h
@@ -1512,6 +1512,12 @@ typedef enum _WINED3DSURFTYPE {
 #define WINED3DCLIPPLANE4              (1 << 4)
 #define WINED3DCLIPPLANE5              (1 << 5)
 
+#define WINED3DDMT_ENABLE                       0 
+#define WINED3DDMT_DISABLE                      1 
+#define WINED3DBLEND_INVSRCCOLOR2               17  
+#define WINED3DBLEND_SRCCOLOR2                  16 
+
+
 /* FVF (Flexible Vertex Format) codes */
 #define WINED3DFVF_RESERVED0           0x0001
 #define WINED3DFVF_POSITION_MASK       0x000E
@@ -1782,3 +1788,4 @@ typedef struct _WINEDDOVERLAYFX
 #define WINEDDFLIP_INTERVAL4                    0x04000000
 
 #endif
+
-- 
1.5.5.1


--------------050007050002030005020503--



More information about the wine-devel mailing list