Vulkan Cookbook 第三章 18 釋放命令緩衝區
阿新 • • 發佈:2018-12-18
釋放命令緩衝區
譯者注:示例程式碼點選此處
當不再需要命令緩衝區以及它們未等待在裝置上執行時,可以釋放它們。
怎麼做...
1.獲取邏輯裝置的控制代碼並使用它來初始化名為logical_device的VkDevice型別變數。
2.獲取從邏輯裝置建立的命令池的控制代碼。將此控制代碼儲存在名為command_pool的VkCommandPool型別變數中。
3.建立名為command_buffers的VkCommandBuffer元素型別的向量變數。調整銷量大小,以便能夠儲存應該釋放的所有命令緩衝區。使用應釋放的所有命令緩衝區的控制代碼初始化向量元素。
4.呼叫vkFreeCommandBuffers( logical_device, command_pool, static_cast<uint32_t>(command_buffers.size()), &command_buffers[0] )。提供邏輯裝置和命令池控制代碼、command_buffers向量中的元素數量(要釋放的命令緩衝區的數量),和指向command_buffers向量的第一個元素的指標。
5.出於安全原因,請清除command_buffers向量。
這個怎麼運作...
命令緩衝區可以在組中釋放,但在單個vkFreeCommandBuffers()函式呼叫期間我們只能從同一命令池釋放命令緩衝區。可以一次釋放任意數量的命令緩衝區:
if( command_buffers.size() > 0 ) {
vkFreeCommandBuffers( logical_device, command_pool, static_cast<uint32_t>(command_buffers.size()), command_buffers.data() );
command_buffers.clear();
}
提示:在我們釋放命令緩衝區之前,必須確保邏輯裝置沒有引用它們,並且已經完成了提供命令緩衝區的所有提交。
當我們銷燬命令池時,將隱式釋放總給定池分配的命令緩衝區。因此,當我們想要銷燬一個池時,不需要單獨釋放從它分配的所有命令緩衝區。