mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-02-06 04:06:19 -05:00
Core Wayland window system code and protocol
This implements the commit/ack/frame protocol that let clients batch up a series of requests and then commit them atomically using the commit request. The commit requests generats two following events: the acknowledge event, which lets the client know that the server has received the request and which frame the rendering has been scheduled for. At this point the client can start rendering the next frame or free up temporary buffers. Then when the compositor finally makes the newly composited frame visible on screen the server sends a frame event, which contains the number of the frame that was presented and the time when it happened. The window and flower clients have been updated to use these two events in their main loops and everything now updates per frame. The EGL compositor repaint loop has been tweaked to delay the compositing of the screen to 10ms after last swapbuffer completed so as to allow processing as many requests as possible before blocking on the next vertical retrace. |
||
|---|---|---|
| .gitignore | ||
| background.c | ||
| cairo-util.c | ||
| cairo-util.h | ||
| compositor.c | ||
| connection.c | ||
| connection.h | ||
| egl-compositor.c | ||
| evdev.c | ||
| event-loop.c | ||
| flower.c | ||
| gears.c | ||
| gears.h | ||
| glx-compositor.c | ||
| Makefile | ||
| NOTES | ||
| pointer.c | ||
| README | ||
| screenshot.c | ||
| wayland-client.c | ||
| wayland-client.h | ||
| wayland-glib.c | ||
| wayland-glib.h | ||
| wayland-util.c | ||
| wayland-util.h | ||
| wayland.c | ||
| wayland.h | ||
| window.c | ||
This file describes how to build and run wayland. See NOTES for what wayland is or maybe will be some day. There's a google group for wayland/eagle discussion here: http://groups.google.com/group/wayland-display-server Wayland requires the eagle EGL stack available from git://people.freedesktop.org/~krh/eagle and currently assumes that eagle is checked out in a sibling directory, for example: ~krh/src/wayland and ~krh/src/eagle Eagle should work with a recent DRI driver from mesa, but I have mesa repo with an eagle branch here: git://people.freedesktop.org/~krh/mesa which provides and experimental DRI CopyBuffer extension, that lets wayland use the DRI driver and the hardware for implementing buffer swaps. Eagle needs to be compiled against the dri_interface.h from this branch to be able to use the CopyBuffer extension. To run wayland you currently need intel hardware, a kernel with gem and kernel modesetting, and it is necessary to set a couple of environment variables. First, set LD_LIBRARY_PATH: export LD_LIBRARY_PATH=$PWD:$PWD/../eagle Yes, this sucks, but libtool sucks more. Then to let eagle pick up the custom dri driver, set export EAGLE_DRIVER_PATH=$PWD/../mesa/lib and finally set up the path to the evdev device to use as a pointer device: export WAYLAND_POINTER=/dev/by-id/whatever-it's-called-event-mouse If you haven't already, load the i915 driver with modesetting: modprobe i915 modeset=1 You may need to unload it first, if it's loaded already. Also, on Fedora, there may be a bogus /etc/modprobe.d/i915modeset preventing the modeset paramater from reaching the module. Nuke it. At this point you should be able to launch wayland and a couple of clients. Try something like: ./wayland & ./background <some png/jpg image smaller than 1024x768> & ./flower & ./flower & ./flower & ./window & ./pointer & Maybe some day there'll be a script that does all this. Some day... And after all this work it may still not work or even oops your kernel. It's very much work in progress, so be prepared. cheers, Kristian