Windows Vista桌面視窗管理員(3)

來源:互聯網
上載者:User

前面曾經提到過,通過WDDM可以支援Surface的跨進程共用。共用DirectX表面對於重新導向DirectX應用程式非常重要。因為Vista必須要和以前的應用程式相容,就必須支援以前用GDI、、DirectX編寫的應用程式。WDM必須把這些應用程式的視窗重新導向到Surface,然後由WDM統一合成、最後顯示一個單一的Surface。

需要注意的一點是:WDM只重新導向Top-level的視窗。而對於MDI應用程式,它的所有Top-level視窗、子視窗會被合成為單獨的一個Surface,然後交給DWM合成。根據以前的Windows圖形系統。重新導向主要分為以下三類:

1、只用GDI顯示的視窗

毫無疑問,GDI應用程式在當今任是主流。WDM在重新導向基於GDI的應用程式時,基本過程如下:
A、在系統記憶體中分配一個和視窗大小一樣的記憶體塊,然後和視窗關聯。
B、顯示記憶體中也分配一個同樣大小、指定象素格式的顯存塊。
C、然後,當應用程式獲得視窗的DC時,因為這個視窗還沒有參與到WDM的合成,所以現在,它活動的DC不在是主視頻記憶體中,而且前面在系統記憶體中分配的記憶體塊。
D、經過GDI的操作後,在系統記憶體形成一個Surface。
E、系統會根據視窗的各種參數、適當的從系統記憶體複製顯示內容到視頻記憶體中。
F、這樣,視頻記憶體的資料就和視窗保持一致,剩下的工作就由WDM完成:合成各個Surface,形成最終的案頭。

另外還有兩點需要特別說明:

(1)、雙緩衝視窗。現在,雙緩衝技術顯示的視窗特別多,它能有效避免閃爍。確實,在使用了雙緩衝的GDI視窗中,它本身就有兩個記憶體塊,一個在系統,一個在顯卡。所以問題來了:為什麼重新導向時不直接使用雙緩衝中的顯示記憶體塊呢?這樣做主要有兩個問題:一是格式不相同,GDI顯示的格式和DirectX的格式不相同。GDI不支援以DirectX格式進行提交。二是很多GDI操作(XOR、文本、Alpha混合等等)是一種“讀取-修改-寫回”這樣的三步操作。如果重新導向時直接使用顯存塊,GDI顯示的時候必須從顯存讀取原來的顯示內容到CPU(或者系統記憶體),然後再修改,最後寫回到顯存。這樣的操作效率非常低。所以沒有採用。

(2)、已最小化的視窗。通常,最小化後的視窗只顯示在工作列的一個很小範圍內,我們需要畫視窗的大小估計也只有130X30。但是,在DWM中沒有採用這種用法。因為,如果視窗最小化後我們把Surface的大小修改為130x30再按需顯示,這樣會在Filp3D或者取縮圖時有問題,因此視窗已經被修改。所以,DWM在視窗最小化後儲存了最後一次更新的Sureface內容。

2、只用DirectX顯示的視窗

由於DirectX應用程式通常是通過調用Present()函數進行Surface的提交,所以這類應用程式通常只需要一個視窗緩衝就可以實現重新導向。這種DirectX視窗的重新導向是由DirectX系統(實際上是DirectX 10)處理的,當DirectX10決定顯示某個Surface時,它會調用DWM的介面,以此實現跨進程的共用。DirectX 10的“Furface共用”是一個非常獨特的功能,其建立在WDDM之上。這也是運行DWM必須要WDDM的關鍵原因之一。

當Present()顯示Surface時,DWM會得到通知,表示應該更新其原來的視窗Surface,更新後DWM再重新進行合成。注意WPF應用程式也是DirectX應用程式。它們也是採用這種重新導向方式。

3、混合GDI和DirectX的視窗

現在,有很多的Top-level視窗採用了GDI+DirectX的方式進行內容顯示。根據混合的方式不同結果也不同。如果Top-Level視窗以及它的每個子視窗是用唯一的方式進行顯示,比如主視窗只用DirectX,子視窗只用了GDI,DWM對這樣的視窗會形成自己的“合成”樹。沒有子視窗單獨顯示,然後整個Tree的Surface被合成為傳遞給案頭。這樣的混合方式能很好的實現。

對於單獨一個Top-level視窗同時使用GDI+DirectX顯示,比較麻煩。特別是GDI+DirectX對視窗的某個地區進行重複顯示的情況。DWM通常不支援這樣的視窗。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.