weston (1): Linux man pages – code.tools
非常详尽,多图慎入:Wayland与Weston简介 - 云+社区 - 腾讯云
什么是weston?
Wayland是一套display server(Wayland compositor)与client间的通信协议,而Weston是Wayland compositor的参考实现。
Wayland 架构
Wayland protocol设计成2层通信:底层基于C语言和socket通讯 ,顶层基于XML实现
Wayland protocol分为两个库文件:libwayland-server和libwayland-client,分别由Wayland compositors和Wayland client使用。
Wayland Core Interfaces
源码目录protocol/wayland.xml定义了Wayland protocol,最基本的协议一般包括:
Rendring Mode
wayland协议中不包括渲染API,client可以使用cairo或者opengl渲染库来自己实现所有渲染任务,也可以依赖wayland支持组件库(QT、GTK)来实现。窗口内容渲染好后存储在wl_buffer object中,窗口数据必须可在client and the compositor之间可以共享。如果client使用CPU渲染,结果将存储在memory中,这种情况下,client and the compositor可以通过share memory来实现共享(wl_shm and wl_shm_pool interfaces)。缺点就是显示的performance可能会下降,因为compositor会有一些额外的任务,比如,将共享的数据发送给GPU,这时候会产生一些延迟。
典型的做法是通过OpenGL, OpenGL ES or Vulkan提供的API结合GPU实现硬件加速,Client and compositor 通过特殊句柄引用GPU-space的buffer而非main memory中的buffer,compositor可以避免额外的数据拷贝(client-to-compositor-to-GPU)。
如何显示是由client指导compositor实现的,client将渲染好的buffer和surface绑定,commit给compositor。compositor显示结束后释放buffer,通过event通知client。
Weston 依赖GEM实现buffer在APP和compositor之间共享。
Weston中使用libinput来处理输入设备(键盘、鼠标、touch等)