Vulkan Cookbook 第三章 5 重置命令缓冲区

重置命令缓冲区

译者注:示例代码点击此处

如过先前已记录命令缓冲区,或者在记录操作期间出现错误,则必须先重置命令缓冲区,才能再次重新记录。可以通过开始另一个记录操作来隐式执行此操作。但是我们也可以明确地做到这一点。

怎么做...

1.获取从实用VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT标志创建的池分配的命令缓冲区句柄。将句柄储存在名为command_buffer的VkCommandBuffer类型变量中。
2.创建名为release_resources的VkCommandBufferResetFlags类型变量。如果要释放缓冲区分配的内存并将其返回给池,则储存值VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT。否则变量设置为0值。
3.调用vkResetCommandBuffer( command_buffer, release_resources ) 。第一个参数提供命令缓冲区,第二个参数提供release_resources变量。
4.通过检查返回值是否等于VK_SUCCESS,确保调用成功。

这个怎么运作...

可以通过重置重置整个池或单独重置命令缓冲区。仅当使用VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT标志创建分配了命令缓冲区的池时,才能执行单独的重置。当我们开始记录命令缓冲区时,或者通过调用

vkResetCommandBuffer()函数显示地重置命令缓冲区。显示重置使我们可以控制命令缓冲区从其池中分配的内存。在显示重置期间,我们可以决定是否要将内存返回到池,或者命令缓冲区是否应保留它并在下一次命令记录期间重用它。

单个命令缓冲区显示重置如下:

VkResult result = vkResetCommandBuffer( command_buffer, release_resources ? VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT : 0 );
if( VK_SUCCESS != result ) {
  std::cout << "Error occurred during command buffer reset." << std::endl;
  return false;
}
return true;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值