directx(directDraw)與GDI

GDI(Graphics Deveice Interface,圖形設備接口),利用GDI編程,可以不考慮硬件的具體特性,直接調用Windows API中的圖形處理函數處理當前DC即可。這的確很方便,但卻是以降低處理速度爲代價。因爲它不能直接訪問硬件,需要通過操作系統間接訪問。
Microfost 爲迎合市場需求,推出了DirectX。它既能像Windows GDI一樣使用方便,又可以直接對硬件抽象層HALL(Hardware Abstranaction Layer)操作,速度比GDI快得多。DirectX 主要包括 DirectDraw Direct3D DirectMusic DirectPaly DirectInput DirectSetup七部分。
也就是說DirectX是GDI的升級。

雖然兩者都可以用來2D繪圖,但差別還是很大的。

DirectDraw的功能上要遠遠大於GDI,因爲DirectDraw多用於遊戲開發,GDI或GDI+多用於軟件開發。繪圖功能就可想而知了。
而且GDI是用於Windows底層API作爲基本繪圖方法,比如Windows中的窗口都是GDI輸出的,如果你學過SDK(API)編程的化,對此會很熟悉,比如你看看任務管理器的進程,幾乎所有進程都需要加載一個重要的dll,那就是“gdi32.dll”.
而directdraw則多用於遊戲中或媒體中,用於對圖形操作更細膩的領域,當然目前更廣泛的技術是Direct3D或OpenGL,當然directdraw也是DirectX中不可缺少的一部分。
總結一下。windows系統的繪圖要求並不高,因此gdi是這裏的老大,但對於專業的遊戲或圖形開發商,微軟有創造了DirectX(其中包括directdraw)來滿足他們的要求。

 

GDI爲計算機用戶和計算機硬件之間提供了一個抽象層,在此層的基礎上,用戶可以通過簡單的調用Win32的圖形函數進行圖形顯示。
GDI的一大缺憾就是,它不是爲具有高表現力的多媒體軟件和遊戲而設計的,設計者們開發它的主要用途是運行商業應用軟件諸如:Word字處理軟件、Excel電子表格、Explorer瀏覽器等。GDI只提供了訪問系統主存的能力,而不提供直接訪問顯存的能力,並不能從具有某些加速特性的顯卡中獲得其優良特性。簡而言之,GDI對絕大多數的商業軟件來說是相當完美的,但對於多媒體軟件和遊戲來說,它卻是低速和低效的。
另一方面,DirectDraw可以提供給開發者代表了真實顯示內存的繪圖頁面。這意味着,只要你使用了DirectDraw,你就可以直接操縱顯卡上的內存,圖形顯示變得出奇的快速。而且這些頁面代表了顯存中連續的內存塊,使得在頁面中尋址和讀寫變得非常方便。

一句話,DirectDraw就是GDI的升級版 。

 

ddraw提供了直接顯存操作功能,  
  但是對於集成顯卡的意義不大,因爲它使用的是內存作爲顯存來使用,顯卡和內存之間的通訊是浪費時間的  
   
  另外從描述上看你改造後的算法已經不能算作是GDI操作了,而是直接內存地址操作  
   
  因此同樣是內存之間的操作,   效率上不會有太大的區別的   
  獨立顯卡不同,ddraw可以直接操作顯存,而gdi或者你的辦法是對內存處理,然後從內存copy數據到顯存,自然慢

 

 更多內容請訪問:www.b2notes.com

使用asm分析jar包加載類

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章