天天看點

DirectX9 學習(1)

一般的Direct3D程式通常有以下5步

(1)初始化Direct3D

所有的Direct3D程式,都是從建立一個IDirect3D9 interface 開始,以這個接口的->Release()結束。這個接口可以說代表了整個Direct3D程式的生命周期。他也是其他一系列Direct3D接口的祖先接口。

在DirectX9中,我們通過 Direct3DCreate9 方法來擷取一個此接口的指針。

IDirect3D9 * Direct3DCreate9( UINT SDKVersion); 

參數 UINT SDKVersion 的值永遠都是 D3D_SDK_VERSION

如果成功,則傳回一個IDirect3D9接口的指針,否則傳回NULL

IDirect3D9 *D3dObj;

mpD3dObj = Direct3DCreate9(D3D_SDK_VERSION);

if(D3dObj == NULL)

//...錯誤處理 

最後程式結束時,需要release

if(D3dObj != NULL)

D3dObj->Release(); 

(2)建立一個Direct3D Device

Direct3D device被封裝到了 IDirect3DDevice9中,我們通過執行個體化此接口來代表我們的電腦的顯示卡。一般隻有一個此接口的執行個體,因為通常我們的電腦隻有一塊點卡,目前也可以有更多。

此接口異常強大,他有許多方法,可以檢測圖形裝置支援的功能、操作3D世界、将資料渲染到螢幕上等功能。

為了得到此接口的執行個體,我們必須調用上面我們獲得的IDirect3D9的CreateDevice方法。

HRESULT CreateDevice( UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow,

DWORD BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters,

IDirect3DDevice9 ** ppReturnedDeviceInterface); 

UINT Adapter : 一個數字參數,代表了我們使用哪個顯示卡,設為D3DADAPTER_DEFAULT使用主顯示卡

D3DDEVTYPE DeviceType : D3DDEVTYPE是個enum,包括以下值

typedef enum D3DDEVTYPE

{

D3DDEVTYPE_HAL = 1,

D3DDEVTYPE_NULLREF = 4,

D3DDEVTYPE_REF = 2,

D3DDEVTYPE_SW = 3,

D3DDEVTYPE_FORCE_DWORD = 0xffffffff,

} D3DDEVTYPE, *LPD3DDEVTYPE; 

如果指定的device type 不可用,此方法會失敗.如果裝置支援一般使用D3DDEVTYPE_HAL

DWORD BehaviorFlags : 這裡我們使用D3DCREATE_HARDWARE_VERTEXPROCESSING,還可以有其他組合,參見SDK

然後就是D3DPRESENT_PARAMETERS 結構體的指針,描述了索要建立的Device的一些屬性

繼續閱讀