👀偷偷观察
2024-04-24 14:42 deepin
看了你这个我算是明白这个《卡姆破贼特儿》 了,
compositor 收到所有client发过来的图像句柄后,在显存中进行合成,压成一个帧。然后通知显卡显示。
Reply Like 0 View the author
看了你这个我算是明白这个《卡姆破贼特儿》 了,
compositor 收到所有client发过来的图像句柄后,在显存中进行合成,压成一个帧。然后通知显卡显示。
看了你这个我算是明白这个《卡姆破贼特儿》 了,
compositor 收到所有client发过来的图像句柄后,在显存中进行合成,压成一个帧。然后通知显卡显示。
哇!是官方!!
哇!是官方!!
你认错了吧,我不是官方,你也可以叫deepin懒洋洋
通信方式:
应用程序(client)和wayland compositor之间通过unix domain socket通信。
通信步骤(大概):
关于请求和响应:
0000000A Object ID (10)
00180002 Message length (24) and request opcode (2)
00000000 X coordinate (int): 0
00000000 Y coordinate (int): 0
00000100 Width (int): 256
00000100 Height (int): 256
一个简单的client发给compositor请求包含请求头和请求体,跟http协议类似,不过是基于socket之间的二进制方式。
请求头包含:对象ID(Object ID),请求长度(Message Length),操作码(opcode)。
请求体:一般由操作码决定。操作码需要哪些参数就给那些,比如这个操作码就需要4个参数,x,y坐标,长度和宽度。
相应也和请求类似。
操作码可以理解为对象里面的方法。这里,操作码为2,就表示要调用compositor中对象ID为10的第3个方法。
所以,compositor和client之间的通信,可以理解为相互调用对方对象的方法。
关于对象和操作码:
对象和操作码由wayland.xml协议文件定义,或者说描述。
再由各compositor实现(比如:kiwn,hyperLand等)。
关于扩展:
除了wayland.xml,这个核心协议。里面定义的一些核心对象和方法外。
还有一些扩展。一个比较重要的扩展是xdg-shell.xml。
这些扩展里面的对象也是通过全局对象的方式暴露给client的。
这个扩展里面有一个比较重要的对象
xdg_wm_base
从这个对象的名字不难猜出,“wm” 就是window manager的缩写。
他的主要功能是给client的图像外围包裹一个窗口,然后在窗口的右上角加上最大化,最小化,关闭,这些按钮。
如果使用client使用了这个对象和compositor进行通信,那么应用程序就和我们日常看到的一样啦!
所以一般client都会使用这个xdg-shell这个扩展。
所以不同compositor对这个扩展的实现,决定了不同的窗口样式风格。
比如hyperland这些平铺式的,就没有最大化,最小化,关闭这些按钮。
再比如:比如kwin风格。gnome风格等。
欢迎指正!!
书籍:wayland-book