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

时间:2015-10-26 13:22:40

标签: window-managers wayland

所以我想为wayland创建一个compositor,它支持windows的3D效果(类似于compiz,但是在wayland上)。我已经看到了这个问题:Where do I start if I want to write a wayland compositor?但唯一的答案指向SWC(https://github.com/michaelforney/swc),这在我的情况下不适用,因为我想使用OpenGL,因为SWC不容易支持3D。那么有一些项目/图书馆/书籍/教程/等我可以在那里学习在道路上编写自己的WM的必要事项吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

一旦确定了要运行合成器的位置,就可以先编写一个常规的OpenGL应用程序,然后继续集成一个Wayland服务器,以显示实际的客户端窗口并与之交互。