繁体   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