[英]Preprocessor symbol for Wayland, Xlib, XCB, MIR window systems
在Vulkan docs上,我們具有有關WSI平台的以下內容:
Vulkan API沒有定義任何類型的平台對象。 定義了特定於平台的WSI擴展,其中包含使用WSI的特定於平台的功能。 這些擴展名的使用受到預處理器符號的保護。
•VK_USE_PLATFORM_ANDROID_KHR-安卓
•VK_USE_PLATFORM_MIR_KHR-Mir
•VK_USE_PLATFORM_WAYLAND_KHR-韋蘭
•VK_USE_PLATFORM_WIN32_KHR-Microsoft Windows
•VK_USE_PLATFORM_XCB_KHR-使用XCB庫的X Window系統
•VK_USE_PLATFORM_XLIB_KHR-使用Xlib庫的X Window系統
我了解我應該選擇一個平台或Window System,然后在編譯之前定義正確的符號。 在針對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 ++ 預處理器符號 ,它可以幫助您了解該環境使用的是哪個Window System,因此可以編寫能夠處理每個API的通用代碼,而不會造成混亂。
Xlib和XCB是兩個庫,它們可以互換使用,以與Linux上的X11窗口服務器接口。 如果您需要您的應用程序與較早的Linux系統兼容,請為Xlib編譯; 否則,請使用XCB。
Wayland和Mir仍處於試驗階段(截至2016年5月),可以放心忽略。
如果您是與窗口系統接口的人,那么您已經知道所需的預處理器符號。
如果您不是當時的應用程序代碼(在本機窗口周圍使用包裝器),那么您將要求包裝器提供vkSurface,如果不可用,則引發包裝器維護者的問題。
如果您是vulkan庫,那么您應該能夠處理所有linux窗口選項。 如果啟用所有預處理器符號並根據應用程序調用的功能,根據需要手動加載所需的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.