重置围栏
译者注:示例代码点击此处
信号量会自动重置。但是当围栏变成信号时,应用程序有责任将围栏重置为无信号状态。
怎么做...
1.将创建的逻辑设备句柄储存在名为logical_device的VkDevice类型变量中。
2.创建名为fences的向量变量。它应包含VkFence类型的元素。在变量中存储应重置的所有围栏的句柄。
3.调用vkResetFences( logical_device, static_cast<uint32_t>(fences.size()), &fences[0] )。并提供logical_device变量、fences向量中的元素数量以及指向第一个元素的指针。
4.通过检查调用的返回值是否等于VK_SUCCESS确保成功。
这个怎么运作...
当想知道提交的命令合适完成时,我们使用围栏。但我们无法提供已经发出信号的围栏,必须首先重置它,这意味着我们将其状态从信号更改为无信号。围栏由应用程序显示重置,而不像信号量那样自动重置。重置围栏是这样完成的:
if( fences.size() > 0 ) {
VkResult result = vkResetFences( logical_device, static_cast<uint32_t>(fences.size()), &fences[0] );
if( VK_SUCCESS != result ) {
std::cout << "Error occurred when tried to reset fences." << std::endl;
return false;
}
return VK_SUCCESS == result;
}
return false;