1. 程式人生 > >Vulkan Cookbook 第二章 4 建立啟用了WSI擴充套件的邏輯裝置

Vulkan Cookbook 第二章 4 建立啟用了WSI擴充套件的邏輯裝置

建立啟用了WSI擴充套件的邏輯裝置

當我們建立一個啟用了WSI擴充套件的例項並找到支援影象顯示的佇列族時,是時候建立一個邏輯裝置了。 裝置級WSI擴充套件允許我們建立交換鏈。 這是由演示引擎管理的影象集合。 為了使用這些影象中的任何一個並將其渲染到它們中,我們需要獲取它們。 完成後,再將其返回到演示引擎(譯者注:顯示出來)。 此操作稱為演示,它通知驅動程式我們要向用戶顯示影象。 演示引擎根據交換鏈建立期間定義的引數顯示它。 我們只能在具有已啟用swapchain擴充套件的邏輯裝置上建立它。

怎麼做...

1.獲取物理裝置的控制代碼,其中有一個支援影象顯示的佇列族,並將其儲存在名為physical_device

VkPhysicalDevice型別的變數中。 2.為每個組的每個佇列非配優先順序(浮點值介於0.0f和1.0f之間)。將這些引數儲存在名為queue_infosstd::vector變臉中,其中包含自定義型別QueueInfo的元素(請參閱第一章,建立邏輯裝置)。請記住,要包含支援影象顯示的族中的至少一個佇列。 3.準備一個應該啟用的擴充套件列表。將它儲存在名為desired_extensionsstd ::vector <char const *>型別的變數中。 4.將一個元素新增到desired_extensions變數,值是VK_KHR_SWAPCHAIN_EXTENSION_NAME
。 5.使用physical_devicequeue_infos變數中準備的引數建立邏輯裝置,並從desired_extensions向量啟用所有擴充套件(請參閱第1章,建立邏輯裝置)。

這個怎麼運作...

當想在螢幕上顯示影象時,只需要一個裝置級擴充套件在邏輯裝置建立期間啟用。這成為VK_KHR_swapchain,它准許我們建立交換鏈。 交換鏈定義的引數與OpenGL API中的預設繪製緩衝區的引數非常相似。除其他外,它制定了我們想要渲染的影象格式,影象的數量(可以被認為是雙緩衝區或三緩衝區),或者表示模式(啟用或禁用v-sync)。沿交換鏈建立的映像由演示引擎擁有和管理。我們不准許自己建立或銷燬他們。當想要在螢幕上顯示影象時,需要請求其中一個交換鏈影象(獲取它),渲染到其中,然後將影象返回給演示引擎(顯示它)。

提示:在VK_KHR_swapchain擴充套件中定義了指定一組可呈現影象,獲取這些影象並擁有在螢幕上顯示這些影象的能力。

所描述的功能在VK_KHR_swapchain擴充套件中定義。要在邏輯裝置建立過程中啟用它,我們需要準備以下程式碼:

desired_extensions.emplace_back( VK_KHR_SWAPCHAIN_EXTENSION_NAME );

return CreateLogicalDevice( physical_device, queue_infos, desired_extensions, desired_features, logical_device );

邏輯裝置建立程式碼來自第一章建立邏輯裝置。這裡我們只需要記住,我們必須檢查給定的物理裝置是否支援VK_KHR_swapchain擴充套件,然後我們需要將其包括在應該啟用的擴充套件列表中。

副檔名VK_KHR_SWAPCHAIN_EXTENSION_NAME前處理器定義。他在vulkan.h檔案中定義,它幫助我們避免拼寫錯誤。