如果我想编写 3D wayland 合成器(使用 OpenGL),我应该从哪里开始?

Where do I start if I want to write a 3D wayland compositor(using OpenGL)?

所以我想为 wayland 创建一个合成器,它支持 windows 的 3D 效果(类似于 compiz,但在 wayland 上)。我已经看到这个问题:Where do I start if I want to write a wayland compositor? but the only answer points to SWC(https://github.com/michaelforney/swc),这不适用于我的情况,因为我想使用 OpenGL 并且因为 SWC 不支持 3D。那么,是否有一些 project/library/book/tutorial/etc 可以让我学习在 Wayland 上编写自己的 WM 的必要知识?提前致谢。

Wayland 协议的唯一目的是客户端和服务器之间的通信。服务器为客户端提供输入事件,客户端为服务器提供缓冲区(可以映射到 OpenGL 纹理)。 server/compositor 从何处获取其输入事件以及它对缓冲区执行的操作完全取决于合成器。

所以合成器本身需要一个输入事件源和一种绘制结果的方法。这就是为什么许多 Wayland 合成器有多个后端:它们可以 运行 在 X11 之上,直接在 Linux 内核之上,甚至在另一个 Wayland 服务器之上。

您问题的答案实际上取决于您想 运行 排字器的位置。如果您已经熟悉如何启动和 运行 那里的 OpenGL 应用程序,那么在 X11 之上编写 运行s 的合成器可能是最简单的入门方法。如果您想 运行 您的合成器直接位于 Linux 内核之上,您可能需要查看 evdev 和 libinput 的输入以及 DRM/KMS 和 EGL on top of GBM 的顺序创建 OpenGL 上下文并在显示器上显示结果。还有一些渲染库(例如 evas)可以 运行 直接在 Linux 内核之上,但我不知道它们能让你注入自己的 OpenGL 代码到什么程度。

一旦你决定了你想要运行你的合成器的位置,你就可以从编写一个常规的OpenGL应用程序开始,然后继续并集成一个Wayland服务器,以便显示和与实际客户端交互windows.