1. 程式人生 > >Vulkan Cookbook 第三章 17 摧毀訊號量

Vulkan Cookbook 第三章 17 摧毀訊號量

摧毀訊號量

譯者注:示例程式碼點選此處

訊號量可以多次重複使用,因此通常我們不需要在應用程式執行時刪除它們。但是當不再需要訊號量時,如果我們確定裝置沒有使用它(沒有待處理的等待,也沒有待處理的訊號操作),我們就可以銷燬它。

怎麼做...

1.獲取邏輯裝置的控制代碼。將此控制代碼儲存在名為logical_device的VkDevice型別變數中。
2.使用應該銷燬的訊號量控制代碼初始化名為semaphore的VkSemaphore型別變數。
3.進行一下呼叫vkDestroySemaphore( logical_device, semaphore, nullptr ),為其提供邏輯裝置控制代碼,訊號量的控制代碼和nullptr值。
4.處於安全原因,請為訊號量變數分配VK_NULL_HANDLE值。

這個怎麼運作...

刪除訊號量非常簡單:

if( VK_NULL_HANDLE != semaphore ) { 
  vkDestroySemaphore( logical_device, semaphore, nullptr ); 
  semaphore = VK_NULL_HANDLE; 
}

提示:在我們銷燬訊號量之前,必須確保任何已執行的佇列提交都不在引用它。

如果執行銷燬操作的訊號量在要發訊號的訊號量列表中或者在給定提交應該等待的訊號量列表中,則必須確保已提交的命令已經完成。為此我們需要應用程式等待正在等待佇列完成的圍欄,或等待所有操作提交給給定佇列或呼叫等待整個裝置完成的其中一個函式。(參見

等待圍欄等待直到提交到佇列的所有命令都完成以及等待所有提交的命令完成的內容)。