Vulkan Cookbook 第二章 9 選擇交換鏈影象的所需使用場景
選擇交換鏈影象的所需使用場景
使用交換鏈建立的影象通常用作顏色附件。 這意味著我們想要渲染它們(將它們用作渲染目標)。 但我們並不僅限於這種情況。 我們可以將交換鏈影象用於其他目的 - 可以從中進行取樣,將它們用作複製操作中的資料來源,或將資料複製到其中。 這些都是不同的影象用法,可以在交換鏈建立過程中指定它們。 但是,我們需要再次檢查這些用法是否得到支援。
怎麼做...
1.獲取演示表面的功能(請參閱獲得呈現表面的功能)。將它們儲存在名為surface_capabilities的VkSurfaceCapabilitiesKHR型別變數中。 2.選擇所需的影象用法並將其儲存在名為desired_usages的VkImageUsageFlags位欄位型別的變數中。 3.建立名為image_usage的VkImageUsageFlags型別的變數,其中將儲存給定平臺上支援的請求用法列表,為image_usage,值為0. 4.迭代desired_usages位欄位變數的所有位。對於變數中的每個位: ·檢查該為是否已設定(等於1) ·檢查是否設定了surface_capabilities變數的supportedUsageFlags成員的對應位。 · 如果前面的檢查為true,請將image_usage變數中設定相同的位。 5.通過檢查desired_usages和image_usage變數的值是否相等,確保在給定平臺上支援所有請求的用法。
這個怎麼運作...
可以為交換鏈影象選擇的用法列表再呈現表面功能呢的supportedUsageFlags成員中。該成員是位欄位,其中每個位對應於特定的用法。如果設定了給定位,則表示支援給定的用法。
提示:必須始終支援顏色附件用法(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)。
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT使用是必需的,所有Vulkan實現都必須支援它,其他用法是可選的。這就是為什麼我們不應該依賴他們的可用性,此外不應該要求不需要的用法,因為這可能會影響應用程式的效能。
選擇所需的用法可能如下所示:
image_usage = desired_usages & surface_capabilities.supportedUsageFlags; return desired_usages == image_usage;
用所需用法與上支援的用法。然後,檢查是否支援所有請求的用法,通過比較請求值和“最終”用法的值來做到這一點。如果他們的值不同,我們知道並非所有所需的用法都收到支援。