Wayland、Xlib、XCB、MIR window 系统的预处理器符号

Preprocessor symbol for Wayland, Xlib, XCB, MIR window systems

在 Vulkan 文档中,我们有以下关于 WSI 平台的内容:

The Vulkan API does not define any type of platform object. Platform-specific WSI extensions are defined, which contain platform-specific functions for using WSI. Use of these extensions is guarded by preprocessor symbols.

• VK_USE_PLATFORM_ANDROID_KHR - Android

• VK_USE_PLATFORM_MIR_KHR - Mir

• VK_USE_PLATFORM_WAYLAND_KHR - Wayland

• VK_USE_PLATFORM_WIN32_KHR - Microsoft Windows

• VK_USE_PLATFORM_XCB_KHR - X Window System, using the XCB library

• VK_USE_PLATFORM_XLIB_KHR - X Window System, using the Xlib library

我知道我应该选择一个平台或 Window 系统,然后在编译之前定义正确的符号。针对 Android 或 Windows 进行编译时,我可以编写如下内容:

#if defined(ANDROID) || defined (__ANDROID__)
  #define VK_USE_PLATFORM_ANDROID_KHR 1
#elif defined(_WIN32)
  #define VK_USE_PLATFORM_WIN32_KHR 1
#endif

到目前为止,好的。 Android和Windows有自己独特的window系统,已经足够好了。但是 Linux 有几个 windowing 系统 - Xlib、XCB、Wayland 和 MIR、afaik。

我想知道是否有 C/C++ 预处理器符号 这可能有助于了解使用的是哪个 Window 系统在那个环境下,所以可以编写能够处理每个 API 的通用代码,而不会弄乱。

Xlib 和 XCB 是两个可以互换使用的库,用于与 Linux 上的 X11 窗口服务器交互。如果您需要您的应用程序与旧的 Linux 系统兼容,请为 Xlib 构建;否则,使用 XCB。

Wayland 和 Mir 都仍处于高度实验阶段(截至 2016 年 5 月),可以安全地忽略。

如果您是与窗口系统交互的人,那么您已经知道需要什么预处理器符号。

如果您不是应用程序代码(在本机窗口周围使用包装器),那么您将向包装器询问 vkSurface,如果不可用,则向包装器的维护者提出问题。

如果您是 vulkan 库,那么您应该能够处理所有 linux 窗口选项。如果启用所有预处理器符号并根据应用程序调用的函数根据需要手动加载所需函数。