共用方式為


IDirect3D9::CreateDevice 方法 (d3d9helper.h)

建立裝置來代表顯示配接器。

語法

HRESULT CreateDevice(
  [in]          UINT                  Adapter,
  [in]          D3DDEVTYPE            DeviceType,
  [in]          HWND                  hFocusWindow,
  [in]          DWORD                 BehaviorFlags,
  [in, out]     D3DPRESENT_PARAMETERS *pPresentationParameters,
  [out, retval] IDirect3DDevice9      **ppReturnedDeviceInterface
);

參數

[in] Adapter

類型: UINT

代表顯示配接器的序號。 D3DADAPTER_DEFAULT 一律是主要顯示配接器。

[in] DeviceType

類型: D3DDEVTYPE

代表所需裝置類型的 D3DDEVTYPE 列舉類型成員。 如果所需的裝置類型無法使用,方法將會失敗。

[in] hFocusWindow

類型: HWND

當應用程式從前景模式切換到背景模式時,焦點視窗會警示 Direct3D。 請參閱<備註>。

  • 若為全螢幕模式,指定的視窗必須是最上層視窗。
  • 若為視窗模式 ,只有當pPresentationParameters 的 hDeviceWindow 成員設定為有效的非 Null 值時,此參數才會是Null

[in] BehaviorFlags

類型: DWORD

控制裝置建立的一或多個選項群組合。 如需詳細資訊,請參閱 D3DCREATE

[in, out] pPresentationParameters

類型: D3DPRESENT_PARAMETERS*

D3DPRESENT_PARAMETERS結構的指標,描述要建立之裝置的呈現參數。 如果 BehaviorFlags 指定 D3DCREATE_ADAPTERGROUP_DEVICE,pPresentationParameters 是陣列。 不論存在的頭部數目為何,系統都會自動建立一個深度/樣板表面。

針對 Windows 2000 和 Windows XP,全螢幕裝置顯示重新整理速率會依照下列順序設定:

  1. 如果裝置支援,則為使用者指定的非零 ForcedRefreshRate 登錄機碼。
  2. 簡報參數中應用程式指定的非零重新整理速率值。
  3. 如果裝置支援,則為最新桌面的重新整理速率。
  4. 如果裝置支援,則為 75hz。
  5. 如果裝置支援,則為 60hz。
  6. 裝置預設值。
不支援的重新整理率預設為其下方最接近支援的重新整理速率。 例如,如果應用程式指定 63 個 hertz,則會使用 60 個 hertz。 不支援低於 57 個子系的重新整理率。

pPresentationParameters 同時是輸入和輸出參數。 呼叫這個方法可能會變更數個成員,包括:

  • 如果在呼叫 方法之前,BackBufferCount、BackBufferWidth 和 BackBufferHeight 為 0,則會在方法傳回時變更它們。
  • 如果在呼叫 方法之前,BackBufferFormat 等於 D3DFMT_UNKNOWN ,當方法傳回時,它將會變更。

[out, retval] ppReturnedDeviceInterface

類型: IDirect3DDevice9**

傳回 之 IDirect3DDevice9 介面的指標位址,代表已建立的裝置。

傳回值

類型: HRESULT

如果方法成功,傳回值會D3D_OK。 如果方法失敗,傳回值可以是下列其中一項:D3DERR_DEVICELOST、D3DERR_INVALIDCALL、D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY。

備註

這個方法會傳回完整運作的裝置介面、將 設定為所需的顯示模式 (或視窗化) ,並使用適當的背景緩衝區配置。 若要開始轉譯,應用程式只需要建立和設定深度緩衝區, (假設 EnableAutoDepthStencil 在D3DPRESENT_PARAMETERS) 為FALSE

當您建立 Direct3D 裝置時,您會提供兩個不同的視窗參數:焦點視窗 (hFocusWindow) 和裝置視窗 (D3DPRESENT_PARAMETERS) 中的 hDeviceWindow。 每個視窗的用途如下:

  • 當應用程式從前景模式切換到背景模式 (時,焦點視窗會透過 Alt-Tab、按一下滑鼠或一些其他方法) ,警示 Direct3D。 應用程式所建立的每個裝置都會共用單一焦點視窗。
  • 裝置視窗會決定螢幕上後端緩衝區的位置和大小。 當後端緩衝區內容在 Present期間複製到前端緩衝區時,Direct3D 會使用此方式。
在處理WM_CREATE期間,不應該執行這個方法。 處理WM_CREATE時,應用程式絕對不應該將視窗控制碼傳遞至 Direct3D。 建立、釋放或重設裝置的任何呼叫,都必須使用與焦點視窗視窗視窗程式相同的執行緒來完成。

請注意,D3DCREATE_HARDWARE_VERTEXPROCESSING、D3DCREATE_MIXED_VERTEXPROCESSING和D3DCREATE_SOFTWARE_VERTEXPROCESSING都是互斥旗標,而且呼叫此方法時必須至少指定其中一個頂點處理旗標。

只有在簡報參數中指定D3DPRESENTFLAG_LOCKABLE_BACKBUFFER時,才會鎖定建立為裝置一部分的後端緩衝區。 (多重取樣後端緩衝區和深度表面永遠不會鎖定。)

必須從使用此方法建立裝置的相同執行緒呼叫 ResetIUnknownTestCoown 方法。

呼叫 CreateDeviceResetCreateAdditionalSwapChain時,可以針對視窗模式背景緩衝區格式指定D3DFMT_UNKNOWN。 這表示應用程式不需要在呼叫 CreateDevice 進行視窗模式之前查詢目前的桌面格式。 針對全螢幕模式,必須指定背景緩衝區格式。

如果您嘗試在0x0大小視窗上建立裝置, CreateDevice 將會失敗。

需求

   
目標平台 Windows
標頭 d3d9helper.h (包含 D3D9.h)
程式庫 D3D9.lib

另請參閱

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

Multihead (Direct3D 9)

重設