重置命令缓冲区
译者注:示例代码点击此处
如过先前已记录命令缓冲区,或者在记录操作期间出现错误,则必须先重置命令缓冲区,才能再次重新记录。可以通过开始另一个记录操作来隐式执行此操作。但是我们也可以明确地做到这一点。
怎么做...
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;