交替

使用可使用前缓冲区翻转的后台缓冲区是利用 DirectDraw 的最佳方式。 页面翻转对于游戏和视频播放中流畅、无撕裂的动画至关重要。

主图面是正在从中读取以绘制当前显示的屏幕的内存区域。 如果主图面有一个或多个附加的后部缓冲区,则它是一个 可翻转 表面。

翻转结构用于在 DirectDraw 中翻页。 从概念上讲,它们可以视为由表面构成的链接列表。 前缓冲区是“可见”缓冲区。 后台缓冲区和所有附加的可翻转表面的大小和像素深度必须与前缓冲区相同。 大多数新式图形卡都具有足够的内存,可用于在高分辨率模式下翻转的前后缓冲区。

所有类型的图面都可以在 DirectDraw 中翻转;翻页是常见的特殊情况。 例如,翻转不限于支持覆盖层的卡上的主要表面,或支持 3D、具有纹理内存的显示卡上的主表面。 在这些情况下,可以采用与主图面相同的方式翻转覆盖层和纹理,并使用相同的驱动程序入口点。

不用于翻转的图面可以具有任何尺寸,并且可以存储不可翻转的对象,例如图像数据。 图像数据也可能存储在系统内存中,但在这种情况下,DirectDraw 可能会使用硬件仿真层 (HEL) ,因为硬件分片通常无法到达系统内存来填充图像数据。 某些卡允许硬件分片 (DMA) 系统内存进行直接内存访问,因此 DirectDraw 对 DMA 执行检查。

下图演示了两个可翻转表面之间的关系。

显示 DirectDraw 中两个可翻转图面之间的关系的关系图。

如果前缓冲区附加了一个或多个后部缓冲区,则它是一个可翻转表面,如上图所示。 后台缓冲区和所有附加的可翻转表面的大小和像素深度必须与前缓冲区相同。 后台缓冲区表面使用翻转成为主表面。 翻转只是更改指针,使其指向不同的可翻转图面,从而显示新图面。 前缓冲区 (,它不再是主表面) 然后变得可访问,并且可以向其中写入新数据。

翻转可解决大多数屏幕闪烁问题。 渲染到未显示的表面的功能允许流畅、无泪的动画进行游戏和视频播放。