共用方式為


IDirect3D9::CreateDevice 方法 (d3d9.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. 如果裝置支援,則為 75 hertz。
  5. 如果裝置支援,則為 60 hertz。
  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。

備註

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

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

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

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

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

必須從使用此方法建立裝置的相同線程呼叫 ResetIUnknownTestCocolLevel 方法。

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

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

規格需求

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

另請參閱

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

Multihead (Direct3D 9)

重設