Am Mittwoch, 2. Januar 2008 12:44:24 schrieb Stefan Dösinger:
> Am Mittwoch, 2. Januar 2008 13:38:57 schrieb Alexander Dorofeyev:
> > In case of colorkey emulation for a texture, if the application wants to
> > select alpha from diffuse color at stage 0, a fixup to modulate with
> > texture alpha more closely matches what the application wants than fixup
> > to just select alpha from texture.
I tested pop3d and Moto Racer 2. Pop3d still works as expected, but moto racer 
2 has some missing geometry. It draws some opaque parts of the scene with 
color keying on, and a diffuse alpha of 0.0, so the alpha test kicks in and 
the geometry is missing.

The moto racer 2 demo is available online, e.g. 
http://downloads.gamezone.com/demos/d1576.htm. Note that the installer 
refuses to run, unless you set your X server's depth to 16. I also caused a 
regression in that game when I fixed some bugs with native d3drm.dll, so you 
need the attached hack.
(I didn't have time and energy to write a test to test that, but I think that 
BRANCHFORWARD tokens with offset 0 are special, and that the existing 
executebuffer test in d3d.c just points out the special case, but the common 
case is implemented incorrectly)
diff --git a/dlls/ddraw/executebuffer.c b/dlls/ddraw/executebuffer.c
index e74bdb1..059fa25 100644
--- a/dlls/ddraw/executebuffer.c
+++ b/dlls/ddraw/executebuffer.c
@@ -525,11 +525,13 @@ IDirect3DExecuteBufferImpl_Execute(IDirect3DExecuteBufferImpl *This,
 		        if (!ci->bNegate) {
                             TRACE(" Branch to %d\n", ci->dwOffset);
 			    instr = (char*)current + ci->dwOffset;
-			}
+                break;
+                }
 		    } else {
 		        if (ci->bNegate) {
                             TRACE(" Branch to %d\n", ci->dwOffset);
 			    instr = (char*)current + ci->dwOffset;
+                break;
 			}
 		    }
 


Reply via email to