使用不带 X11 的 Vulkan 创建功能性 Linux GUI

Create Functional Linux GUI Using Vulkan Without X11

我想创建我自己的用户界面,该界面 运行 在基本 Linux 发行版上。 GUI 将使用 Vulkan 呈现,我希望在没有 X11 的情况下获得用户输入。 GUI 将在 OS 加载后立即呈现并成为主要上下文。

问题:

你不能,因为那不是 Vulkan 的工作方式。

在 Linux 上,Vulkan 是 OpenGL 的替代品,而不是 X11 的替代品。 (同样,在 Windows 上它替代了 DirectX 或 OpenGL,而不是 Desktop Window Manager。)

What are the implications in doing this?

Vulkan 在设计上是无头的。至少你可以在其中渲染一些东西,然后将它复制到原始字节(即使用 vkMapMemory)。在 VK_KHR_external_* 扩展的帮助下,你甚至可以更有效地做类似的事情(以 0 拷贝的方式)。

不过 Vulkan 只是一个渲染图 API。它不是 windowing 系统。它不是 X11(或 Wayland、Mir 或其他)的竞争对手。做那样的事情意味着使用像 Wayland 这样的替代方案(如果你的牛肉专门用于 X11)或实现你自己的。

How would I obtain user input?

也不在 Vulkan 的范围内。同样,可能意味着重新实现类似 X11 的东西。

How could I configure my GUI application to correctly load?

如果您指的是现有应用程序,则必须修改现有基础架构,以便在无处不在的 X11 旁边也接受和使用新的 window 管理器。

如果您指的是新应用程序,那么它特定于您打算创建的 window 管理器 API,不是吗?

Is Vulkan not ideal for this type of scenario?

对于这种情况,它可能很好(可能比 OpenGL 曾经更好)。但这也可能是这个想法最简单的方面。困难的部分是 Vulkan 做的所有事情以及重新实现该轮子所需的年数。