在Vulkan文档中,我们有以下关于WSI平台的内容:
Vulkan API不定义任何类型的平台对象。定义了特定于平台的WSI扩展,其中包含使用WSI的特定于平台的功能.这些扩展的使用由预处理符号来保护。 ·VK_USE_PLATFORM_ANDROID_KHR - Android ·VK_USE_PLATFORM_MIR_KHR -和平号 ·VK_USE_PLATFORM_WAYLAND_KHR - Wayland ·VK_USE_PLATFORM_WIN32_KHR - Microsoft ·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的通用代码,而不会造成混乱。
发布于 2016-05-09 12:19:58
如果您是与窗口系统的接口,那么您已经知道您需要什么样的预处理器符号。
如果您不是作为应用程序代码(使用本机窗口周围的包装器),那么您将要求包装器提供vkSurface,如果这是不可用的,那么向包装器的维护人员提出一个问题。
如果您是一个vulkan库,那么您应该能够处理所有linux窗口选项。如果启用所有预处理符号并根据需要手动加载所需函数,则取决于应用程序调用的函数。
https://stackoverflow.com/questions/37096579
复制相似问题