我很难想到,除了能够直接访问显存之外,DirectDraw 还能为我们提供哪些硬件上的加速。事实证明,DirectDraw 下的 GDI 的确是慢速的,因此说,在几何图形的绘制上,DirectDraw 并没有提供硬件上的加速。
至于 DirectDraw 所提供的换页操作,在 VBE 中已经定义,并不是 DirectDraw 所独有。超大屏的 Surface 也是利用 VBE 来实现的。而离屏 Surface 等等,则不过是一些存放在内存或显存中的对象而已。
唯一可能存在硬件加速的,可能就是位块传送函数,但这种硬件加速,也仅限于显存内部的位块传送。主存到显存之间的位块传送操作,恐怕都需要 CPU 的介入,因为显卡作为一个图形处理器,能够直接访问主存的可能性不大,因此说主存和显存之间的 blt 很难有硬件上的加速。以目前的情况来看,CPU 对主存的访问要比对显存的访问快,因为主存技术发展很快,这包括存储芯片和总线技术的发展,并且 CPU 内部有 cache(显存是必须写穿的 Write-through,否则图像的显示就不正常,因此无法用到 cache)。因此,多数情况下,人们都更加喜欢使用主存。因此,在 2D 图形上,显存除了用于显示,换页,超大屏幕,已经没有更多的用途。而显存到显存的 blt,即便真的有加速,我想也很少会被人们用到。
应当承认的是,DirectDraw 是微软这样的大厂商所提出的,因此能够得到更多厂商的支持。标准化已经是发展的趋势,然而 DirectDraw 并不是一个真正意义上的标准,微软只给出了用户方面的接口,而没有更加公开的给出内部的细节,以及下层驱动的接口(其实 DDK 的 MSDN 已经给出),因此他不具备开放性。另一方面,DirectDraw 只能用于 windows 平台,有明显的局限性。因此说,VESA 所给出的 VBE,才是真正意义上的标准(仅指2D),具备开放性和跨平台性。在2d方面,就算有新的特性出来,我想也该是写入 VESA 的标准,而不是 DirectDraw,DirectDraw 只是 VBE 标准之上的一个软件层。
分析目前显卡的发展趋势可以发现,在 2D 方面已经很成熟,即直接可访问的显存,换页等,基本上不会再出现新特性。而在 3D 方面,真正意义上的标准还没有建立起来,OpenGL 和 Direct3D,都只是事实上的工业标准,随着 3D 技术的不断发展和完善,必然会建立起标准化的组织,来制定 3D 图形的标准。我希望通过这样的标准,我们可以直接访问显卡的3D图形控制器,这样可以使3d功能应用于更加广泛的 PC 机操作系统平台,而不仅仅局限于 windows 和 linux。或者说通过这个标准,来建起一个与操作系统无关的 3D 图形功能的调用层(类似于 VBE),来满足不同系统对 3D 功能的需求。