Hi,
Err reading your e-mail again, pardon my directx ignorance, but aren't all d3d z values supposed to be in the [0.0, 1.0] range? I thought that was the range for the z buffer. I recall reading that one of the main annoyance differences between OpenGL and D3D was OpenGL used [-1.0, 1.0] for depth and D3D used [0.0, 1.0].
You could be right, I have to do some more checks. But the Half-Life problem could be caused by a bug in my ProcessVertices implementation. I interpreted the results I got from windows and blindy implemented the viewport conversation, and it seems that there are conflicts between my conversation and the GL viewport setup.
However, the triangle problem remains. I have changed the code to use z=0.1 for the red triangle and z=0.9 for the blue one, and the blue triangle still overlaps the red one on Windows. If I change the Z values, the result is unchanged.