计算机图形编程中的页面翻转是什么意思?

4

什么是页面翻转?

为什么在图形编程中需要使用它?


1
http://en.wikipedia.org/wiki/Multiple_buffering#Page_flipping - Greg Hewgill
简短回答:在缓冲区中绘制页面,以便在可用时显示。 "翻转"页面意味着在完整缓冲区和正在进行的缓冲区之间交换。 - D.N.
2个回答

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

4
不仅是几十年前使用的技术,如今它仍然是完全相关的技术。 - Greg Hewgill
2
这不就是双缓冲吗? - Seth Carnegie
2
@Seth Carnegie,这与双缓冲非常相似,但并不完全相同。在双缓冲中,视频RAM始终在一个位置,而CPU始终在系统RAM的某个离屏区域进行渲染,然后将该区域复制到视频RAM中。 - Mike Nakis
1
@MikeNakis:双缓冲通常使用页面翻转来实现。 - datenwolf
1
@MikeNakis:最新的窗口系统(AIGLX、Windows Aero、Quartz Extreme)都是合成的。程序不再需要双缓冲其各自的小部件,而是将它们单缓冲绘制到离屏缓冲区中。然后将全屏图像合成到页面翻转的双缓冲区中。 - datenwolf
显示剩余4条评论

1
通常直接在屏幕上绘制图形速度太慢,你可以在一个页面上绘制,同时显示另一个页面。当准备好展示时,再翻转到完全绘制的页面,然后开始在另一页上绘制。这样可以实现流畅的动画效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接