Condividi tramite


Metodo IDirect3D9::CreateDevice (d3d9.h)

Crea un dispositivo per rappresentare la scheda di visualizzazione.

Sintassi

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

Parametri

[in] Adapter

Tipo: UINT

Numero ordinale che indica la scheda di visualizzazione. D3DADAPTER_DEFAULT è sempre la scheda di visualizzazione primaria.

[in] DeviceType

Tipo: D3DDEVTYPE

Membro del D3DDEVTYPE tipo enumerato che indica il tipo di dispositivo desiderato. Se il tipo di dispositivo desiderato non è disponibile, il metodo avrà esito negativo.

[in] hFocusWindow

Tipo: HWND

La finestra dello stato attivo avvisa Direct3D quando un'applicazione passa dalla modalità in primo piano alla modalità in background. Vedere la sezione Osservazioni.

  • Per la modalità schermo intero, la finestra specificata deve essere una finestra di primo livello.
  • Per la modalità finestra, questo parametro può essere NULL solo se il membro hDeviceWindow di pPresentationParameters è impostato su un valore null valido, non NULL.

[in] BehaviorFlags

Tipo: DWORD

Combinazione di una o più opzioni che controllano la creazione del dispositivo. Per altre informazioni, vedere D3DCREATE.

[in, out] pPresentationParameters

Tipo: D3DPRESENT_PARAMETERS*

Puntatore a una struttura D3DPRESENT_PARAMETERS, che descrive i parametri di presentazione per il dispositivo da creare. Se BehaviorFlags specifica D3DCREATE_ADAPTERGROUP_DEVICE, pPresentationParameters è una matrice. Indipendentemente dal numero di teste esistenti, viene creata automaticamente una sola superficie di profondità/stencil.

Per Windows 2000 e Windows XP, la frequenza di aggiornamento dello schermo intero del dispositivo è impostata nell'ordine seguente:

  1. Chiave del Registro di sistema Nonzero ForcedRefreshRate specificata dall'utente, se supportata dal dispositivo.
  2. Valore della frequenza di aggiornamento diverso da zero specificato dall'applicazione nel parametro presentation.
  3. Frequenza di aggiornamento del desktop più recente, se supportata dal dispositivo.
  4. 75hz se supportato dal dispositivo.
  5. 60hz se supportato dal dispositivo.
  6. Impostazione predefinita del dispositivo.
Per impostazione predefinita, una frequenza di aggiornamento non supportata sarà la frequenza di aggiornamento supportata più vicina al di sotto di essa. Ad esempio, se l'applicazione specifica 63hz, verranno utilizzati 60hz. Non ci sono frequenze di aggiornamento supportate al di sotto di 57hz.

pPresentationParameters è sia un input che un parametro di output. La chiamata a questo metodo può modificare diversi membri, tra cui:

  • Se BackBufferCount, BackBufferWidth e BackBufferHeight sono 0 prima che venga chiamato il metodo, verranno modificati quando il metodo restituisce.
  • Se BackBufferFormat è uguale a D3DFMT_UNKNOWN prima che venga chiamato il metodo, verrà modificato al termine del metodo.

[out, retval] ppReturnedDeviceInterface

Tipo: IDirect3DDevice9**

Indirizzo di un puntatore all'interfaccia di IDirect3DDevice9 restituita, che rappresenta il dispositivo creato.

Valore restituito

Tipo: HRESULT

Se il metodo ha esito positivo, il valore restituito è D3D_OK. Se il metodo ha esito negativo, il valore restituito può essere uno dei seguenti: D3DERR_DEVICELOST, D3DERR_INVALIDCALL, D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY.

Osservazioni

Questo metodo restituisce un'interfaccia del dispositivo completamente funzionante, impostata sulla modalità di visualizzazione richiesta (o finestra) e allocata con i buffer back appropriati. Per iniziare il rendering, l'applicazione deve solo creare e impostare un buffer di profondità (presupponendo che EnableAutoDepthStencil sia FALSE in D3DPRESENT_PARAMETERS).

Quando si crea un dispositivo Direct3D, si forniscono due parametri di finestra diversi: una finestra dello stato attivo (hFocusWindow) e una finestra del dispositivo (hDeviceWindow in D3DPRESENT_PARAMETERS). Lo scopo di ogni finestra è:

  • La finestra dello stato attivo avvisa Direct3D quando un'applicazione passa dalla modalità in primo piano alla modalità in background (tramite ALT-TAB, un clic del mouse o un altro metodo). Una singola finestra dello stato attivo viene condivisa da ogni dispositivo creato da un'applicazione.
  • La finestra del dispositivo determina la posizione e le dimensioni del buffer nascosto sullo schermo. Questa operazione viene usata da Direct3D quando il contenuto del buffer nascosto viene copiato nel buffer anteriore durante Presente.
Questo metodo non deve essere eseguito durante la gestione di WM_CREATE. Un'applicazione non deve mai passare un handle di finestra a Direct3D durante la gestione delle WM_CREATE. Qualsiasi chiamata per creare, rilasciare o reimpostare il dispositivo deve essere eseguita usando lo stesso thread della procedura della finestra della finestra messa a fuoco.

Si noti che D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING e D3DCREATE_SOFTWARE_VERTEXPROCESSING sono flag che si escludono a vicenda e almeno uno di questi flag di elaborazione dei vertici deve essere specificato quando si chiama questo metodo.

I buffer di backup creati come parte del dispositivo sono bloccabili solo se D3DPRESENTFLAG_LOCKABLE_BACKBUFFER viene specificato nei parametri di presentazione. I buffer back multicampionato e le superfici di profondità non sono mai bloccabili.

I metodi Reset, IUnknowne TestCooperativeLevel devono essere chiamati dallo stesso thread che usa questo metodo per creare un dispositivo.

D3DFMT_UNKNOWN può essere specificato per il formato back buffer in modalità finestra quando si chiama CreateDevice, Resete CreateAdditionalSwapChain. Ciò significa che l'applicazione non deve eseguire query sul formato desktop corrente prima di chiamare CreateDevice per la modalità finestra. Per la modalità schermo intero, è necessario specificare il formato back buffer.

Se si tenta di creare un dispositivo in una finestra di dimensioni 0x0, CreateDevice avrà esito negativo.

Fabbisogno

Requisito Valore
piattaforma di destinazione Finestre
intestazione d3d9.h (include D3D9.h)
libreria D3D9.lib

Vedere anche

D3DDEVICE_CREATION_PARAMETERS

Direct3DCreate9

IDirect3D9

multihead (Direct3D 9)

Reimposta