使用 Wayland 编程时,在 C 语言中,如何获得 xcb 和 Xlib 提供的功能?

使用 Wayland 编程时,在 C 语言中,如何获得 xcb 和 Xlib 提供的功能?

我理解 Wayland 是一个合成器,它以某种方式与事件相关,因此上一级软件可以向 Wayland 注册以接收事件等等。但 Wayland 不提供窗口,只提供用于渲染窗口和其他图形的表面。

我花了很多时间自学 C 语言编程,并使用 xcb 和 Xlib 的混合创建非常基本的图形,它们很容易混合:#include <Xlib-xcb.h>。我想继续在该级别编程,使用 xcb 事件、xcb 图形基元、像素图、XImages 或 xcb_image_t 以及 MIT-Shm 扩展来创建共享内存像素图和共享内存 ximages。

Wayland 的 mmap 表面很有吸引力,因为它们比依赖于 SysV 共享内存的 MIT-Shm 具有更好的灵活性。

是否有提供 xcb 级别功能的软件层?我可以依赖 xcb 和 Xlib 的支持,以便 X11 程序可以作为 Wayland 客户端运行吗?

我对使用 GTK+ 或 Qt 来替代 xcb 类功能不感兴趣。它们用于复杂的 GUI 编程,而这不是我想要的 - 我想要低级编程。

我看到了示例中使用的 Wayland-egl.h。egl 是否提供与我在 xcb 中找到的功能类似的功能?我在哪里可以找到简单但全面的教程?有没有和 Xlib 的文档一样好的?Xcb 的文档很糟糕,但有了 Xlib 手册和教程,我学会了拼凑一些有用的代码。

作为一名业余程序员,我在网上找到的信息非常晦涩难懂,但最终还是要熟悉各种术语和相关库。实际上,编写 xcb 并不复杂,只是冗长且不熟悉。

可用的信息对我来说太难筛选了,似乎缺少很多重要的细节,或者用我看不懂的晦涩难懂的语言写成的。有人能给那些刚入门但还算不错的程序员一些建议吗?

答案1

这很尴尬:我应该多次查看 X.Org 的 Wayland 常见问题解答。我在第一次查找的地方就找到了问题的答案……[wayland.freedesktop.org/faq][1]

...有些客户端依赖 X11,并且将一直如此。为此,XWayland 为 Wayland 合成器提供了一个插件,运行真正的 X 服务器。这为旧客户端提供了一个真实且兼容的 X11 平台,可在您的 Wayland 会话中与本机 Wayland 客户端并排显示

我对我的问题的措辞表示抱歉,“Xlib 和 XCB 还会存在很长时间吗?”“还会存在很长时间”这个短语是在询问意见,我的意思是事实知识。

此处引用的引文中提到“永远会有”客户端依赖 X11,我将其解释为“在很长一段时间内”。我知道这有点含糊。也许作为一名程序员,我对自然语言的准确性要求太高了。

另一个不太确切的好消息是,“在 Wayland 上运行 X 的开销”几乎没有或根本没有开销损失,这与是否值得编写使用 X11 的代码有关。

这一切都让我决定:我会继续下去#include <Xlib-xcb.h>,不会担心这件事。

相关内容