blob: b3e72119bba0494bfa1aadfa9a2fce16e2011ebf [file] [log] [blame]
Kristian Høgsberg97f1ebe2008-09-30 09:46:10 -04001
2KEYWORDS:
3
4Wayland is a nano display server, relying on drm modesetting, gem
5batchbuffer submission and hw initialization generally in the
6kernel. Wayland is compositing manager and display server in one
7process. window management is largely pushed to the clients, they
8draw their own decorations and move and resize themselves,
9typically implemented in a library. more of the core desktop could
10be pushed into wayland, for example, stock desktop components such
11as the panel or the desktop background.
12
13It is still designed with a windowed type of desktop in mind, as
14opposed to fullscreen-all-the-time type of interface.
15
Kristian Høgsberg33bea962008-09-30 22:21:49 -040016Current trends goes towards less and less rendering in X server, more
17hardware setup and management in kernel and shared libraries allow
18code sharing without putting it all in a server. freetype,
19fontconfig, cairo all point in this direction, as does direct
20rendering mesa.
Kristian Høgsberg97f1ebe2008-09-30 09:46:10 -040021
22Client allocates DRM buffers, draws decorations, and full window
23contents and posts entire thing to server along with dimensions.
24
25Everything is direct rendered and composited. No cliprects, no
26drawing api/protocl between server and client. No
27pixmaps/windows/drawables, only surfaces (essentially pixmaps). No
28gcs/fonts, no nested windows. OpenGL is already direct rendered,
29pixman may be direct rendered which adds the cairo API, or cairo
30may gain a GL backend.
31
Kristian Høgsberg33bea962008-09-30 22:21:49 -040032Could be a "shell" for launching gdm X server, user session servers,
33safe mode xservers, graphics text console. From gdm, we could also
34launch a rdp session, solid ice sessions.
35
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040036All surface commands (copy, attach, map=set quads) are buffered until
37the client sends a commit command, which executes everything
38atomically...
39
Kristian Høgsberg33bea962008-09-30 22:21:49 -040040
Kristian Høgsberg97f1ebe2008-09-30 09:46:10 -040041ISSUES:
42
43Include panel and desktop background in wayland?
44
45How does clients move their surfaces? set a full tri-mesh every time?
46
47How does the server apply transformations to a surface behind the
48clients back? (wobbly, minimize, zoom) Maybe wobble is client side?
49
50How do apps share the glyph cache?
51
52Input handling - keyboard focus, multiple input devices, multiple
53pointers, multi touch.
54
55Drawing cursors, moving them, cursor themes, attaching surfaces to
56cursors. How do you change cursors when you mouse over a text
57field if you don't have subwindows?
58
59synaptics, 3-button emulation, xkb, scim
60
Kristian Høgsberg33bea962008-09-30 22:21:49 -040061changing screen resolution, adding monitors.
62
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040063
Kristian Høgsberg97f1ebe2008-09-30 09:46:10 -040064RMI
65
Kristian Høgsberga67a71a2008-10-07 10:10:36 -040066The wayland protocol is a async object oriented protocol. All
67requests are method invocations on some object. The request include
68an object id that uniquely identifies an object on the server. Each
69object implements an interface and the requests include an opcode that
70identifies which method in the interface to invoke.
71
72The server sends back events to the client, each event is emitted from
73an object. Events can be error conditions. The event includes the
74object id and the event opcode, from which the client can determine
75the type of event. Events are generated both in repsonse to a request
76(in which case the requet and the event constitutes a round trip) or
77spontanously when the server state changes.
78
Kristian Høgsberg97f1ebe2008-09-30 09:46:10 -040079the get_interface method is called on an object to get an object
80handle that implements the specified interface.