• <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驅動模型,簡單來說就是GDI32直接調用內核(Win32k.sys)內的圖形引擎, 圖形引擎會再調用顯卡驅動, 對于顯卡驅動沒有實現(xiàn)的接口, 圖形引擎會用軟件實現(xiàn)。所以這種情況下我們一般窗口的Render操作都是直接畫到顯示器上。( 當然也有例外, 就是Layered window (WS_EX_LAYERED) , 所有的Layered windows因為有Alpha通道,系統(tǒng)進行了緩存,  最終才合成輸出到顯示器上的, 所以Layered windows比較耗資源, 我們抓屏時可以通過CAPTUREBLT表明是否需要過濾該類型窗口。) 

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

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


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


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


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

            FeedBack:
            # re: GDI VS Dxgi
            2016-06-04 09:31 | pdkuionline
            寫得很好,又長知識了,謝謝!  回復  更多評論
              
            亚洲国产精品无码成人片久久| 色综合久久夜色精品国产| 久久精品无码专区免费青青| 久久狠狠高潮亚洲精品| 中文字幕一区二区三区久久网站| 国产成人精品综合久久久| 日韩久久无码免费毛片软件| 99久久无色码中文字幕人妻| 亚洲欧美伊人久久综合一区二区| 99国产精品久久久久久久成人热| 99久久国产热无码精品免费久久久久 | 狠狠色狠狠色综合久久| 国产精品视频久久久| 欧美亚洲国产精品久久高清| 国内精品久久久久影院免费| 久久精品久久久久观看99水蜜桃| 久久久精品午夜免费不卡| 亚洲国产另类久久久精品黑人| 九九热久久免费视频| 久久国产一区二区| 久久人人爽人人爽人人AV东京热| 久久狠狠一本精品综合网| 99久久99久久精品免费看蜜桃| 国产99久久久国产精品小说| 久久99精品国产麻豆婷婷| 国产成人精品久久二区二区| 日韩精品久久久久久免费| 精品国产乱码久久久久软件| 亚洲欧洲中文日韩久久AV乱码| 国产激情久久久久影院| 久久婷婷国产麻豆91天堂| 久久久久一区二区三区| 国产精品18久久久久久vr| 久久国产高潮流白浆免费观看| 日本WV一本一道久久香蕉| 亚洲AV伊人久久青青草原| 日韩欧美亚洲国产精品字幕久久久| 狠狠久久综合| 久久久艹| 久久久久久久久66精品片| 亚洲精品乱码久久久久久蜜桃图片|