本人博客已经迁移到nasdaqgodzilla.github.io
文章目录
- 本人博客已经迁移到[nasdaqgodzilla.github.io](https://nasdaqgodzilla.github.io)
- 步骤
- 基本接口和协议接口
步骤
- client通过
wl_display_connect
连接到wayland server并且得到wl_display
。 - client通过
wl_display_get_registry
即可获取到server提供的所有基本接口(如wl_xxxx)和wayland协议接口(如xdg等协议定义的接口)。client根据自己需求来绑定这些接口,这些接口绑定后,client即可调用这些接口,以此来与server交互。 - 在client对server接口的绑定中,其中一些基本接口是必须绑定的,比如
wl_compositor
、负责接收事件的wl_seat
、wl_output
、wl_shell
、zwp_linux_dmabuf
等等。还有一些是可以选择性使用的与wayland协议(如xdg、remote_shell等等)相关的接口。假如需要使用xdg_shell
做窗口管理,如设置标题、窗口名称等,就需要用上该接口(wayland本身不会提供,一般都是采用协议接口来实现)。 - 通过
wl_registry_bind
绑定接口、注册回调函数后,接下来就是通过wl的基本接口请求server创建surface(即窗口的内容),并且通过刚刚绑定的协议接口来进行窗口管理,如设置标题、控制最大化最小化。 - 创建窗口的前一步骤是准备好窗口内容的buffer。通过绑定的
zwp_linux_dmabuf
服务提供的接口zwp_linux_dmabuf_v1_create_params
来创建buffer。也可以通过wl_shm
的wl_shm_pool
创建wl_buffer
。 - 通过
wl_compositor_create_surface
创建surface,此时server端已经开始处理并显示这个窗口了。通过wl_surface_attach
将buffer绑定到surface,通过wl_surface_damage
刷新窗口,wl_surface_commit
将双缓冲buffer提交。 wl_surface
只是窗口的画面,实际上还不是完整的窗口,相比普通的窗口它还缺少标题栏等ui decoration。通过wl_shell_get_shell_surface
创建shell_surface,它能够为surface创建一个窗口,让它拥有标题栏。
基本接口和协议接口
基本接口诸如wl_shell
、wl_surface
等是wayland自带的接口,client只要使用这有限的接口就能通过server显示出画面。而wayland还支持很多的协议包括处于通用级别的xdg协议。这个协议提供的接口能让你干更多窗口管理相关的内容,如设置标题栏,处理放大、缩小请求等等。因此,显示内容仅依靠基本接口即可实现,实现窗口管理还需要看server支持的协议接口,client通过对server的协议接口的绑定和调用完成窗口管理。