天天看點

DirectDraw VS GDI

  GDI,是微軟提供給應用開發人員提供的一個圖形程式設計接口。它提供了很多裝置無關性的圖形接口,這些接口包含了從字型處理到位圖操作幾乎所有的功能。GDI實作這些功能是通過一個被稱為顯示驅動接口(DDI)的驅動程式來操作具體的圖形硬體。DDI 層中的功能是由硬體生産商開發的,他們為自己的産品提供顯示驅動程式。在顯示驅動程式中,所有的硬體功能都被隔離(如下圖)。是以如果你想對底層圖形硬體操作,那GDI就無能為力了(如直接通路顯存之類的操作)。正因為GDI有此些缺陷,微軟才開發一套應用于多媒體和遊戲開發的Directx技術。其中DirectDraw又是DirectX重要組成部分,那什麼是DirectDraw呢?

  如果你是一個做遊戲開發人員,那麼對DirectDraw一定不會陌生了!DirectDraw 是 DirectX 應用程式程式設計接口(API)的一個部件.它使得你可以直接地對顯存操作,硬體位圖映射(hardware blitter).支援硬體覆寫及換頁技術(flipping surface),同時它又相容GDI程式設計。

DirectDraw VS GDI

   DirectDraw 采用HAL/HEL 結構。(如上圖)當應用程式調用DirectDraw 時,它将根據各元件的能力自動确定是要調用與硬體相關的HAL 功能還是調用一般性的HEL 功能(對于DirectDraw 來說,HEL 功能基本上是保持不變的,而HAL 功能則與具體的硬體有關)。如果沒有提定要用HAL 功能還是HEL 功能,DirectDraw 通常會使用HAL,因為HAL能夠更好地利用硬體特性。如果指定的HAL 功能沒有找着,則使用相應的HEL 功能代替。HEL 有時會調用GDI 的一些功能,而有時則直接通路硬體以完成一些簡單的并與具體硬體無關的任務,如記憶體通路等。偶爾HAL和HEL 也會調用一個被稱為是VFLATD 的驅動程式層以通路顯示卡上的記憶體。VFLATD 把一些顯示卡的段記憶體結構變成線性結構。如果想深入了解的話可以看一下《Inside-DirectX從入門到精通》。

繼續閱讀