什么是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一統江湖的日子還有多遠?我們拭目以待!