在 Vulkan 文档中,我们有以下关于 WSI 平台的内容:
Vulkan API 没有定义任何类型的平台对象。定义了特定于平台的 WSI 扩展,其中包含使用 WSI 的特定于平台的功能。这些扩展的使用受到预处理器符号的保护。
• VK_USE_PLATFORM_ANDROID_KHR - Android
• VK_USE_PLATFORM_MIR_KHR - 米尔
• VK_USE_PLATFORM_WAYLAND_KHR - 韦兰
• VK_USE_PLATFORM_WIN32_KHR - Microsoft Windows
• VK_USE_PLATFORM_XCB_KHR - X 窗口系统,使用 XCB 库
• VK_USE_PLATFORM_XLIB_KHR - X 窗口系统,使用 Xlib 库
我知道我应该选择一个平台或一个窗口系统,然后在编译之前定义正确的符号。在针对 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 都有自己独特的窗口系统,这已经足够好了。但是 Linux 有几个窗口系统——Xlib、XCB、Wayland 和 MIR,afaik。
我想知道是否有一个 C/C++预处理器符号可能有助于了解该环境使用哪个窗口系统,因此可以编写能够处理每个 API 的通用代码,而不会弄乱。