什么是Direct2D

一言以蔽之,就是Windows 7平台上的一个2D图形API,可以提供高性能,高质量的2D渲染。大多数人对Direct2D可能都比较陌生,以至于我之前在论坛上提到这个词的时候,有人竟然说你是不是写错了?可能大家比较熟悉的是Direct3D,因为D3D已经是当前游戏界的主流应用。在过去,3D世界是OpenGL与DirectX二分天下,但是由于OpenGL发展十分滞后,而且没有一个像微软这样强大的后台支柱,所以逐渐被DirectX所超越。回过头来说2D,过去Windows上的2D程序还主要基于GDI和GDI+,遗憾的是这两者都是软件实现,而Direct2D则不同,它基于Direct3D,所以能够使用硬件加速功能,能更大程度的发挥硬件特性,创建高性能,高质量的2D图形,这些图形包括几何图形,如矩形,椭圆等。还有位图,文本。而且更方便的是,Direct2D与GDI,GDI+和D3D都是可以交互的。

运行需求

要开发和使用Direct2D程序,系统必须是Windows 7,Windows Vista SP2, Windows Server 2008 R2或者Windows Server 2008 SP2,这样的系统需求无疑会稍稍阻碍Direct2D前进的步伐,虽然Vista和Windows 7已经推出有一段时间了,但是不可否认的是,仍然有很多人在使用XP系统。甚至是Win2K。但是新技术的普及是不可阻碍的,相信不久的将来,Direct2D将会成为2D图形世界的主流。

D2D的架构

Direct2D是基于Direct3D 10.1 API构建的,这意味着Direct2D可以使用硬件加速,下图是Direct2D与Direct3D的一个关系图

由上图可以看出,Direct2D还自带了一个软件实现(Software rasterizer),这是因为如果显卡不支持硬件加速,那么Direct2D可以使用软件方式渲染,即使这样,效果还是要优于GDI的。上图中在Direct3D下面还有一个层叫DXGI,其全称是:DirectX Graphics Infrastructure,DXGI从Direct3D 10中才开始存在,主要是为了将一些与3D图形无关的工作从原本的runtime中分离处理,这些工作多是一些底层的操作,比如枚举设备,显示帧缓冲,gamma控制,管理全屏等,在Direct3D 10以前的版本中,这些操作全部集成到了Direct3D的API中,现在分离处理单独成为一个component,就是DXGI。

可视效果

使用Direct2D可以获得比GDI更加优秀的可视效果,Direct2D支持基于图元的抗锯齿效果,而且完全支持透明和Alpha混合。下图是GDI和Direct2D的一个比较,大家可以看一下,Direct2D的细腻程度可见一斑。

可交互性

Direct2D与Direct3D,GDI,GDI+都有着良好的交互性,因为他们都支持表面级别的操作,这里的表面在Direct3D中就是surface,而在GDI中则相当于DC(Device Context)。此外Direct2D还能很好的支持DirectWrite,DirectWrite也是DirectX中一个新的Feature,主要用来做文本的绘制。下图是这几者指间的关系

期待

虽然Direct2D有着明显的优势,但是想取代GDI仍然非短时间可以达到,为了保持向后兼容,微软在短时间内绝不会放弃GDI。如今Direct2D出世已经有一段时间了,GDI还有多少时间?对于Windows平台上的图形世界,DirectX一统江湖的日子还有多远?我们拭目以待!

最新文章

  1. 判断来防ip是否为蜘蛛
  2. The prefix "tx" for element "tx:annotation-driven " is not bound
  3. 转:遗传算法解决TSP问题
  4. QEMU-KVM中的多线程压缩迁移技术
  5. Concurrent Assertion
  6. Ansible的条件语句
  7. MySQL锁系列1
  8. strcpy与memcpy的区别
  9. Linux Command Line(I): Beginner
  10. JavaScript中的高阶函数
  11. Centos6的yum源
  12. 使用GoldenGate EVENTACTIONS执行数据的实时触发和定制化
  13. Jenkins+Docker自动化集成环境搭
  14. fatal: refusing to merge unrelated histories
  15. kafka---->kafka stream的使用(一)
  16. java面试题收集
  17. rsync命令解析
  18. SpringCloud报错:Caused by: org.yaml.snakeyaml.parser.ParserException: while parsing MappingNode
  19. jsp内置对象 转发与重定向的区别
  20. mysql数据库优化课程---7、网站的搜索技术怎么选

热门文章

  1. BNU 3692 I18n 模拟
  2. 第四部分 linux使用者管理
  3. 山东理工大学第七届ACM校赛-G 飞花的传送门
  4. POJ 2051 Argus
  5. iOS-----5分钟学会枚举的正确使用姿势-Enumeration宏
  6. 刷题总结——regular words(hdu1502 dp+高精度加法+压位)
  7. 关于后台返回excel文件的问题
  8. 区间合并 POJ3667+HDU4553
  9. polyfill for Function--源码
  10. FileUtils删除文件的工具类