如何正确清理 Vulkan 对象?
How to properly clean Vulkan objects?
VkObjects 是否需要清空,或者是否以某种方式自动解决?
- 例如,当我有缓冲区 class 时,它是
的包装器
VkBuffer _buffer;
和这样的析构函数:
Buffer::~Buffer()
{
vkDestroyBuffer(_device.getLogicalDevice(), _buffer, nullptr);
if(_memory) {
vkFreeMemory(_device.getLogicalDevice(), _memory, nullptr);
}
}
调用析构函数后,是否需要设置_buffer为VK_NULL_HANDLE或nullptr 或者没有必要,这是自动完成的?
(基本上我的问题是,如果规范在调用 vkDestroyXYZ / vkFreeXYZ 后处于哪个状态,则对象实例)
如果是,它适用于所有 VkObject(如 VkInstance
、VkImage
等)还是有一些例外?
我认为如果我让对象保持原样(尤其是当它立即被销毁时)我会很好,但是我们在代码审查期间进行了讨论,可以说,我的审查者已经设置了 -pedantic和 -Wall 为了我们的代码库,我必须承认 :)
当您(正确地)销毁了一个 Vulkan 对象时,它就会被销毁。这就是它的结束。这与通过指针销毁 C++ 中的对象没有什么不同:指向的对象 gone.
您如何处理指针值本身取决于您(除了将其值作为输入传递给 Vulkan API,您当然不能这样做)。
VkObjects 是否需要清空,或者是否以某种方式自动解决?
- 例如,当我有缓冲区 class 时,它是 的包装器
VkBuffer _buffer;
和这样的析构函数:
Buffer::~Buffer()
{
vkDestroyBuffer(_device.getLogicalDevice(), _buffer, nullptr);
if(_memory) {
vkFreeMemory(_device.getLogicalDevice(), _memory, nullptr);
}
}
调用析构函数后,是否需要设置_buffer为VK_NULL_HANDLE或nullptr 或者没有必要,这是自动完成的?
(基本上我的问题是,如果规范在调用 vkDestroyXYZ / vkFreeXYZ 后处于哪个状态,则对象实例)
如果是,它适用于所有 VkObject(如 VkInstance
、VkImage
等)还是有一些例外?
我认为如果我让对象保持原样(尤其是当它立即被销毁时)我会很好,但是我们在代码审查期间进行了讨论,可以说,我的审查者已经设置了 -pedantic和 -Wall 为了我们的代码库,我必须承认 :)
当您(正确地)销毁了一个 Vulkan 对象时,它就会被销毁。这就是它的结束。这与通过指针销毁 C++ 中的对象没有什么不同:指向的对象 gone.
您如何处理指针值本身取决于您(除了将其值作为输入传递给 Vulkan API,您当然不能这样做)。