[dx29] Transparency support
Ann and Jason Edmeades
us at the-edmeades.demon.co.uk
Thu May 15 11:55:13 CDT 2003
Changelog
(Finally) Solves the transparency problem seen in the ClipMirror SDK
sample properly. Also a few tabs->spaces to correct formatting.
Jason
-------------- next part --------------
Index: dlls/d3d8/device.c
===================================================================
RCS file: /home/wine/wine/dlls/d3d8/device.c,v
retrieving revision 1.53
diff -u -r1.53 device.c
--- dlls/d3d8/device.c 14 May 2003 19:33:35 -0000 1.53
+++ dlls/d3d8/device.c 15 May 2003 15:32:42 -0000
@@ -3833,8 +3833,16 @@
int operand = GL_SRC_COLOR;
int source = GL_TEXTURE;
- GetSrcAndOpFromValue(Value, isAlphaArg, &source, &operand);
+ GetSrcAndOpFromValue(Value, isAlphaArg, &source, &operand);
if (isAlphaArg) {
+
+ /* From MSDN (D3DTSS_ALPHAARG1) :
+ The default argument is D3DTA_TEXTURE. If no texture is set for this stage,
+ then the default argument is D3DTA_DIFFUSE.
+ FIXME? If texture added/removed, may need to reset back as well? */
+ if (Type == D3DTSS_ALPHAARG1 && This->StateBlock->textures[Stage] == NULL && Value == D3DTA_TEXTURE) {
+ GetSrcAndOpFromValue(D3DTA_DIFFUSE, isAlphaArg, &source, &operand);
+ }
TRACE("Source %x = %x, Operand %x = %x\n", SOURCEx_ALPHA_EXT(Type), source, OPERANDx_ALPHA_EXT(Type), operand);
glTexEnvi(GL_TEXTURE_ENV, SOURCEx_ALPHA_EXT(Type), source);
vcheckGLcall("glTexEnvi(GL_TEXTURE_ENV, SOURCEx_ALPHA_EXT, source);");
@@ -3906,50 +3914,10 @@
break;
case D3DTOP_SELECTARG1 :
- {
- /*FIXME("see if D3DTOP_SELECTARG1 behavior is correct now!\n");*/
+ {
glTexEnvi(GL_TEXTURE_ENV, Parm, GL_REPLACE);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, Parm, GL_REPLACE)");
-#if 0 /* don't seem to do anything */
- {
- BOOL isAlphaOp = (Type == D3DTSS_ALPHAOP);
- DWORD dwValue = 0;
- GLenum source;
- GLenum operand;
-
- dwValue = This->StateBlock->texture_state[Stage][(isAlphaOp) ? D3DTSS_ALPHAARG1 : D3DTSS_COLORARG1];
- GetSrcAndOpFromValue(dwValue, isAlphaOp, &source, &operand);
- if (isAlphaOp) {
- TRACE("Source %x = %x, Operand %x = %x\n", GL_SOURCE0_ALPHA_EXT, source, GL_OPERAND0_ALPHA_EXT, operand);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, source);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_EXT, 'source')");
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, operand);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_EXT, 'operand')");
- } else {
- TRACE("Source %x = %x, Operand %x = %x\n", GL_SOURCE0_RGB_EXT, source, GL_OPERAND0_RGB_EXT, operand);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, source);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, 'source')");
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, operand);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, 'operand')");
- }
- dwValue = This->StateBlock->texture_state[Stage][(isAlphaOp) ? D3DTSS_ALPHAARG2 : D3DTSS_COLORARG2];
- GetSrcAndOpFromValue(dwValue, isAlphaOp, &source, &operand);
- if (isAlphaOp) {
- TRACE("Source %x = %x, Operand %x = %x\n", GL_SOURCE1_ALPHA_EXT, source, GL_OPERAND1_ALPHA_EXT, operand);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, source);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_EXT, 'source')");
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, operand);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_EXT, 'operand')");
- } else {
- TRACE("Source %x = %x, Operand %x = %x\n", GL_SOURCE1_RGB_EXT, source, GL_OPERAND1_RGB_EXT, operand);
- glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, source);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, 'source')");
- glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, operand);
- checkGLcall("glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, 'operand')");
- }
- }
-#endif
- }
+ checkGLcall("glTexEnvi(GL_TEXTURE_ENV, Parm, GL_REPLACE)");
+ }
break;
case D3DTOP_SELECTARG2 :
More information about the wine-patches
mailing list