学习Wayland协议已经好几个月了,期间也查阅了不少资料,奈何目前对于它的资料并不是很多,对他原理以及解析更是寥寥无几,其中有一篇非常不错,给个链接: https://blog.csdn.net/jinzhuojun/article/details/40264449, 需要的可以去查看查看.本文的目的是更加通俗详细的解释wayland协议.好了,废话不多说,下面开始讲述wayland协议.
什么是wayland
关于什么是wayland网上有很多解释,我这里就不在赘述,而是以我自己的理解来浅显易懂的给大家解释一下.
Wayland协议,是一个定义怎么来进行窗口管理的协议. 什么叫窗口管理呢? 我们知道在windows操作系统上有很多很多的应用程序,在启动该应用程序之后,一般会弹出一个该应用程序的窗口.这个窗口是怎么产生的? 太深入理解没必要,我们只需要知道,我们在创建窗口的时候都是必须调用指定的接口才可以创建,是吧? 这个接口就相当于窗口管理的协议提供的接口. 各种形形色色的接口在不同的操作系统上是不一样的,因此如果我们要创建窗口,在不同的操作系统上就需要不同的代码,因此,跨平台就是件很麻烦的事情. 然而,在这种情况下,涌现出了大量跨平台的框架,他们把和操作系统相关的创建窗口的接口封装了起来,然后通过提供统一的接口给用户,这样,用户就可以使用相同的代码在不同的操作系统上创建出窗口, 比如Qt, 因为作者本身也是在使用Qt的,因此,此处只列出Qt.
上面说了,窗口在不同操作系统上调用不同的接口去创建窗口,其实是不准确的,因为,其实窗口管理理论上是和操作系统不强绑定的关系.只是有些操作系统把窗口管理给绑定到内核了,比如windows(这里我也是看资料了解的,至于正确性,我不做保证,但是现象还是很明确的).但是也有明确的例子证明,窗口管理和操作系统是不绑定的,比如高版本的ubuntu(18.04),该系统提供了两种窗口管理的方式,一种就是本文的wayland,另一种是原有的x11,但由于支持wayland协议的软件比较少,现在还比较难以流行起来。
为什么需要窗口管理呢? 我们都知道,那个窗口什么的都是通过显示器显示给我们看的,然后通过鼠标键盘等外设来操作的,但这些东西都只有一份(当然,你有多个显示器多个鼠标键盘什么的,也是可以的,但是总不能同时操作吧,显示屏多个的问题自己想想怎么反驳吧),如果现在有两个进程都需要显示出来,他们都去争夺这个显示屏去绘制,最终出来的不就花屏了?因为这两个进程是不知道对方的存在,不知道对方现在占用了哪里,因此,需要一个东西来协调才能让多个进程完美的同时显示出来,这个就是窗口管理的作用。
说实话,就上面讲的这些东西,都是在我理解wayland是什么之后才彻底明白的,因此,也希望读者能够通过本文对wayland有所了解,并且开始理解窗口管理的本质。
好了,开始说说wayland。
上面我说了wayland是一种窗口管理的协议,它和x11协议是同等的。那么,是什么样的协议呢?看下面
<interface name="wl_buffer" version="1">
<description summary="content for a wl_surface">
A buffer provides the content for a wl_surface. Buffers are
created through factory interfaces such as wl_drm, wl_shm or
similar. It has a width and a height and can be attached to a
wl_surface, but the mechanism by which a client provides and
updates the contents is defined by the buffer factory interface.
</description>