簡體   English   中英

獲取 Vulkan 的 XVisualInfo

[英]Get XVisualInfo for Vulkan

對於帶有 Xlib 的 OpenGL,為了創建一個窗口,我們可以從 GLX 獲取適當的XVisualInfo並將其傳遞給XCreateWindow 但是,如果我想將 Vulkan 與 Xlib 一起使用,我該如何獲得正確的XVisualInfo 我還需要與 GLX 鏈接嗎?

Vulkan 在這方面的做法有所不同。 首先,由於使用 OpenGL 的經驗以及它與窗口系統交互的方式,選擇了一種非常不同的方法。

傳統上,使用 OpenGL,您可以根據某個可繪制對象的屬性創建渲染上下文。 在 Microsoft 中,這與 windows 耦合得更緊密,因為視覺格式的選擇是根據用於渲染上下文創建的設備上下文的可繪制(又名窗口)的像素格式進行的。 在 GLX 中,與可繪制對象沒有緊密聯系,但您仍然必須為要繪制的可繪制對象的視覺和幀緩沖區配置創建上下文匹配。

Vulkan 不是這樣工作的!

首先,在 Vulkan 中不再有上下文。 你得到的是實例 並且對於每個實例,您都創建了物理和邏輯設備的句柄,然后您又為它們創建了要繪制的圖像 所有這些都與窗口系統完全分離。 事實上,使用 Vulkan 進行無頭渲染是微不足道的。

如果使用 OpenGL 進行無頭渲染需要額外的努力,而使用 Vulkan 則相反:渲染到窗口需要額外的努力。

關鍵是所謂的“交換鏈”。 交換鏈是當今驅動程序和 GPU 架構用來管理圖像到顯示器的傳遞(雙緩沖的緩沖區交換和您使用 OpenGL 調用的“SwapBuffers”就是這個名字)。 要創建交換鏈,您首先要在交換鏈的接收端為所需的可繪制對象獲取 Vulkan 表面。 這些函數是 Vulkan 的窗口系統相關擴展的一部分; 它們是擴展,因此它們不會將 Vulkan 核心與窗口系統集成 (WSI) 相關的東西混淆。 對於 X11,您可以使用vkCreateXcbSurfaceKHRvkCreateXlibSurfaceKHR

創建表面后,您可以遍歷其隊列以查看它使用vkGetPhysicalDeviceSurfaceSupportKHR支持哪些操作,然后使用vkGetPhysicalDeviceSurfaceFormatsKHR可以使用哪些圖像格式。 這一步是最接近查詢Visual s 和FBConfig與創建 GLX 上下文相關的匹配,以回答您的問題。

一旦你決定了一種格式,你就創建了一個交換鏈,為此你必須再次做圓頂內務,即檢查表面帶來的功能(這里的功能是指它可以沿鏈傳輸數據的方法)。 其函數是vkGetPhysicalDeviceSurfaceCapabilitiesKHRvkGetPhysicalDeviceSurfacePresentModesKHR

有了到目前為止您獲得的所有信息,您現在決定交換鏈的格式和配置,並使用vkCreateSwapchainKHR創建它。 完成后,您可以使用vkGetSwapchainImagesKHR獲取交換鏈的圖像。

現在您有了交換鏈的圖像,您可以照常在它們上創建視圖並將它們用作要渲染的附件。 恭喜你剃掉了那只 Vulkanic 氂牛*Phew*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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