• <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ū)動模型,簡單來說就是GDI32直接調(diào)用內(nèi)核(Win32k.sys)內(nèi)的圖形引擎, 圖形引擎會再調(diào)用顯卡驅(qū)動, 對于顯卡驅(qū)動沒有實(shí)現(xiàn)的接口, 圖形引擎會用軟件實(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ū)動模型, 該模型從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)該會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),不同平臺會不一樣,如果是X86的PC, 很大程度上是在原有的Win32應(yīng)用層進(jìn)行封裝(只不過弄了個沙箱, 進(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)限, 只能訪問自己的安裝目錄)。兩者還有一個不一樣就是render的方式, 傳統(tǒng)的大部分還是基于GDI,而WinRT App是基于Xaml, 而Xaml又是基于D3D和Dxgi的。


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

            FeedBack:
            # re: GDI VS Dxgi
            2016-06-04 09:31 | pdkuionline
            寫得很好,又長知識了,謝謝!  回復(fù)  更多評論
              
            久久精品国产亚洲AV高清热| 18岁日韩内射颜射午夜久久成人| 一本大道久久a久久精品综合| 亚洲精品乱码久久久久久中文字幕 | 久久精品a亚洲国产v高清不卡| 模特私拍国产精品久久| 久久久久久久久久久免费精品| 久久亚洲精品视频| 亚洲一区二区三区日本久久九| 国产精品免费看久久久| 国内精品久久久久久99| 久久婷婷综合中文字幕| 俺来也俺去啦久久综合网| 精品999久久久久久中文字幕 | 久久久久九九精品影院| 久久综合狠狠综合久久97色| 欧美日韩成人精品久久久免费看| 人妻无码久久精品| 亚洲国产欧美国产综合久久| 亚洲午夜久久久影院| 国产精品久久国产精品99盘| 国产激情久久久久影院老熟女免费 | 国产亚州精品女人久久久久久 | 日本加勒比久久精品| 久久国产色av免费看| 久久久久久久久无码精品亚洲日韩| 久久66热人妻偷产精品9| 大蕉久久伊人中文字幕| 精品国产日韩久久亚洲| 99国产精品久久久久久久成人热| 成人午夜精品久久久久久久小说| 伊人精品久久久久7777| 精品久久久久久久无码 | 精品久久无码中文字幕| 久久无码一区二区三区少妇| 亚洲AV日韩精品久久久久久| 日本免费久久久久久久网站| 久久天天躁夜夜躁狠狠| 国产日韩欧美久久| 久久香蕉国产线看观看精品yw| 久久99久久无码毛片一区二区|