绘制函数
该方法会执行下面的操作:
1.从交换链获取图像;
2.用该图像作为帧缓冲中的附件来执行命令缓冲;
3.将图像返回给交换链以便呈现。
这些事件每一个都是使用单个方法调用来启动的,但是它们都是异步的。方法调用会在实际操作结束之前返回,且执行顺序也是不一定的。这就很不幸了,因为每个操作都依赖于之前的操作完成才行。
有两种方式来同步交换链事件:栅栏和信号量。它们俩对象都能用于协调操作,方式就是设置一个操作信号,另一个操作等到一个栅栏或者信号量,然后从一个未标记的状态变成标记的状态。
不同之处是栅栏状态可以从你的程序中通过类似vkWaitForFences的调用来访问,而信号量却不行。栅栏主要是设计用于同步你的应用和渲染操作的,然而信号量用于同步命令队列操作。想要同步绘制命令和呈现的序列操作,选用信号量最合适。
尽管现在我们设置了需要的对象来促进同时使用多帧,我们还是没有防止有多余MAX_FRAMES_IN_FLIGHT的工作提交。当前只有GPU-GPU同步而没有CPU-GPU同步以跟踪任务如何进行。我们可能在0号帧还未准备好的时候用0号帧的对象。
为了进行CPU-GPU同步,Vulkan提供了第二种同步原语叫做栅栏。栅栏和信号量类似,它们可以被标记和等待,但是这次我们实际上在自己的代码中等待。
来源:oschina
链接:https://my.oschina.net/1024and1314/blog/4477188