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