wined3d: use a common function for all D3DCMPFUNC -> GLenum conversions

Jan Zerebecki jan.wine at zerebecki.de
Fri Aug 25 09:28:34 CDT 2006


If this patch is rejected from inclusion, please tell me why, as
I would have to ask anyway.

From: Jan Zerebecki <jan.wine at zerebecki.de>
Changelog:
wined3d: use a common function for all D3DCMPFUNC -> GLenum conversions
---

 dlls/wined3d/device.c          |   40 ++++++++++------------------------------
 dlls/wined3d/utils.c           |    4 ++--
 dlls/wined3d/wined3d_private.h |    2 +-
 3 files changed, 13 insertions(+), 33 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 3c2f9ea..c6a2af5 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -3325,9 +3325,11 @@ static void renderstate_stencil(IWineD3D
     if( This->stateBlock->set.renderState[WINED3DRS_TWOSIDEDSTENCILMODE] )
         twosided_enable = This->stateBlock->renderState[WINED3DRS_TWOSIDEDSTENCILMODE];
     if( This->stateBlock->set.renderState[WINED3DRS_STENCILFUNC] )
-        func = StencilFunc(This->stateBlock->renderState[WINED3DRS_STENCILFUNC]);
+        if( !( func = CompareFunc(This->stateBlock->renderState[WINED3DRS_STENCILFUNC]) ) )
+            func = GL_ALWAYS;
     if( This->stateBlock->set.renderState[WINED3DRS_CCW_STENCILFUNC] )
-        func_ccw = StencilFunc(This->stateBlock->renderState[WINED3DRS_CCW_STENCILFUNC]);
+        if( !( func_ccw = CompareFunc(This->stateBlock->renderState[WINED3DRS_CCW_STENCILFUNC]) ) )
+            func = GL_ALWAYS;
     if( This->stateBlock->set.renderState[WINED3DRS_STENCILREF] )
         ref = This->stateBlock->renderState[WINED3DRS_STENCILREF];
     if( This->stateBlock->set.renderState[WINED3DRS_STENCILMASK] )
@@ -3353,10 +3355,12 @@ static void renderstate_stencil(IWineD3D
             twosided_enable = Value;
             break;
         case WINED3DRS_STENCILFUNC :
-            func = StencilFunc(Value);
+            if( !( func = CompareFunc(Value) ) )
+                func = GL_ALWAYS;
             break;
         case WINED3DRS_CCW_STENCILFUNC :
-            func_ccw = StencilFunc(Value);
+            if( !( func_ccw = CompareFunc(Value) ) )
+                func_ccw = GL_ALWAYS;
             break;
         case WINED3DRS_STENCILREF :
             ref = Value;
@@ -3560,20 +3564,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl
 
     case WINED3DRS_ZFUNC                     :
         {
-            int glParm = 0;
+            int glParm = CompareFunc(Value);
 
-            switch ((D3DCMPFUNC) Value) {
-            case D3DCMP_NEVER:         glParm=GL_NEVER; break;
-            case D3DCMP_LESS:          glParm=GL_LESS; break;
-            case D3DCMP_EQUAL:         glParm=GL_EQUAL; break;
-            case D3DCMP_LESSEQUAL:     glParm=GL_LEQUAL; break;
-            case D3DCMP_GREATER:       glParm=GL_GREATER; break;
-            case D3DCMP_NOTEQUAL:      glParm=GL_NOTEQUAL; break;
-            case D3DCMP_GREATEREQUAL:  glParm=GL_GEQUAL; break;
-            case D3DCMP_ALWAYS:        glParm=GL_ALWAYS; break;
-            default:
-                FIXME("Unrecognized/Unhandled D3DCMPFUNC value %ld\n", Value);
-            }
             if(glParm) {
                 glDepthFunc(glParm);
                 checkGLcall("glDepthFunc");
@@ -3676,19 +3668,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl
                 ref = 0.0;
             } else {
                 ref = ((float) This->stateBlock->renderState[WINED3DRS_ALPHAREF]) / 255.0f;
-
-                switch ((D3DCMPFUNC) This->stateBlock->renderState[WINED3DRS_ALPHAFUNC]) {
-                case D3DCMP_NEVER:         glParm = GL_NEVER; break;
-                case D3DCMP_LESS:          glParm = GL_LESS; break;
-                case D3DCMP_EQUAL:         glParm = GL_EQUAL; break;
-                case D3DCMP_LESSEQUAL:     glParm = GL_LEQUAL; break;
-                case D3DCMP_GREATER:       glParm = GL_GREATER; break;
-                case D3DCMP_NOTEQUAL:      glParm = GL_NOTEQUAL; break;
-                case D3DCMP_GREATEREQUAL:  glParm = GL_GEQUAL; break;
-                case D3DCMP_ALWAYS:        glParm = GL_ALWAYS; break;
-                default:
-                    FIXME("Unrecognized/Unhandled D3DCMPFUNC value %ld\n", This->stateBlock->renderState[WINED3DRS_ALPHAFUNC]);
-                }
+                glParm = CompareFunc(This->stateBlock->renderState[WINED3DRS_ALPHAFUNC]);
             }
             if(glParm) {
                 This->alphafunc = glParm;
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index debd8a3..48b18bd 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -665,7 +665,7 @@ GLenum StencilOp(DWORD op) {
     }
 }
 
-GLenum StencilFunc(DWORD func) {
+GLenum CompareFunc(DWORD func) {
     switch ((D3DCMPFUNC)func) {
     case D3DCMP_NEVER        : return GL_NEVER;
     case D3DCMP_LESS         : return GL_LESS;
@@ -677,7 +677,7 @@ GLenum StencilFunc(DWORD func) {
     case D3DCMP_ALWAYS       : return GL_ALWAYS;
     default:
         FIXME("Unrecognized D3DCMPFUNC value %ld\n", func);
-        return GL_ALWAYS;
+        return 0;
     }
 }
 
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index cfb8a7d..bc8a9b5 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1244,7 +1244,7 @@ const char* debug_d3dpool(WINED3DPOOL po
 
 /* Routines for GL <-> D3D values */
 GLenum StencilOp(DWORD op);
-GLenum StencilFunc(DWORD func);
+GLenum CompareFunc(DWORD func);
 void   set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, D3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3);
 void   set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, D3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3, INT texture_idx);
 void   set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords);



More information about the wine-patches mailing list