Vulkan Cookbook 第三章 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();
}

提示:在我们释放命令缓冲区之前,必须确保逻辑设备没有引用它们,并且已经完成了提供命令缓冲区的所有提交。

当我们销毁命令池时,将隐式释放总给定池分配的命令缓冲区。因此,当我们想要销毁一个池时,不需要单独释放从它分配的所有命令缓冲区。

猜你喜欢

转载自blog.csdn.net/qq_19473837/article/details/84332704