• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            XP的GDI模型:

            XP用的是XPDM驅(qū)動(dòng)模型,簡單來說就是GDI32直接調(diào)用內(nèi)核(Win32k.sys)內(nèi)的圖形引擎, 圖形引擎會(huì)再調(diào)用顯卡驅(qū)動(dòng), 對于顯卡驅(qū)動(dòng)沒有實(shí)現(xiàn)的接口, 圖形引擎會(huì)用軟件實(shí)現(xiàn)。所以這種情況下我們一般窗口的Render操作都是直接畫到顯示器上。( 當(dāng)然也有例外, 就是Layered window (WS_EX_LAYERED) , 所有的Layered windows因?yàn)橛蠥lpha通道,系統(tǒng)進(jìn)行了緩存,  最終才合成輸出到顯示器上的, 所以Layered windows比較耗資源, 我們抓屏?xí)r可以通過CAPTUREBLT表明是否需要過濾該類型窗口。) 

            Vista之后系統(tǒng)用了WDDM驅(qū)動(dòng)模型, 該模型從Vista的1.0到Win10已經(jīng)是2.0。

            該模型提供了2套render相關(guān)的API, 一套是傳統(tǒng)的GDI API, 還有一套是新的Dxgi接口, 當(dāng)然傳統(tǒng)的GDI在內(nèi)核中也有部分是通過Dxgi實(shí)現(xiàn)的。
            基于新的Dxgi接口,系統(tǒng)在應(yīng)用層提供了D2D, D3D, DirectComposition等API。
            在該模型下, 所有的窗口在系統(tǒng)中都有緩存(客戶區(qū)內(nèi)容), 所以所有的窗口實(shí)際上都是Layered windows了。
            另外系統(tǒng)提供DWM桌面管理器, 它負(fù)責(zé)將所有的桌面窗口進(jìn)行合成,所以我們可以看到3D或者毛玻璃效果, 最后再顯示到桌面。
            未來微軟的期望應(yīng)該是逐步拋棄現(xiàn)有的GDI,逐步轉(zhuǎn)到Dxgi這套新的API上來, 現(xiàn)在新的系統(tǒng)應(yīng)用已經(jīng)都基于這套新的render API, 但是考慮到歷史包袱和兼容性,很長世間內(nèi)應(yīng)該會(huì)2套共存.
            這樣現(xiàn)在Windows提供了2種應(yīng)用開發(fā)的方式, 一種是傳統(tǒng)的桌面程序(很大部分是基于GDI的), 還有一種就是UWP(Universal Windows Platform)應(yīng)用, 這種應(yīng)用就是所謂的通用應(yīng)用(跨Mobile/Surface/PC/Xbox/HoloLens)。


            通用應(yīng)用基于WinRT, 即Windows Runtime, 當(dāng)然這里runtime和.net的CLR以及java的JVM不同, 人家是真正的runtime(字節(jié)碼解釋器), 而WinRT僅是一套API。當(dāng)然WinRT的API也有自己的特色: 接口實(shí)現(xiàn)基于COM,面向?qū)ο螅?接口描述基于元數(shù)據(jù),跨語言;界面實(shí)現(xiàn)基于D3D, 用Xaml描述。對于這套API的實(shí)現(xiàn),不同平臺(tái)會(huì)不一樣,如果是X86的PC, 很大程度上是在原有的Win32應(yīng)用層進(jìn)行封裝(只不過弄了個(gè)沙箱, 進(jìn)行了一些權(quán)限控制); 如果是ARM版, 內(nèi)部實(shí)現(xiàn)肯定和X86不一樣, 但只要API保持不變, 對上層應(yīng)用都是透明的。


            在Win10上,現(xiàn)在的WinRT桌面應(yīng)用已經(jīng)和傳統(tǒng)的Win32應(yīng)用程序沒太大差距了,都可以直接以窗口的形式跑在傳統(tǒng)桌面上, 只不過權(quán)限有些不一樣(WinRT app是appContainer權(quán)限, 只能訪問自己的安裝目錄)。兩者還有一個(gè)不一樣就是render的方式, 傳統(tǒng)的大部分還是基于GDI,而WinRT App是基于Xaml, 而Xaml又是基于D3D和Dxgi的。


            Win10的虛擬桌面層讓人覺得比較好奇, 可后來發(fā)現(xiàn)微軟僅僅是在DWM里做了些手腳, 簡單來說就是讓窗口進(jìn)程關(guān)聯(lián)了某個(gè)虛擬桌面, DWM在合成時(shí)僅顯示當(dāng)前虛擬桌面的窗口。曾經(jīng)也很好奇為什么很多WinRT窗口明明窗口屬性是Visible 的,但是桌面上為什么不顯示,其實(shí)也是DWM做了些手腳, 當(dāng)然微軟后來提供了API讓我們區(qū)分一個(gè)WinRT窗口是否真的可見。
            posted on 2016-03-16 22:09 Richard Wei 閱讀(4026) 評(píng)論(1)  編輯 收藏 引用 所屬分類: windows desktop

            FeedBack:
            # re: GDI VS Dxgi
            2016-06-04 09:31 | pdkuionline
            寫得很好,又長知識(shí)了,謝謝!  回復(fù)  更多評(píng)論
              
            久久久噜噜噜久久中文福利| 久久久久久av无码免费看大片| 国产精品久久婷婷六月丁香| 亚洲香蕉网久久综合影视| 国产亚洲欧美精品久久久| 色狠狠久久综合网| 久久国产成人午夜aⅴ影院| 久久精品国产亚洲AV不卡| 久久久久无码精品| 99精品久久精品| 人人狠狠综合久久88成人| 国产亚洲精久久久久久无码77777| 久久精品99久久香蕉国产色戒 | 久久久久久久久66精品片| 91精品国产乱码久久久久久| 欧美成人免费观看久久| 久久综合狠狠综合久久激情 | 久久99国产乱子伦精品免费| 伊人色综合久久天天人守人婷| 精品国产91久久久久久久a| 久久精品国产亚洲av影院| 伊人久久大香线蕉无码麻豆| 久久久久亚洲AV成人网| 久久线看观看精品香蕉国产| 久久青草国产手机看片福利盒子| 99久久综合国产精品免费| 久久99精品久久久久久齐齐| 国产成人精品综合久久久| 久久久久久国产精品无码下载| 久久国产精品久久久| 久久久久亚洲爆乳少妇无| 蜜桃麻豆www久久| 2021久久精品国产99国产精品| 久久人妻少妇嫩草AV无码专区| 日韩人妻无码一区二区三区久久99| 久久久青草青青国产亚洲免观| 精品欧美一区二区三区久久久| 久久精品国产一区二区三区不卡| 久久成人18免费网站| 久久电影网| 狠狠色丁香久久婷婷综合_中|