翻页是一种简单的硬件辅助技术,用于实现无闪烁图形,已经存在了几十年。
它需要硬件的支持:
视频子系统必须至少有两个可能可见的内存区域(页面),在任何给定时刻只有一个区域是可见的。
视频子系统支持某种方式,软件可以借此选择两个页面中的哪一个是可见的。这通常只是对硬件的单个指令,并且切换是瞬时的,因为硬件只是停止扫描一页并开始扫描另一页。
所以,我们的想法是在任何给定的时刻我们保持一个页面可见,而在另一个页面上我们正在渲染下一帧。一旦我们完成了框架的渲染,我们发送硬件指令立即“翻转”可见页面,这意味着我们渲染的页面现在变得可见,而以前可见的页面变得不可见并且可供我们使用在其中渲染下一帧。我们对每一帧重复这个过程,当用户看到可见页面时,总是在不可见页面上渲染。
更详细地说,它的工作原理如下:
我们有两页,A 和 B。一开始两页都是空白的,A 是可见的,B 是不可见的。
我们在页面 B 上渲染我们的图形框架,这是不可见的,所以最初用户看不到它。
一旦我们在页面 B 中渲染完我们的框架,我们就会发送硬件指令来翻转页面,这样用户现在开始在页面 B 上看到我们的渲染。
我们在不可见的页面 A 上渲染下一帧,因此用户看不到渲染的进行。(这将被视为闪烁。)
一旦我们在页面 A 上完成渲染,我们再次翻转页面,所以现在用户可以看到我们新渲染的页面,而之前可见的页面现在变得不可见,可用于渲染其中的下一帧。
我们不断为每一帧重复这个过程。