В документах 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 Window, использующая библиотеку XCB.
• VK_USE_PLATFORM_XLIB_KHR — система X Window, использующая библиотеку 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, если честно.
Я хотел бы знать, существует ли символ препроцессора C/C++, который может помочь узнать, какая оконная система используется в этой среде, чтобы можно было написать общий код, способный работать с каждым API, тогда без шуток.