我是图形新手,一直在研究 Vulkan 演示模式。我想知道:在我们的交换链中只有 2 个图像(其中一个是屏幕当前正在读取的,另一个是空闲的)的情况下,如果我们无法在 之前完成对当前空闲图像的绘制,会发生什么情况?下一个垂直空白?我们是否进行演示并得到奇怪的撕裂,或者跳过演示并再次绘制相同的图像(我猜会产生“口吃”效果)?我们需要定义发生什么,还是自动发生?
顺便说一句,这就是人们使用更长交换链的原因吗?也就是说,如果您在屏幕显示最后一个图像时设法将 2 个图像绘制到交换链中,但现在您迟到了,至少您可以呈现之前 2 个图像中较新的一个?
我不确定其中有多少是特定于 FIFO 或邮箱模式的:我猜对于邮箱,您已经使用了最新的图像,所以您又陷入困境了吗? [2-图像交换链][1] [1]:/image/rxe51.png
最佳答案
在常规 FIFO(或邮箱)模式下永远不会发生撕裂。当您呈现图像时,该图像将用于所有后续 vblanks,直到呈现新图像。由于 FIFO 不允许撕裂,因此在您的情况下,图像将完全显示两次。
如果您使用带有 FIFO 的 2 深交换链,则必须按时生成每个图像以避免卡顿。有了更长的交换链和 FIFO,您就有更多的余地来避免明显的卡顿。使用更长的交换链和邮箱,您可以获得类似的效果,但当您的应用程序按时运行时,明显的延迟会更小。
关于vulkan - 在 Vulkan 中,如果垂直空白到达时您还没有准备好要呈现的图像,那么使用 FIFO 会发生这种情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71857995/