浅谈双缓冲技术和页交换技术及其区别

    从速度上来讲页交换操作更快一点。

    我最先接触页交换是在学DirectX的时候。出现页交换技术是因为SVGA卡的视频缓存已经足够的大了,一般都是8M以上,现在主流显示卡则能达到128M。这样大的显存除了用于可见屏幕的显示,还有大量的剩余,这剩余的显存则可以用于存储暂时不显示在屏幕上的位图。VGA/SVGA系统的结构下,视频缓存所分配到的地址(十六位下)都是0xA000:0000-0xA000:FFFF的64K和0xB000:0000-0xB000:FFFF的64K。其中前一个称为A窗口用于图形模式,后一个称为B窗口用于文本模式。VGA/SVGA系统的另一个特点就是通过寄存器编程或BIOS调用可以改变可见视频缓存区在视频缓存中的起始位置,这个就是页交换技术实现的硬件基础。

    所谓的页交换,就是改变了可见视频缓存区在视频缓存中的起始位置。假如一个视频模式,需要256K的视频缓存,而视频缓存为8M。在初始化视频模式,一般都会把可见视频缓存区的位置设置为视频缓存的零偏移处,这样显存中 0-256k的数据将被显示到屏幕上面。而8M的显存总共可以有32个256K,几可以有32个虚拟的或者说不可见的屏幕,在这些区域内写如数据是不会被显示到屏幕上的。

    由于可以改变可见视频缓存区的起始位置,我们就可以将显示卡中多余的视频缓存当作虚拟屏幕来使用。将希望在下一帧显示的位图直接绘制在虚拟屏幕上面,当要显示的时候,直接改变可见视频缓存区的起始位置到虚拟屏幕的起始地址就可以了。也就是通常所说的页交换(Page Clip)。在DirectX里面就是这样实现的。

    双缓冲则是另外一个不同的方法。它不改变可见视频缓存区起始地址,而是在内存或显存中开辟一块与屏幕一样大小的存储区域,作为缓冲屏幕,这和页交换是类似的。同样也是将下一帧要显示的图象绘制到这个缓冲屏幕上面,不同的是在显示的时候不是改变可见视频缓存区起始地址,而是将缓冲屏幕中的数据直接复制到可见视频缓存区里面去。由于图形绘制过程是在不可见的缓冲屏幕中进行,所以可以消除绘制图形时屏幕的闪烁。但由于要复制大量的数据,速度可能就会馒一些。不过双缓冲也有其优点,就是它可以保证实际屏幕与缓冲屏幕数据的一致性。而页交换技术则不行。

    双缓冲中的缓冲屏幕一般都建立在内存中,而不是在视频缓存中。如果硬件提供显存到显存的读写操作,速度绝对比建立在内存中快,因为内存到显存的读写要经过系统总先,而显存到显存的读写(如果硬件支持的话)则不需要通过系统总线。然而这种显存到显存的读写并没有写进VESA文挡,并不是一个标准的办法,所以并不是所有的显卡都能提供这种显存到显存的读写。如果硬件不支持显存到显存的读写操作,则可以先将显存中某一块区域的数据复制到内存,再从内存复制到显存中的另一块区域,就需要两次复制,两次经过系统总线,所以,将缓冲屏幕建立在显存中的麻烦是可想而知的。由于显存到显存的读写操作不是标准的操作,所以通常不将缓冲屏幕建立在显存中。在DirectX中也曾经提到,DirectDraw会尽量获取硬件加速,某些特性如果硬件不支持,则DirectDraw会对其采用软件模拟的办法,我想大概说的就是这个吧。

    当然,由于存储容量越来越大,就可以定义实现多页面的页交换技术和多缓冲技术。在双缓冲或多缓冲中,由于可以保证数据的一致性,如果再实现了一个高效率的Blt,则可以进一步实现更加高效率的脏矩形技术(Dirty Rectangle),从而实现只对改变了的区域进行绘制,效率会更高。

    在存储器的使用方面,也不难知道,页交换技术使用的主要是显存,而不能使用内存做页交换;双缓冲技术通常使用的是内存,但也可以使用显存,并且,如果硬件支持显存到显存的读写,使用显存作缓冲屏幕,速度会很快,但是如果硬件不支持,则速度会很慢,并且实现起来会很麻烦。

    如果仔细研究过VGA/SVGA系统的话应该能够理解双缓冲、页交换等概念。DirectX里面的一些技术的内部细节也能够想的清楚。DirectX中的DirectX实际上并不神秘,其内部细节也能够想清楚。

 

                                                                   作者:陈凯
                                                                   RockCarry工作室:http://rockcarry.126.com
                                                                   2005.2.10
                                                                   版权所有、不得转载

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值