• <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)論
              
            久久国产视频99电影| 精品久久久久久中文字幕大豆网 | 亚洲国产精品人久久| 婷婷五月深深久久精品| 久久国产精品-久久精品| 久久国产高潮流白浆免费观看| 国内精品九九久久精品| 久久久精品人妻一区二区三区蜜桃 | 久久久久久毛片免费播放| 久久人人妻人人爽人人爽| 久久久久久久尹人综合网亚洲 | 手机看片久久高清国产日韩| 日韩欧美亚洲综合久久影院Ds| 好久久免费视频高清| 一极黄色视频久久网站| 国产一区二区精品久久岳| 国产精品久久成人影院| 婷婷久久五月天| 狠狠色综合网站久久久久久久| 97精品国产91久久久久久| 久久一本综合| 国产精品青草久久久久福利99| 国产亚洲婷婷香蕉久久精品| 久久激情五月丁香伊人| 99久久国产免费福利| 77777亚洲午夜久久多喷| 久久精品国产99久久久| 中文字幕无码精品亚洲资源网久久 | 大香网伊人久久综合网2020| 97r久久精品国产99国产精| 人妻久久久一区二区三区| 国产成人精品综合久久久| 精品国产乱码久久久久软件| 久久久久国产日韩精品网站| 久久久久久无码国产精品中文字幕 | 热99re久久国超精品首页| 亚洲精品国产美女久久久| 人妻久久久一区二区三区| AV无码久久久久不卡网站下载 | 久久强奷乱码老熟女网站| 三级韩国一区久久二区综合 |