http://bugs.winehq.org/show_bug.cgi?id=14375
--- Comment #15 from Lisa Denia eiffel56@gmail.com 2009-09-24 12:04:54 --- Just forget my previous post. Its incorrect and stupid.
I started looking around again. It turns out that the cursor is drawn using vertex blending. The vertex blending extension is not available on most graphics cards/drivers, leading to the bug that the cursor doesn't behave the same way as it does on Microsoft Windows systems(thats another bug). I read about the software vertex blending thingy and applied it to Wine. It seems that it is not correct, the cursor is completely messed up, but that garbage does not flicker. After I played with the patch it turns out that an additional call to transform_world in state_vertexblend_w causes the cursor not to flicker. And indeed, doing that even without the whole software vertex blending stuff fixes the cursor flickering.
But, is that the correct solution? I had a look at state_vertexblend, which gets used in case your hardware/driver supports the vertex blending extension. transform_worldex gets called there. So, if we call it also in state_vertexblend_w, its like an "We don't have vertex blending support, but just display what we got so far", right? Sadly, calling transform_worldex in state_vertexblend_w does not fix the cursor flickering. It only stops flickering when we call transform_world.
But I don't really understand the cause of this bug at all. I attached a patch which fixes the cursor flickering in Revelation, but that approach could be totally wrong. Take it as an workaround. Altough it fixes it, I think the cause is somewhere else. The flickering looks like in comment #12 for me: -Begin draw- The scene gets rendered The cursor gets rendered The scene gets rendered again -End draw- So what happens if you use the patch is: -Begin draw- The scene gets rendered The cursor gets rendered The scene gets rendered again The cursor also gets rendered again -End draw- Which would not be the correct solution. Instead, we should probably stop rendering the scene twice. At least if that happens because of Wine(could also be because of a stupid game engine).
Any help/comments/whatever appreciated ;).