走出GDI
前几天给朋友设计项目,需要1280*1024的屏幕达到5屏/s的速度,用Gdi做了一次设计,本地速度20屏/s,异地Socket速度也有近20屏/s和250M/s的结果,超额达到了他的设计要求。
本来设计完成了,上班闲了很想继续深究、继续优化设计,开始采用DShow做设计,速度很快,却不知道如何将DIB锁定下来,没有深想,只要实践了理论,验证出速度是多少就成了。一转身拿DDraw做了另一个Win32的程序,验证结果有些吃惊,采用了覆盖模式,速度达到了300屏/s,采用SetColorKey做面,速度和Gdi差不多。因为最终要求使用的是位插入操作,所以可以采取覆盖模式,也就是说比原先的设计快了15倍。
从这里我就想,其实DDraw和DIB的差异不是很大,只是因为DIB考虑到每个面的相互关系,DDraw的最大优势只是联系分配操作空间。也许还有一些DDraw的优势,但也许不是主要的影响。
那么从这里继续深想,D3D也就是从DDraw上扩展了3*3矩阵而已,增加了多重像素渲染模块(可能就是通常说的渲染引擎)。过去,我们学习过程是从OpenGL到D3D再到GDI,如今回过头来看,全错了,Gdi优化了就是DDraw,DDraw增强了就是D3D。如果不掌握GDI,搞D3D真是一场游戏一场梦。而精通了Gdi,D3D还不是任你使用。
我们还可以再一次深入考虑,其实GDI+应该是D3D的二维翻版,它是具有2*2矩阵的DDraw,是DDraw向D3D过渡的一个具体实践。想想GDI的博大精深、GDI+的整齐划一,D3D才会变得如此的千篇一律。
因之,今后写程序,需要融会贯通、综合运用,例如:可以使用D3D做软件的主界面,但该用GDI画些什么的地方,还是用GDI去画,画在BeginPaint里面、画在Surface里面、画在Texture里面,画出咱们想用的控件,画出咱们想要的算法。
走出GDI,也许让我们看到了GDI更多的应用领域,也许会飘在应用层面上无法回来。走出GDI,因他就在我们身边,是自如运用高级图形工具的基石。
浙公网安备 33010602011771号