Module: wine Branch: refs/heads/master Commit: 405e11ea62411b8551edeeb5a36f9870bf34ee53 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=405e11ea62411b8551edeeb5...
Author: H. Verbeet hverbeet@gmail.com Date: Sat Jun 10 23:49:09 2006 +0200
wined3d: Cleanup GetSrcAndOpFromValue().
- Cleanup GetSrcAndOpFromValue(). - Use naming more consistent with the rest of the file.
---
dlls/wined3d/utils.c | 112 +++++++++++++++------------------------- dlls/wined3d/wined3d_private.h | 1 2 files changed, 42 insertions(+), 71 deletions(-)
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 6c1acde..97f5b4f 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -399,6 +399,44 @@ GLenum StencilOp(DWORD op) { } }
+static void get_src_and_opr(DWORD arg, BOOL is_alpha, GLenum* source, GLenum* operand) { + /* The D3DTA_ALPHAREPLICATE flag specifies the alpha component of the + * input should be used for all input components. The D3DTA_COMPLEMENT + * flag specifies the complement of the input should be used. */ + BOOL from_alpha = is_alpha || arg & D3DTA_ALPHAREPLICATE; + BOOL complement = arg & D3DTA_COMPLEMENT; + + /* Calculate the operand */ + if (complement) { + if (from_alpha) *operand = GL_ONE_MINUS_SRC_ALPHA; + else *operand = GL_ONE_MINUS_SRC_COLOR; + } else { + if (from_alpha) *operand = GL_SRC_ALPHA; + else *operand = GL_SRC_COLOR; + } + + /* Calculate the source */ + switch (arg & D3DTA_SELECTMASK) { + case D3DTA_CURRENT: *source = GL_PREVIOUS_EXT; break; + case D3DTA_DIFFUSE: *source = GL_PRIMARY_COLOR_EXT; break; + case D3DTA_TEXTURE: *source = GL_TEXTURE; break; + case D3DTA_TFACTOR: *source = GL_CONSTANT_EXT; break; + case D3DTA_SPECULAR: + /* + * According to the GL_ARB_texture_env_combine specs, SPECULAR is + * 'Secondary color' and isn't supported until base GL supports it + * There is no concept of temp registers as far as I can tell + */ + FIXME("Unhandled texture arg D3DTA_SPECULAR\n"); + *source = GL_TEXTURE; + break; + default: + FIXME("Unrecognized texture arg %#lx\n", arg); + *source = GL_TEXTURE; + break; + } +} + /* Set texture operations up - The following avoids lots of ifdefs in this routine!*/ #if defined (GL_VERSION_1_3) # define useext(A) A @@ -475,12 +513,12 @@ #define GLINFO_LOCATION ((IWineD3DImpl * then the default argument is D3DTA_DIFFUSE. FIXME? If texture added/removed, may need to reset back as well? */ if (isAlpha && This->stateBlock->textures[Stage] == NULL && arg1 == D3DTA_TEXTURE) { - GetSrcAndOpFromValue(D3DTA_DIFFUSE, isAlpha, &src1, &opr1); + get_src_and_opr(D3DTA_DIFFUSE, isAlpha, &src1, &opr1); } else { - GetSrcAndOpFromValue(arg1, isAlpha, &src1, &opr1); + get_src_and_opr(arg1, isAlpha, &src1, &opr1); } - GetSrcAndOpFromValue(arg2, isAlpha, &src2, &opr2); - GetSrcAndOpFromValue(arg3, isAlpha, &src3, &opr3); + get_src_and_opr(arg2, isAlpha, &src2, &opr2); + get_src_and_opr(arg3, isAlpha, &src3, &opr3);
TRACE("ct(%x), 1:(%x,%x), 2:(%x,%x), 3:(%x,%x)\n", comb_target, src1, opr1, src2, opr2, src3, opr3);
@@ -1569,72 +1607,6 @@ void set_texture_matrix(const float *sma checkGLcall("glLoadMatrixf(mat)"); }
-void GetSrcAndOpFromValue(DWORD iValue, BOOL isAlphaArg, GLenum* source, GLenum* operand) -{ - BOOL isAlphaReplicate = FALSE; - BOOL isComplement = FALSE; - - *operand = GL_SRC_COLOR; - *source = GL_TEXTURE; - - /* Catch alpha replicate */ - if (iValue & D3DTA_ALPHAREPLICATE) { - iValue = iValue & ~D3DTA_ALPHAREPLICATE; - isAlphaReplicate = TRUE; - } - - /* Catch Complement */ - if (iValue & D3DTA_COMPLEMENT) { - iValue = iValue & ~D3DTA_COMPLEMENT; - isComplement = TRUE; - } - - /* Calculate the operand */ - if (isAlphaReplicate && !isComplement) { - *operand = GL_SRC_ALPHA; - } else if (isAlphaReplicate && isComplement) { - *operand = GL_ONE_MINUS_SRC_ALPHA; - } else if (isComplement) { - if (isAlphaArg) { - *operand = GL_ONE_MINUS_SRC_ALPHA; - } else { - *operand = GL_ONE_MINUS_SRC_COLOR; - } - } else { - if (isAlphaArg) { - *operand = GL_SRC_ALPHA; - } else { - *operand = GL_SRC_COLOR; - } - } - - /* Calculate the source */ - switch (iValue & D3DTA_SELECTMASK) { - case D3DTA_CURRENT: *source = GL_PREVIOUS_EXT; - break; - case D3DTA_DIFFUSE: *source = GL_PRIMARY_COLOR_EXT; - break; - case D3DTA_TEXTURE: *source = GL_TEXTURE; - break; - case D3DTA_TFACTOR: *source = GL_CONSTANT_EXT; - break; - case D3DTA_SPECULAR: - /* - * According to the GL_ARB_texture_env_combine specs, SPECULAR is - * 'Secondary color' and isn't supported until base GL supports it - * There is no concept of temp registers as far as I can tell - */ - FIXME("Unhandled texture arg D3DTA_SPECULAR\n"); - *source = GL_TEXTURE; - break; - - default: - FIXME("Unrecognized texture arg %ld\n", iValue); - *source = GL_TEXTURE; - } -} - - #define GLINFO_LOCATION ((IWineD3DImpl *)(This->wineD3D))->gl_info GLint D3DFmt2GLIntFmt(IWineD3DDeviceImpl* This, D3DFORMAT fmt) { GLint retVal = 0; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 1e4573d..98eac5b 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1168,7 +1168,6 @@ const char* debug_d3dpool(WINED3DPOOL po GLenum StencilOp(DWORD op); void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, D3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3); void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords); -void GetSrcAndOpFromValue(DWORD iValue, BOOL isAlphaArg, GLenum* source, GLenum* operand);
SHORT D3DFmtGetBpp(IWineD3DDeviceImpl* This, D3DFORMAT fmt); GLenum D3DFmt2GLFmt(IWineD3DDeviceImpl* This, D3DFORMAT fmt);