wayland 是 X11协议的替代品,所以wayland是什么?X11是什么?
-X11: Version 11 of the X protocol
-X.Org Server: X11协议的服务器端实现。
wayland是一个窗口管理协议,实现display server和display client之通信的一套标准协议。作为X11 window system protocol and architecture的替代。
wayland也是一种Client/server的系统架构,包含window management、compositing and the display server。以weston来参考server端的实现。
支持C libraries ,比如libwayland-client
wayland 是 X11协议的替代品,了解wayland架构前,先了解X架构。
X11 架构
下面以 点击事件(input devices输入event到屏幕响应其变化)flow来梳理X 架构的。
Wayland 架构
对比X 架构,其减少了X server与compositor 之间IPC通信的步骤。wayland 将 compositor和wayland server合并,并且wayland协议允许将input event转发到wayland client进行render,然后wayland client直接发送damage event给到compositor。
Wayland与X之间主要的区别
wayland 渲染
在上述概述中,我忽略了一个细节,即在 Wayland 下客户端如何实际进行渲染。通过从图像中移除 X 服务器,我们也去掉了 X 客户端通常渲染的机制。但是,我们已经在 X 下使用 DRI2 时使用了另一种机制:直接渲染。通过直接渲染,客户端和服务器共享视频内存缓冲区。客户端链接到诸如 OpenGL 之类的渲染库,该库知道如何编程硬件,并直接渲染到缓冲区中。合成器可以将缓冲区作为纹理使用,将其合成到桌面上。在初始设置之后,客户端只需要告诉合成器使用哪个缓冲区,以及何时何地渲染了新内容。
这给应用程序留下了两种更新其窗口内容的方式:
方式一:将新内容渲染到一个新的缓冲区,并告诉合成器使用新的缓冲区代替旧的缓冲区。应用程序每次需要更新窗口内容时都可以分配一个新的缓冲区,或者可以保留两个(或更多)缓冲区并在它们之间进行循环。缓冲区的管理完全由应用程序控制。
方式二:将新内容渲染到之前告诉合成器要使用的缓冲区中。尽管可以直接在与合成器共享的缓冲区中进行渲染,但这可能会与合成器竞争。可能发生的情况是,重新绘制窗口内容可能会被合成器重新绘制桌面所打断。如果应用程序在清除窗口之后但在渲染内容之前被中断,合成器将会从空白缓冲区获取纹理。结果是应用程序窗口会在空白窗口和部分渲染内容之间闪烁。避免这种情况的传统方法是将新内容渲染到后备缓冲区,然后从那里复制到合成器表面。后备缓冲区可以即时分配,并且足够大以容纳新内容,或者应用程序可以保留一个缓冲区。同样,这也在应用程序控制之下。
无论哪种情况,应用程序都必须告诉合成器表面的哪个区域包含新内容。当应用程序直接渲染到共享缓冲区时,合成器需要注意到有新内容。但是当交换缓冲区时,合成器不会假设有任何变化,并且需要应用程序的请求才会重新绘制桌面。即使应用程序将新缓冲区传递给合成器,仍然可能只有一个小部分缓冲区是不同的,比如一个闪烁的光标或一个旋转的加载图标。
上面介绍wayland是一个协议,也是一个Client/Server的架构,wayland server即compositor。那常见的wayland compositor有哪些?
Wayland compositor | Description |
---|---|
Weston | the reference implementation of a Wayland compositor; Weston implements client-side decoration |
Lipstick | mobile graphical shell framework which implements Wayland compositor. It is used in Sailfish OS and Nemo Mobile |
Enlightenment 0.20(E20) | will have full Wayland support.will have full Wayland support. |
KWin | had incomplete Wayland support in April 2013. |
Mutter | maintains a separate branch for the integration of Wayland for GNOME 3.9 (in September 2013) |
Clayland | is a simple example Wayland compositor using Clutter. |
本文介绍了wayland基本概念和架构