DInput mouse - where to go from here?
wine-devel at kievinfo.com
Wed Sep 26 23:07:36 CDT 2007
As many of you know, Wine have number of serious problems when it comes down
to games when using mouse. In fact big number of games suffer one or more of
the following problems:
1. Mouse pointer escapes game window (for windowed programs) or confined to
arbitrary rectangle (for full-screen) - bug 6971.
2. Mouse is being constantly re-centered (number of bugs).
3. Mouse lags, moves wrong direction or doesn't move at all (number of bugs).
4. Mouse is not smooth with high graphics/system load.
There are lots of reasons for these bugs:
a) Wine does not grab pointer (doesn't lock it to one particular window).
b) Wine's dinput still doing mouse warping while it should not
c) Wine relies on an application to process messages so new input events
could be received.
d) Wine's x11drv is not fine grained - it has only one lock that everything
uses, d3d and wgl included.
e) The path from x11drv to dinput for input events is long with big overhead.
f) X events come from Wine windows for the current process only not whole
g) Motion events Wine receives are absolute not relative.
Here is what me and others tried but failed:
i) XEvIE - buggy, disabled by default, requires server round trip.
ii) XInput - does not allow opening of keyboard or mouse devices.
iii) Event Device (EvDev) - works perfectly, solves (a,b,c,d,e,f,g) but it's
a client only solution (will not work on remote X, because it will try to
open remote mouse, not local).
iv) Virtualizing mouse pointer in x11drv - depends on (a) moves (b) from
dinput into x11drv while same issues remain.
v) Writing new X extension - last I've heard about this, it didn't get
anywhere past initial proposals.
Anything else I missed? Are there are any better ways to solve these
problems? Any other ways at all?
As you see there are not much options available to solve mouse problems.
However I personally do not want to turn this into another "child opengl
saga". We ether solving it now, or putting a big red X on any game that's
using dinput mouse, that's not already working.
The point I'm trying to make is: can we once put our "right ways of doing
things" aside and fix something that never worked before? And fix it _for
good_! Yes it's a limited fix it will work only for 99% of users who play
games on their PC, and not remotely.
More information about the wine-devel