在 Vulkan 中,使用 FIFO,当垂直空白到达时您没有准备好呈现的图像时会发生吗?
In Vulkan, using FIFO, happens when you don't have an image ready to present when the vertical blank arrives?
我是图形新手,我一直在研究 Vulkan 演示模式。我想知道:在我们的交换链中只有 2 张图像的情况下(一张屏幕当前正在读取,一张是免费的),如果我们没有设法在下一个垂直空白?我们是在进行演示时出现奇怪的撕裂,还是跳过演示并再次绘制相同的图像(我猜会产生“口吃”效果)?我们需要定义会发生什么,还是自动发生?
附带说明一下,这就是人们使用更长交换链的原因吗?也就是说,如果您在屏幕显示最后一张图片时设法将 2 张图片绘制到交换链,但现在您 运行 迟到了,至少您可以展示之前的 2 张图片中较新的一张?
我不确定其中有多少是 FIFO 或邮箱模式特有的:我想对于邮箱,您已经使用了最新的图像,所以您又被卡住了?
[2-图像交换链][1]
[1]: https://i.stack.imgur.com/rxe51.png
在常规 FIFO(或邮箱)模式下永远不会发生撕裂。当您呈现图像时,该图像将用于所有后续 vblanks,直到呈现新图像。由于 FIFO 不允许撕裂,在您的情况下,图像将完全显示两次。
如果您使用带 FIFO 的 2 深交换链,则必须按时生成每个图像以避免卡顿。使用更长的交换链和 FIFO,您有更多的余地来避免明显的卡顿。使用更长的交换链和邮箱,您可以获得类似的效果,但是当您的应用程序 运行 on-time.
时,可见延迟会更少
我是图形新手,我一直在研究 Vulkan 演示模式。我想知道:在我们的交换链中只有 2 张图像的情况下(一张屏幕当前正在读取,一张是免费的),如果我们没有设法在下一个垂直空白?我们是在进行演示时出现奇怪的撕裂,还是跳过演示并再次绘制相同的图像(我猜会产生“口吃”效果)?我们需要定义会发生什么,还是自动发生?
附带说明一下,这就是人们使用更长交换链的原因吗?也就是说,如果您在屏幕显示最后一张图片时设法将 2 张图片绘制到交换链,但现在您 运行 迟到了,至少您可以展示之前的 2 张图片中较新的一张?
我不确定其中有多少是 FIFO 或邮箱模式特有的:我想对于邮箱,您已经使用了最新的图像,所以您又被卡住了? [2-图像交换链][1] [1]: https://i.stack.imgur.com/rxe51.png
在常规 FIFO(或邮箱)模式下永远不会发生撕裂。当您呈现图像时,该图像将用于所有后续 vblanks,直到呈现新图像。由于 FIFO 不允许撕裂,在您的情况下,图像将完全显示两次。
如果您使用带 FIFO 的 2 深交换链,则必须按时生成每个图像以避免卡顿。使用更长的交换链和 FIFO,您有更多的余地来避免明显的卡顿。使用更长的交换链和邮箱,您可以获得类似的效果,但是当您的应用程序 运行 on-time.
时,可见延迟会更少