所以我想为wayland 创建一个支持windows 3D 效果的合成器(类似于compiz,但在wayland 上)。我已经看到了这个问题:如果我想写一个 Wayland 合成器,我应该从哪里开始?但唯一的答案指向 SWC(https://github.com/michaelforney/swc),这不适用于我的情况,因为我想使用 OpenGL 并且 SWC 不容易支持 3D。那么是否有一些项目/图书馆/书籍/教程/等我可以学习在 Wayland 上编写自己的 WM 的必要内容?提前致谢。
1 回答
Wayland 协议的唯一目的是客户端和服务器之间的通信。服务器向客户端提供输入事件,客户端向服务器提供缓冲区(可以映射到 OpenGL 纹理)。服务器/合成器从哪里获取输入事件以及它对缓冲区的作用完全取决于合成器。
所以合成器本身需要输入事件的源和绘制结果的方法。这就是为什么许多 Wayland 合成器有多个后端的原因:它们可以在 X11 上运行,直接在 Linux 内核上运行,甚至可以在另一个 Wayland 服务器上运行。
您的问题的答案实际上取决于您想在哪里运行您的合成器。如果您已经熟悉如何在 X11 上启动和运行 OpenGL 应用程序,那么编写在 X11 上运行的合成器可能是最简单的入门方法。如果您想直接在 Linux 内核上运行您的合成器,您可能需要查看 evdev 和 libinput 的输入和 DRM/KMS 以及GBM 上的 EGL,以便创建 OpenGL 上下文并显示结果你的显示器。还有一些渲染库(例如 evas)可以直接在 Linux 内核之上运行,但我不知道它们能让你注入自己的 OpenGL 代码到什么程度。
一旦你决定了你想在哪里运行你的合成器,你可以从编写一个普通的 OpenGL 应用程序开始,然后继续集成一个 Wayland 服务器,以便显示实际的客户端窗口并与之交互。