一般的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的一些屬性