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

问题描述 投票:0回答:2

所以我想为 Wayland 创建一个支持 Windows 3D 效果的合成器(类似于 compiz,但在 Wayland 上)。我已经看到这个问题:如果我想写一个 Wayland 合成器,我该从哪里开始?但唯一的答案指向 SWC(https://github.com/michaelforney/swc),这不适用于我的我想使用 OpenGL,而且 SWC 不太支持 3D。那么是否有一些项目/库/书籍/教程/等我可以学习在 Wayland 上编写自己的 WM 所需的东西?预先感谢。

window-managers wayland
2个回答
4
投票

wayland 协议的唯一目的是客户端和服务器之间的通信。服务器向客户端提供输入事件,客户端向服务器提供缓冲区(可以映射到 OpenGL 纹理)。服务器/合成器从哪里获取输入事件以及它如何处理缓冲区完全取决于合成器。

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

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

一旦您决定要在哪里运行合成器,您就可以从编写常规 OpenGL 应用程序开始,然后继续集成 Wayland 服务器,以便显示实际的客户端窗口并与实际的客户端窗口交互。


0
投票

考虑使用 Louvre,一个用于构建 Wayland 合成器的高性能 C++ 库。它提供了用于 2D 渲染的 LPainter、LView 和 LScene 类,但您可以使用自己的着色器(它使用 OpenGL ES 2.0)。此外,您可以直接访问表面纹理的 ID 和目标。

每个显示器(LOutput)都有其专用的渲染线程进行操作,只需重写paintGL()虚拟方法即可进行渲染。

https://github.com/CuarzoSoftware/Louvre

© www.soinside.com 2019 - 2024. All rights reserved.