Wayland入门教程06:库安装配置与介绍

系列索引地址:Wayland入门系列教程索引

上一篇:Wayland入门教程05:框架简介

开发的时候需要链接一些动态链接库。本文介绍一些基本的库功能

安装

Ubuntu24.04

1
2
sudo apt install pkg-config libwayland-bin libwayland-dev wayland-protocols libegl1-mesa-dev libxkbcommon-x11-dev libwlroots-dev
sudo apt install libffi-dev libx11-xcb-dev libglm-dev extra-cmake-modules #可能需要的额外的软件包

Manjaro

1
yaourt -S wayland wayland-utils wayland-protocols egl-wayland wlroots libdrm 

介绍

Wayland开发有两个方面:Wayland和混合器。Wayland决定显示什么,而混合器决定怎么显示。

Wayland与GPU驱动配合,他们要有相同的缓冲器API,GBM除了NVIDIA都支持,EGLStreams除了NVIDIA都不支持。

Wayland

首页:wayland 官网

Wayland是X更简单的替代品,更容易开发和维护。GNOME和KDE预计将被移植到它上。

Wayland是一个合成器与客户端对话的协议,以及该协议的C库实现。合成器可以是运行在Linux内核modeset和evdev输入设备上的独立显示服务器、X应用程序或wayland客户端本身。客户端可以是传统应用程序、X服务器(无根或全屏幕)或其他显示服务器。

Wayland项目的一部分也是Wayland合成器的Weston参考实现。Weston可以作为X客户端或在Linux KMS下运行,并附带一些演示客户端。Weston合成器是一个最小和快速的合成器,适用于许多嵌入式和移动用例。

Wayland协议(Wayland-Protocol)API参考手册:API首页

libgstwayland

gst是gstreamer的通常缩写,也就是说此库是gstreamer的一部分,他使用wayland作为显示控件。

libnvidia-egl-wayland

EGL是渲染API(如 OpenGL ES)和原生窗口系统之间的接口。

通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的。因此 EGL 被设计出来,作为 OpenGL 和原生窗口系统之间的桥梁。

EGL API 是独立于 OpenGL ES 各版本标准的独立的一套 API,其主要作用是为 OpenGL 指令 创建 Context 、绘制目标 Surface 、配置 FrameBuffer 属性、Swap 提交绘制结果 等。

EGL 提供如下机制:

  • 与设备原生窗口通信
  • 查询绘制 surface 的可用类型和配置
  • 创建绘制 surface
  • 在 OpenGL ES 3.0 或其他渲染 API 之间同步渲染
  • 管理纹理贴图等渲染资源

可以看出,此EGL功能有NVIDIA提供。

libva-Wayland

(Video Acceleration)VA-API是一个开源的库和API规范,它为视频处理提供了对图形硬件加速能力的访问。它由一个主库和针对每个受支持的硬件供应商的特定于驱动程序的加速后端组成。

可以看到此库的功能是VA,但是加上了Wayland用于扩展部分功能,此库是libva软件包的一部分。

wayland-protols

此库并没有 *.so 库文件,其提供的协议(protocols)都是以 *.xml 格式提供的。

libwayland-client libwayland-server

从名字可以看出一个是客户端,一个是服务端,两端以socket进行通信,通信协议由wayland-protocols提供。

输入管理模块接受用户输入,然后一方面shell作出相应的窗口管理操作(如窗口堆栈的改变,focus的变化等),另一方面将该input event传给之前注册了相应输入事件的client。client收到后会在handler中做相应动作,如调整视图然后重绘。如有重绘发生,新buffer渲染完成后client将其handle传给server,接着server端生成z-order序的窗口列表,之后compositor用renderer进行合成,最后输出(比如到framebuffer)。

libwayland-cursor

从名字可以看出,此库提供与光标/鼠标相关的操作。

libwayland-egl

EGL已经在libnividia-egl-wayland中介绍过了,此EGL功能由Wayland提供。

libwlroots

可插入、可组合、不确定的构建Wayland合成器的模块;或者你要编写的大约5万行代码。

  • wlroots提供了抽象底层显示和输入硬件的后端,包括KMS/DRM、列表输入、Wayland、X11和无头后端,以及您选择编写的任何自定义后端,这些后端都可以在运行时创建或销毁,并彼此协同使用。
  • Wlroots提供了包括wayland.xml和各种协议扩展接口的非独立实现。我们还促进了跨许多合成器的便携式扩展的标准化。wlroots提供了几个强大的、独立的、可选的工具来实现许多合成器通用的组件,例如在物理空间中的输出的安排。
  • wlroots提供了一个Xwayland抽象,允许您拥有优秀的Xwayland支持,而不用担心在编写编写器之上编写自己的X11窗口管理器。
  • wlroots提供了一个渲染器抽象,简单的合成器可以使用它来避免直接编写GL代码,但当您需要自定义渲染代码时,它会消失。

Wlroots实现了大量的Wayland合成器特性,并正确地实现了它们,因此您可以专注于使您的合成器独特的特性。通过使用wlroots,您可以获得高性能、优秀的硬件兼容性、对许多陆路接口的广泛支持,以及舒适的开发工具——或者您喜欢的这些特性的任何子集,因为它们都相互独立工作,并且可以自由地编写您想要自己实现的任何东西。

下一篇:Wayland入门03:Wayland架构


Wayland入门教程06:库安装配置与介绍
https://blog.jackeylea.com/wayland/wayland-libraries-installation-and-introduction/
作者
JackeyLea
发布于
2021年9月27日
许可协议