Am Donnerstag, 3. Januar 2008 06:20:26 schrieb Alexander Dorofeyev: > Oh now I see this case I haven't thought about. For some reason, or maybe > no reason at all, Moto racer sets alphaop to selectarg1 and alphaarg1 to > current (diffuse)! That looks kind of strange (if it then gives vertices > with diffuse alpha = 0), but maybe it's just "optimizing" by setting states > it will need later. And it expects it to work despite diffuse alpha is 0 > because it disables alpha blending and alpha test. In wine though the > latter state is overriden by colorkey emulation so the result is bad. But I > think this can be sorted out by checking ALPHABLENDENABLE, because it's > probably a reasonable indicator for telling whether the app is going to > give something meaningful in diffuse alpha or not. Do you think something > along the lines of attached patch can be an acceptable solution? With it, > AVP1 game works properly and it also seems to bring back geometry in moto > racer, at least as far as I can tell. Yes, I think this idea is quite nice. It makes a bit of a hacky impression, but the color keying emulation is a hack after all. Only one small suggestion, I think you don't have to call tex_alphaop unconditionally in state_blend, I think this is only needed if COLORKEYENABLE is on.
On a sidenode, somewhere I've seen a document stating that the Nvidia Windows driver emulates color keying with the alpha test as well: http://developer.nvidia.com/object/ColorKey_in_D3D.html It implements the alpha setting in a slightly different way, and I am not sure if we can emulate that without a fragment shader. Still it's an interesting read.
