簡體   English   中英

如何正確清潔 Vulkan 對象?

[英]How to properly clean Vulkan objects?

VkObjects 需要清零,還是以某種方式自動解決?

  • 例如,當我有 Buffer 類時
VkBuffer _buffer;

和這樣的析構函數:

Buffer::~Buffer()
{
  vkDestroyBuffer(_device.getLogicalDevice(), _buffer, nullptr);
  if(_memory) {
    vkFreeMemory(_device.getLogicalDevice(), _memory, nullptr);
  }
}

在調用析構函數后,我是否需要將 _buffer 設置為VK_NULL_HANDLEnullptr或者它不是必需的,這是以自動方式完成的?

(基本上我的問題是,在調用 vkDestroyXYZ / vkFreeXYZ 后,規范是否處於哪個狀態離開對象實例)

如果是,它適用於所有 VkObjects(如VkInstanceVkImage等)還是有一些例外?

我認為如果我將對象保持原樣(尤其是當它被立即銷毀時),我認為我很好,但是我們在代碼審查期間進行了這個討論,可以說,我的審查者已經設置了 -pedantic 和 -Wall為了我們的代碼庫,我必須承認:)

當您(正確)銷毀了一個 Vulkan 對象時,它就會被銷毀。 就這樣結束了。 這與在 C++ 中通過指針銷毀對象沒有什么不同:被指向的對象消失了

您如何處理指針值本身取決於您(除了將其值作為輸入傳遞給 Vulkan API 之外,您當然不能這樣做)。

暫無
暫無

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

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