簡體   English   中英

Wayland,Xlib,XCB,MIR窗口系統的預處理器符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM