Desktop window Manager(DWM,先前的DCE,桌面組合引擎)是窗口管理器的組件,在Window Vista中引入,其引進了Window Aero圖形用戶接口和可視的主題。DWM要求圖形卡支持DirectX9.0和Shader模式2.0.DWM在Vista Starter版本中沒有,只有Vista Home基礎版中有,但許多Window Aero接口(例如Glass和Flip 3D)都無效。在Windows Server 2008中也可以,但桌面體驗特性和兼容的圖形驅動程序是必須的。
架構
使用DWM,應用程序并不直接地畫到顯存中,取而代之的行為是將內容畫到系統內存的off屏幕緩沖區,這個緩沖區又DWM組合到一起而最終渲染到屏幕上,每秒許多次。某種意義上說,他與Mac OS X的Quartz Compositor相似。因為Compositor已經訪問所有程序的圖形。DWM使用Direct 9X來執行組合功能并最終在GPU中render,將CPU從Screen Buffer到顯示器的渲染過程解脫出來。然而這并不映像應用程序paint到off屏幕緩沖區,依賴于使用什么樣的技術,可能仍然是CPU綁定的。DWM結構在DWM兼容格式中可用。緩沖區中的窗口內容轉換到DirectX 素材。
桌面本身是滿屏的Direct3D表面,其窗口使用兩個相鄰三角形表達的網格可以變換到2D的矩形。素材,代表UI映射到這些矩形上。窗口轉換實現為網格轉換,使用shader程序。Windows Vista,轉換限制在實現轉換的內建陰影中。 DWM僅僅將主桌面對象映射到一個3D表面,其他的桌面對象,包括虛擬桌面和UAC使用或不適用的安全桌面。
由于所有的應用程序都render到一個off-screen緩沖區,他們也可以同樣讀取嵌入到其他程序的緩沖區。由于off-screen緩沖區是有應程序經常更新,嵌入的rendering將是應用程序窗口的動態表達而不是靜態的rendering。這就是live thumbnail 預覽,Windows Flip和Window Flip3D在Windows Vista如何工作的。 DWM使用MIL(媒體集成層,未托管的compositor,和WPF一道共享)來將窗口表達為在一個composition樹上的一個composition節點,表示桌面和所有在里面的窗口,這些通過MIL從場景后到前render。由于所有的窗口對最終的圖象都有貢獻,因此復合像素的顏色由多個窗口決定,這用來實現透明度的效果。DWM允許自定義陰影來控制怎么樣將多個應用程序創建符合像素。DWM包括內建的Pixel shader2.0程序,其計算窗口中像素的顏色,其平均臨近和后面窗口中的像素值。這些引用被DWM用來在DWM管理的窗口邊界獲得blur效果。
由于MIL通過composition樹來提供一個retained mode圖象系統,在窗口被移動時需要repaint和refresh的工作就由DWM和MIL處理,將應用程序從其free出來。已經在composition樹和off-screen緩沖區中的背景數據,直接用來render背景, 而不用讓背景應用程序通過發送WM_PAINT來重繪它們自己,就象Vista之前系統所做的一樣。DWM使用雙緩沖區,避免在移動窗口的時候閃爍或抖動,composition引擎使用例如挑選的優化辦法來提高性能,避免重畫沒有變化的部分。由于compositor是多監視器感知的,DWM天生支持這些。在滿屏應用程序中,例如游戲,DWM并不執行窗口組合而因此性能并沒有相當大的降低。
重定向
對于非DWM感知的rendering技術,輸出必須被重定向到DWM緩沖區。對于窗口,GDI或DirectX任何一個都可以用來rendering。為了讓這兩個能與DWM一起工作,DWM為其提供了重定向技術。
對于GDI,Microsoft Windows中最常用的rendering技術,每個應用程序窗口在其部分或全部需要顯示的時候,都是應用程序的工作去rendering它們自己。如果沒有DWM,rendering在視頻內存緩沖區中掃描。在DWM下,系統內存中分配一個與窗口大小相等的緩沖區。GDI調用被重定向到去寫這些緩沖區,而不是直接到視頻內存。另外一個緩沖區在video內存中分配來表示DirectX表面,其作為窗口網格的素材。系統內存緩沖區分別被轉換到DirextX表面,并且同步進行。這個過程是必須的,由于GDI不能直接輸出DirextX像素格式。表面由compositor和來讀,并且組合到視頻內存的桌面中。寫GDI輸出到系統內存不是硬件減速的,也不是轉換到DirextX表面。當一個GDI窗口被最小化的,其通過GDI的限制,緩沖區不再更新。因此,DWM使用應用程序被最小化之前的最后一幅位圖來render緩沖區。
對于使用DirextX來寫3D表面的應用程序,Windows Vista中實現的DirextX使用WDDM來與DWM共享表面。DWM然后直接使用表面并且與窗口網格映射。對于WPF程序,這些是DirextX程序,compositorrender這些共享的表面,其被組合到最終的桌面。應用程序能混合多child窗口的renderng技術,只要GDI和DirextX都被用來render相同的窗口。這種情況,DirextX和 GDI的rendering的順序不能保證,并且例如不能保證來自系統內存的GDI位圖是否應經被傳遞到視頻內存表面。因此,最終的組合可能沒有包含GDIrendered元素。為了阻止這個發生,DWM被臨時關閉,只要應用程序是在同一個窗口混合運行GDI和DirextX。