GDI与DirectX对比
生活随笔
收集整理的這篇文章主要介紹了
GDI与DirectX对比
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
原理對比:
GDI和DX在原理和框架設(shè)計上是完全不同的,有幾個重要的方面決定了它們是沒法結(jié)合。
1.現(xiàn)代的2D庫(包括GDI)都基于畫布來操作,或者叫位圖區(qū)域,而3D庫的操作對象只是場景和3D物體,沒有畫布概念,你在顯示器上看到的只是渲染流水線中的最后一個環(huán)節(jié)(光柵化)而已。
2.計算單元的設(shè)計理念不同。CPU是通用指令,能干所有事,包括3D運算,只是效率低而已;GPU只有有限的專用指令,它的目的是通過并行方式執(zhí)行大量的重復(fù)運算,且浮點運算是強項,在像素運算效率上比CPU高幾個數(shù)量級,但它并不通用。
3.動態(tài)計算。2D運算中有大量的文字字型生成、圖像特效計算過程,這些動態(tài)計算只能由CPU承擔(dān),硬件能加速的部分只局限于圖像的混合,換句話說,只有靜態(tài)圖像數(shù)據(jù)才能硬件加速。MMX指令雖然能起到加速作用,但性能提升幅度相比GPU來說簡直不值一提。
4.內(nèi)存。GPU運算只能在顯存中進行,CPU運算只能在系統(tǒng)內(nèi)存中進行,當(dāng)兩種內(nèi)存的數(shù)據(jù)需要互相傳輸時,內(nèi)存間的IO次數(shù)和傳輸量必須嚴格控制,過大的數(shù)據(jù)吞吐將嚴重影響硬件加速性能。對于3D應(yīng)用來說,CPU的功能通常是構(gòu)造并傳遞流水線指令、加載各種靜態(tài)圖片(紋理)、響應(yīng)鍵盤鼠標游戲外設(shè)消息,這里面數(shù)據(jù)吞吐量最大的就是圖片,游戲中通常在關(guān)口開始階段就把所有紋理一次性加載到顯存,而且在運行過程中很少或者幾乎沒有動態(tài)計算過程(比如文字處理)。
從上面可以看出,GDI/DX的差別到底有多大,為什么UI系統(tǒng)和游戲很少被融合,因為需求不同,尤其是第三點,UI中需要大量的動態(tài)計算,游戲恰好相反,必須盡可能減少動態(tài)計算。不是想融合就能融合的。 CPU與Gpu ?GDI與OpenGL與DirectX之間的區(qū)別 總結(jié):
????從總體上來說,dx和gdi設(shè)計的出發(fā)點不同,dx主要是為gpu來設(shè)計的,他需要強烈的硬件支持,并且,它非常針對游戲設(shè)計,因為游戲和普通的2d客戶端對于CPU來說的計算量差異很大,所以,游戲一方面需要硬件支持,另外又符合某種(如顯卡)所擅長的計算模式;而gdi是為廣譜設(shè)計的,2d客戶端可以用,游戲也可用,只不過游戲運行起來會很卡,因為cpu不適應(yīng)游戲場景這種計算,gdi沒有充分利用gpu,于是有了dx。
????dx需要相應(yīng)的軟件和硬件來支持,否則不能運行,而gdi則兼容絕大部分硬件,我所知道的還沒有不支持gdi操作的,即使是沒有安裝顯卡驅(qū)動,一樣可以輸出圖形,這可以在未安裝顯卡驅(qū)動的顯示器上看到;
????dx在用戶模式下分解繪圖操作,從而直接交給gpu去繪制,這樣,gpu不能踢回(踢回見windows圖形編程一書第二章)dx傳過來的繪制操作,因為事前已經(jīng)確定好顯卡驅(qū)動可以做哪些繪制了;而gdi則是以商量的形式和顯卡驅(qū)動交互,顯卡驅(qū)動在繁忙的時候可以踢回gre(同見windows圖形編程)發(fā)送的請求,有g(shù)re來分解gdi繪圖操作。
????最后,就目前來說,gdi的一些底層實現(xiàn),已經(jīng)慢慢轉(zhuǎn)向dx來加速了,所以二者的交集也在越來越大。
1.現(xiàn)代的2D庫(包括GDI)都基于畫布來操作,或者叫位圖區(qū)域,而3D庫的操作對象只是場景和3D物體,沒有畫布概念,你在顯示器上看到的只是渲染流水線中的最后一個環(huán)節(jié)(光柵化)而已。
2.計算單元的設(shè)計理念不同。CPU是通用指令,能干所有事,包括3D運算,只是效率低而已;GPU只有有限的專用指令,它的目的是通過并行方式執(zhí)行大量的重復(fù)運算,且浮點運算是強項,在像素運算效率上比CPU高幾個數(shù)量級,但它并不通用。
3.動態(tài)計算。2D運算中有大量的文字字型生成、圖像特效計算過程,這些動態(tài)計算只能由CPU承擔(dān),硬件能加速的部分只局限于圖像的混合,換句話說,只有靜態(tài)圖像數(shù)據(jù)才能硬件加速。MMX指令雖然能起到加速作用,但性能提升幅度相比GPU來說簡直不值一提。
4.內(nèi)存。GPU運算只能在顯存中進行,CPU運算只能在系統(tǒng)內(nèi)存中進行,當(dāng)兩種內(nèi)存的數(shù)據(jù)需要互相傳輸時,內(nèi)存間的IO次數(shù)和傳輸量必須嚴格控制,過大的數(shù)據(jù)吞吐將嚴重影響硬件加速性能。對于3D應(yīng)用來說,CPU的功能通常是構(gòu)造并傳遞流水線指令、加載各種靜態(tài)圖片(紋理)、響應(yīng)鍵盤鼠標游戲外設(shè)消息,這里面數(shù)據(jù)吞吐量最大的就是圖片,游戲中通常在關(guān)口開始階段就把所有紋理一次性加載到顯存,而且在運行過程中很少或者幾乎沒有動態(tài)計算過程(比如文字處理)。
從上面可以看出,GDI/DX的差別到底有多大,為什么UI系統(tǒng)和游戲很少被融合,因為需求不同,尤其是第三點,UI中需要大量的動態(tài)計算,游戲恰好相反,必須盡可能減少動態(tài)計算。不是想融合就能融合的。 CPU與Gpu ?GDI與OpenGL與DirectX之間的區(qū)別 總結(jié):
????從總體上來說,dx和gdi設(shè)計的出發(fā)點不同,dx主要是為gpu來設(shè)計的,他需要強烈的硬件支持,并且,它非常針對游戲設(shè)計,因為游戲和普通的2d客戶端對于CPU來說的計算量差異很大,所以,游戲一方面需要硬件支持,另外又符合某種(如顯卡)所擅長的計算模式;而gdi是為廣譜設(shè)計的,2d客戶端可以用,游戲也可用,只不過游戲運行起來會很卡,因為cpu不適應(yīng)游戲場景這種計算,gdi沒有充分利用gpu,于是有了dx。
????dx需要相應(yīng)的軟件和硬件來支持,否則不能運行,而gdi則兼容絕大部分硬件,我所知道的還沒有不支持gdi操作的,即使是沒有安裝顯卡驅(qū)動,一樣可以輸出圖形,這可以在未安裝顯卡驅(qū)動的顯示器上看到;
????dx在用戶模式下分解繪圖操作,從而直接交給gpu去繪制,這樣,gpu不能踢回(踢回見windows圖形編程一書第二章)dx傳過來的繪制操作,因為事前已經(jīng)確定好顯卡驅(qū)動可以做哪些繪制了;而gdi則是以商量的形式和顯卡驅(qū)動交互,顯卡驅(qū)動在繁忙的時候可以踢回gre(同見windows圖形編程)發(fā)送的請求,有g(shù)re來分解gdi繪圖操作。
????最后,就目前來說,gdi的一些底層實現(xiàn),已經(jīng)慢慢轉(zhuǎn)向dx來加速了,所以二者的交集也在越來越大。
總結(jié)
以上是生活随笔為你收集整理的GDI与DirectX对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Directx发展史
- 下一篇: Mathtype和word关联