說(shuō)明:這里的Win32特指Vista操作系統(tǒng)之前的所有圖形系統(tǒng):GDI,、GDI+,、Direct3D,。 GDI是當(dāng)今應(yīng)用程序的主流圖形庫(kù),,GDI圖形系統(tǒng)已經(jīng)形成了很多年,。它提供了2D圖形和文本功能,,以及受限的圖像處理功能,。雖然在一些圖形卡上支持部分GDI的加速,,但是與當(dāng)今主流的Direct3D加速相比還是很弱小,。GDI+開(kāi)始出現(xiàn)是在2001年,,它引入了2D圖形的反走樣,浮點(diǎn)數(shù)坐標(biāo),,漸變以及單個(gè)象素的Alpha支持,,還支持多種圖像格式。但是,,GDI+沒(méi)有任何的加速功能(全部是用軟件實(shí)現(xiàn)),。 當(dāng)前版本的WPF中,對(duì)一些Win32功能還沒(méi)有很好的支持,,比如WMF/EMF文件,,單個(gè)象素寬度的線條等等。對(duì)于這些需求還需要使用GDI/GDI+來(lái)實(shí)現(xiàn),。 在Windows Vista中,,GDI和GDI+仍然支持,它們與WPF并行存在,,但是基本上沒(méi)有任何功能性的改進(jìn),。對(duì)GDI和GDI+的改進(jìn)主要集中在安全性和客戶相關(guān)問(wèn)題上。WPF的所有提交都不依賴于GDI和GDI+,,而是Direct3D,。并且所有的Primitive都是通過(guò)Direct3D的本地接口實(shí)現(xiàn)的。還記得我前面隨筆中提到過(guò)的Milcore嗎,?它就是和Direct3D交互的非托管代碼組件,。由于WPF的大部分代碼都是以托管代碼的形式存在的,,所以WPF中有很多托管、非托管的交互,。當(dāng)然,,在一些圖形卡不支持WPF所需要的功能時(shí),WPF也提供了稍微低效的軟件實(shí)現(xiàn),,以此來(lái)支持在某些PC上運(yùn)行WPF應(yīng)用程序,。 在Windows Vista中,Direct3D的關(guān)鍵改進(jìn)就是引入了新的顯示驅(qū)動(dòng)模型,。VDDM驅(qū)動(dòng)模型虛擬化了顯卡上的資源(主要是顯示內(nèi)存),,提供了一個(gè)調(diào)度程序,因此多個(gè)基于Direct3D的應(yīng)用程序可以共享顯卡(比如WPF應(yīng)用程序和基于WPF的Windows Vista桌面窗口管理),。VDDM的健壯性,、穩(wěn)定性也得到了提高,大量的驅(qū)動(dòng)操作從內(nèi)核(Kernel)模式移動(dòng)到了用戶(User)模式,,這樣提高了安全性,,也簡(jiǎn)化了顯示驅(qū)動(dòng)的開(kāi)發(fā)過(guò)程,。 在Windows Vista中存在兩個(gè)版本的Direct3D:Direct3D 9和Direct3D 10,。WPF依賴于Direct3D 9,這樣能更廣泛的解決兼容性問(wèn)題,。另外一個(gè)非常重要的原因就是為Vista的服務(wù)器版本提高方便,,因?yàn)榉?wù)器版本的Vista對(duì)顯卡和Direct3D基本上沒(méi)有任何的要求。同時(shí)WPF也支持Direct3D 10,。Direct3D 10依賴與VDDM,,只能在Windows Vista上使用。由于Windows XP沒(méi)有VDDM,,雖然Microsoft做了很大的努力來(lái)改善XP中Direct3D 9相關(guān)驅(qū)動(dòng),,提高內(nèi)容的顯示質(zhì)量,但是由于XP中沒(méi)有對(duì)顯卡資源的虛擬化,,強(qiáng)制所有的應(yīng)用程序都用軟件提交,。 WPF對(duì)某些多媒體的功能支持還需要依賴?yán)系募夹g(shù),比如DirectShow,。當(dāng)我們進(jìn)行音頻視頻的捕捉或者其它任務(wù)時(shí),,只能直接用DirectShow實(shí)現(xiàn),然后再用HwndHost嵌入到WPF內(nèi)容當(dāng)中,。 利用類似的技術(shù),,我們可以在WPF應(yīng)用程序中顯示自定義格式的內(nèi)容。通過(guò)提供自定義的DirectShow CODEC,,然后用Media元素實(shí)現(xiàn)和WPF內(nèi)容毫無(wú)限制的集成,。
另外,,WPF對(duì)XPS等文檔的打印輸出也得到了極大的改善。XPS文檔本身的規(guī)范也極大的提高了其打印的質(zhì)量,,XPS文檔的規(guī)范可以參考MSDN的資料,。除了打印,Vista操作系統(tǒng)中對(duì)遠(yuǎn)程的改進(jìn)也部分依賴于WPF,,比如有遠(yuǎn)程協(xié)助,、遠(yuǎn)程桌面和終端服務(wù)等等。它們的實(shí)現(xiàn)過(guò)程是通過(guò)發(fā)送一系列的“遠(yuǎn)程”命名到客戶端,,客戶根據(jù)自己PC的性能和命名進(jìn)行顯示,,這樣顯示的質(zhì)量能得到極大的提高。 在WPF中,,對(duì)Direct3D進(jìn)行各種封裝,。當(dāng)然,如果你本身對(duì)Direct3D/OpenGL很熟悉,,也可以直接在WPF中使用,。封裝后的Direct3D更容易使用。并且在Web應(yīng)用程序(XBAP)也可以使用Direct3D,。在WPF中使用的Direct3D,,沒(méi)有直接用非托管代碼控制所擁有的靈活性,也不能直接對(duì)硬件進(jìn)行底層控制,。 |
|
來(lái)自: joojo > 《我的圖書(shū)館》