Vulkan释放命令缓冲区

Vulkan释放命令缓冲区
如果不再需要使用某些命令缓冲区,而且这些命令缓冲区也没有正在等待被设备执行,就可以释放它们。

具体处理过程

(1)获取逻辑设备的句柄,将该句柄赋予一个VkDevice类型的变量,将该变量命名为logical_device。
(2)获取通过该逻辑设备创建的命令池的句柄,将该句柄存储到一个VkCommandPool类型的变量中,将该变量命名为command_pool。
(3)创建一个元素类型为VkCommandBuffer的vector容器变量,将该变量命名为command_buffers。调整该vector容器的尺寸,使之能够容纳所有需要释放的命令缓冲区,并将需要释放的所有命令缓冲区的句柄赋予该vector容器中的各个元素。
(4)调用vkFreeCommandBuffers(logical_device,command_pool,static_cast<uint32_t>(command_buffers.size()),&command_buffers[0])函数。将第一个参数设置为逻辑设备的句柄;将第二个参数设置为命令池的句柄;将第三个参数设置为vector容器command_buffers变量中含有元素的数量(需要释放的命令缓冲区的数量);将第四个参数设置为指向vector容器command_buffers变量中第一个元素的指针。
(5)为安全起见,清空vector容器command_buffers变量。

具体运行情况

可以批量释放命令缓冲区,但使用单个调用vkFreeCommandBuffers()函数的语句时,只能从同一个命令池释放命令缓冲区。我们可以一次释放任意数量的命令缓冲区。

Vulkan释放命令缓冲区

在释放命令缓冲区前,必须确保它们没有被逻辑设备引用,而且提交它们的所有操作都已经完成。

通过命令池分配的命令缓冲区,在我们销毁该命令池时会随之自动释放。因此当销毁命令池时,不需要专门释放通过该命令池分配的命令缓冲区。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

Vulkan实战