DirectX5.0最新遊戲程式設計指南 DirectDraw篇 二、DirectDraw的體系 (轉)
二、DirectDraw的體系
多要求高的圖象。透過DirectDraw,使得對圖象敏感性的在速度和上都比在GDI上有了大大是提高,同時又保持了裝置無關性,DirectDraw提供的工具能完成如下的關鍵任務:
.操作多個顯示錶面
.直接存取影片
.頁翻轉
.後臺緩衝
.調色盤的管理
.剪下
另外,DirectDraw在執行時允許你查詢顯示的效能然後提供顯示裝置所能夠支援的最佳效能。
DirectDraw提供了基於COM的服務介面,使用最多的是IDirectDraw2、IDirectDrawSurface3、IDirectDrawPalette、IDirectDrawClipper和IDirectDrawVoPort。除了這些介面外,DirectDraw繼續支援以前版本的介面。
DirectDraw表徵了顯示介面卡,透過IDirectDraw和IDirectDraw2介面揭示其方法。在大多數情況下,你可以使用DirectDrawCreate來建立一個DirectDraw物件,也可以使用COM函式CoCreateInstance。
建立了DirectDraw物件後,你可以IDirectDraw2::CreateSurface方法為該物件建立表面。表面表徵了顯示硬體上的記憶體,既可以是影片記憶體,也可以是記憶體。DirectDraw透過其它的介面擴充套件了對調色盤、剪下及影片埠的支援。
1、DirectDraw的物件型別
DirectDraw物件既可以是一個單獨的物件,也可以是幾個物件的組合。最新版本的DirectDraw有以下型別的物件:
1.1、DirectDraw物件
DirectDraw物件是DirectDraw應用程式的核心,它是你建立的第一個物件。建立了DirectDraw物件後,可以在它的基礎上建立其它所有相關的物件。建立DirectDraw物件的函式是DirectDrawCreate。
1.2、DirectDrawSurface物件
DirectDrawSurface物件表徵了一塊記憶體區域,在該區域的資料將作為圖象顯示在螢幕上或移動到其它表面上。建立DirectDrawSurface物件的方法是 IDirectDraw2::CreateSurface,其它相關的方法可透過介面 IDirectDrawSurface, IDirectDrawSurface2和IDirectDrawSurface3得到。
1.3、DirectDrawPalette物件
DirectDrawPalette物件(有時也指的是“palette”)表徵了一個用於表面的16色或256色的調色盤,它包含了一系列描述同表面相關的RGB顏色索引值。建立DirectDrawPalette物件的方法是IDirectDraw2::CreatePalette。可以從介面IDirectDrawPalette獲取其它的方法。
1.4、DirectDrawClipper物件
DirectDrawClipper物件(有時指的是“clipper”)幫助你禁止向表面的某一位置或超出表面的位置塊寫資料,建立DirectDrawClipper的方法是 IDirectDraw2::CreateClipper,其它相關的方法可從介面 IDirectDrawClipper中獲取。
1.5、DirectDrawVideoPort物件
DirectDrawVideoPort物件表徵了一些系統只具有的影片埠硬體,該硬體允許直接訪問幀緩衝區而不需要訪問或使用PCI匯流排。
你可以先指定IDDVideoPortContainer標誌,再呼叫QueryInterface方法來建立 DirectDrawVideoPort物件。其它相關的方法可從介面IDDVideoPortContainer和IDirectDrawVideoPort中獲得。
2、硬體抽象層HAL(Hardware Abstraction Layer)
DirectDraw透過硬體抽象層HAL提供了裝置無關性。HAL是一種特殊的裝置介面,由裝置生產廠商提供。DirectDraw利用HAL直接在顯示裝置上工作。應用程式並不同HAL互動。裝置製造廠商以95下的16位或32位程式碼的形式提供HAL,在WindowsNT下,
HAL是32位程式碼。HAL可以是顯示程式的一部分,也可以是透過製造商定義的私有介面同顯示驅動程式通訊的動態連結庫DLL。
DirectDraw HAL由、板卡或OEM(Original Equipment Manufacturer)提供。HAL只提供了裝置相關性程式碼,時沒有模擬。如果一種功能不被硬體支援,HAL將不把該功能作為硬體效能的一部分處理。另外,HAL不對引數進行證實,DirectDraw會在呼叫HAL之前完成引數的證實工作。
3、軟體模擬(Software Emulation)
當硬體HAL不支援某一特性時,DirectDraw就嘗試用軟體來模擬這一特性。該模擬功能是由硬體模擬層HEL(Hardware-Emulation Layer)提供的。顯然,軟體模擬並不等同於硬體本身具有的特性。你可以用IDirectDraw2::GetCaps方法來查詢硬體所支援的特性。
有時,硬體固有的特性和軟體模擬二者的結合比單獨使用軟體模擬的速度還要慢。例如,如果顯示裝置驅動程式支援DirectDraw但不支援拉伸塊寫方式,當從影片記憶體表面拉伸或位塊傳輸時就會產生效能上的損失。因為影片記憶體通常比系統記憶體的速度要慢,在訪問影片記憶體時CPU必須要等待。因此,如果你的應用程式使用了硬體未能提供的特性,最好在系統記憶體中建立表面,以避免CPU訪問影片記憶體時出現的效能損失情況。
4、系統組成(System Integration)
下圖顯示了DirectDraw、圖形裝置介面GDI、硬體抽象層HAL、硬體模擬層HEL和硬體之間的關係。
如圖中所示,一個DirectDraw物件同GDI是並列關係,兩者都透過裝置相關抽象層訪問硬體。同GDI不同的是,DirectDraw只要有可能就會充分利用硬體提供的特有功能。如果硬體不支援某一特性,DirectDraw還會嘗試用HEL來模擬。DirectDraw也能以裝置上下文(Device Context)的形式提供表面記憶體,是你能夠使用GDI函式來處理表面物件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987897/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(二) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(四) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(三) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(一) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 四、DirectDraw高階特性 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 五、DirectDraw中其它的DirectDraw範例 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 二、第一個DirectDraw例項 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 一、DirectDraw的基本圖象概念 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 三、建立動畫 (轉)遊戲程式設計動畫
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 一、配置DirectX SDK (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 四、使用覆蓋表面 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 (轉)遊戲程式設計
- 詳細講解DirectDraw程式設計基礎(轉)程式設計
- 動畫程式編寫——DirectDraw之旅(3)(轉)動畫
- 藉助DirectDraw實現對水波的計算機模擬(轉)計算機
- DirectDraw6的初級程式設計應用 —— 配合例項講解,讓你迅速入門 (轉)程式設計
- 載入點陣圖檔案到DirectDraw的方法(轉)
- 基於DirectDraw的Gamma calibrator機制之探討 (轉)GAM
- 載入JPGE圖象檔案到DirectDraw的表面中(轉)
- windows10系統無法禁用DirectDraw的解決方法Windows
- Win10系統下DirectDraw導致閃屏怎麼解決Win10
- bash 程式設計指南(轉)程式設計
- 遊戲程式設計入門指南遊戲程式設計
- 獨立遊戲程式設計師生存指南遊戲程式設計師
- Delphi之快速設計(程式設計篇) (轉)程式設計
- 魔方遊戲程式設計 (轉)遊戲程式設計
- VB的API程式設計精粹(二) (轉)API程式設計
- Linux的shell程式設計(二)(轉)Linux程式設計
- 程式設計修養(二) (轉)程式設計
- Linux核心模組程式設計指南(轉)Linux程式設計
- 程式設計“初學者”入門指南 (轉)程式設計
- DirectX8程式設計指南-1 (轉)程式設計
- 元件-實體-系統 (ECS \CES)遊戲程式設計模型元件遊戲程式設計模型
- C++遊戲程式設計(一開篇)C++遊戲程式設計
- 遊戲分享系統設計第二步:分享系統的設計遊戲
- 送給初學者的禮物:遊戲程式設計起源連載二(轉)遊戲程式設計
- 《Emacs 快速指南》最新簡體中文版(轉)Mac
- 《Emacs快速指南》最新簡體中文版(轉)Mac