DirectDraw 所提供的功能真的很少,并且这些功能在 DOS 下通过 VBE 都能实现。然而,DirectDraw 的使用却是相当的繁琐,不如 VBE 的调用来的简洁。
这样说有点一棍子打死的感觉,其实VBE不是万能的,光DDRAW中提供的那些硬件加速特性VBE就难以全部做到,VBE是现在显卡的一套基本子集,各显卡厂商还有更多的高级或者说现代特性,这些高级特性的使用通过WINDOWS的硬件无关抽象层连接到显卡的驱动,显卡提供相应的能力的DDRAW直接调用,没提供的可以软件实现,2D这样,3D就更不用说了,显卡厂商制造的时候就得按照DX的需要来,提供D3D要的特性。DX可能的确是不适合直接用于工程,不过有大量的第三方封装引擎可以选用,可以避免与生涩的COM打交道。
我很难想到,除了能够直接访问显存之外,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 功能的需求。
我并未否认VBE,毕竟大多的2D特性是建立在VBE上的,但硬件Blit和ColorKey也是有用的,DDRAW虽然没直接提供几何绘制接口,用GDI当然可以,但效率过低,直接LOCK表面再写显存当然也可以,但比起反复的加锁和解锁来说,硬件位块传送就显得有用了,画点函数可以这样做:建立一个支持硬件位块传送的surface,大小为1X1,即一个像素,往目标表面指定位置直接Blit。如果觉得这个比显存直写来的快不了多少的话,水平线和垂直线可能更能运用这个硬件加速特性。对支持硬件加速的Colorkey位块传输在下更是垂涎已久。我赞成2D图形处理不会也不必增加更多的特性,VBE本身提供的说出来也就主要也就两种而已——显存直访、显存首址重定向(其应用可衍生出换页和大虚拟屏幕等),就这些了,已经满足2D处理的应用了。如下图:
DDRAW
______________|______________
| |
VBE 厂商特性
(显存直访、首址重定向等) (硬Blit等)
实在不算多,说DDRAW没多提供什么,那VBE本身又提供了多少呢?2D嘛,不是要多,而是要有用,VBE提供的都是极有用的,而从基本几何绘图到位图传输,有了那个厂商特性就如虎添翼。我眼巴巴的等着这个特性入标准呢……
我不认为显存用的频率一定会比主存少,也不认为主存和CPU的发展比显存及GPU快,当个人电脑还在用DDR2内在的时候显存颗粒已经是DDR3甚至DDR4了,而且容量越来越大——128M的普通的不能再普通,512M以上的都比比皆是;GPU的制程也直逼CPU,而且它要做的事只是处理图形而已(现在一些思路提出的利用GPU上的浮点运算单元协助处理CPU事务,利用GPU过剩的处理能力)。
写到最后,发现不是我们的观点不同,而是都对VBE有更高有寄望而已。