GDI与DirectX对比

原理对比:
GDI和DX在原理和框架设计上是完全不同的,有几个重要的方面决定了它们是没法结合。
1.现代的2D库(包括GDI)都基于画布来操作,或者叫位图区域,而3D库的操作对象只是场景和3D物体,没有画布概念,你在显示器上看到的只是渲染流水线中的最后一个环节(光栅化)而已。
2.计算单元的设计理念不同。CPU是通用指令,能干所有事,包括3D运算,只是效率低而已;GPU只有有限的专用指令,它的目的是通过并行方式执行大量的重复运算,且浮点运算是强项,在像素运算效率上比CPU高几个数量级,但它并不通用。
3.动态计算。2D运算中有大量的文字字型生成、图像特效计算过程,这些动态计算只能由CPU承担,硬件能加速的部分只局限于图像的混合,换句话说,只有静态图像数据才能硬件加速。MMX指令虽然能起到加速作用,但性能提升幅度相比GPU来说简直不值一提。
4.内存。GPU运算只能在显存中进行,CPU运算只能在系统内存中进行,当两种内存的数据需要互相传输时,内存间的IO次数和传输量必须严格控制,过大的数据吞吐将严重影响硬件加速性能。对于3D应用来说,CPU的功能通常是构造并传递流水线指令、加载各种静态图片(纹理)、响应键盘鼠标游戏外设消息,这里面数据吞吐量最大的就是图片,游戏中通常在关口开始阶段就把所有纹理一次性加载到显存,而且在运行过程中很少或者几乎没有动态计算过程(比如文字处理)。

从上面可以看出,GDI/DX的差别到底有多大,为什么UI系统和游戏很少被融合,因为需求不同,尤其是第三点,UI中需要大量的动态计算,游戏恰好相反,必须尽可能减少动态计算。不是想融合就能融合的。
总结:

    从总体上来说,dx和gdi设计的出发点不同,dx主要是为gpu来设计的,他需要强烈的硬件支持,并且,它非常针对游戏设计,因为游戏和普通的2d客户端对于CPU来说的计算量差异很大,所以,游戏一方面需要硬件支持,另外又符合某种(如显卡)所擅长的计算模式;而gdi是为广谱设计的,2d客户端可以用,游戏也可用,只不过游戏运行起来会很卡,因为cpu不适应游戏场景这种计算,gdi没有充分利用gpu,于是有了dx。

    dx需要相应的软件和硬件来支持,否则不能运行,而gdi则兼容绝大部分硬件,我所知道的还没有不支持gdi操作的,即使是没有安装显卡驱动,一样可以输出图形,这可以在未安装显卡驱动的显示器上看到;

    dx在用户模式下分解绘图操作,从而直接交给gpu去绘制,这样,gpu不能踢回(踢回见windows图形编程一书第二章)dx传过来的绘制操作,因为事前已经确定好显卡驱动可以做哪些绘制了;而gdi则是以商量的形式和显卡驱动交互,显卡驱动在繁忙的时候可以踢回gre(同见windows图形编程)发送的请求,有gre来分解gdi绘图操作。

    最后,就目前来说,gdi的一些底层实现,已经慢慢转向dx来加速了,所以二者的交集也在越来越大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值