Condividi tramite


Funzione Direct3DCreate9Ex (d3d9.h)

Crea un oggetto IDirect3D9Ex e ne restituisce un'interfaccia.

Sintassi

HRESULT Direct3DCreate9Ex(
  [in]  UINT         SDKVersion,
  [out] IDirect3D9Ex **unnamedParam2
);

Parametri

[in] SDKVersion

Tipo: UINT

Il valore di questo parametro deve essere D3D_SDK_VERSION. Vedere la sezione Osservazioni.

[out] unnamedParam2

Tipo: IDirect3D9Ex**

Indirizzo di un puntatore a un'interfaccia IDirect3D9Ex che rappresenta l'oggetto IDirect3D9Ex creato. Se la funzione ha esito negativo, viene inserito null qui.

Valore restituito

Tipo: HRESULT

  • D3DERR_NOTAVAILABLE se le funzionalità Direct3DEx non sono supportate (non è installato alcun driver WDDM) o se SDKVersion non corrisponde alla versione della DLL.
  • D3DERR_OUTOFMEMORY se vengono rilevate condizioni di memoria insufficiente durante la creazione dell'oggetto enumeratore.
  • S_OK se la creazione dell'oggetto enumeratore ha esito positivo.

Commenti

L'oggetto IDirect3D9Ex è il primo oggetto creato dall'applicazione e l'ultimo oggetto rilasciato dall'applicazione. Le funzioni per l'enumerazione e il recupero delle funzionalità di un dispositivo sono accessibili tramite l'oggetto IDirect3D9Ex . Ciò consente alle applicazioni di selezionare i dispositivi senza crearli.

L'interfaccia IDirect3D9Ex supporta l'enumerazione di schede di visualizzazione attive e consente la creazione di oggetti IDirect3D9Ex . Se l'utente aggiunge dinamicamente schede (aggiungendo dispositivi al desktop o eseguendo l'ancoraggio rapido di un portatile), questi dispositivi non vengono inclusi nell'enumerazione . La creazione di una nuova interfaccia IDirect3D9Ex espone i nuovi dispositivi.

Passare il flag D3D_SDK_VERSION a questa funzione per assicurarsi che i file di intestazione usati nell'applicazione compilata corrispondano alla versione delle DLL di runtime installate. D3D_SDK_VERSION viene modificato nel runtime solo quando un'intestazione o un'altra modifica del codice richiederebbe la ricompilazione dell'applicazione. Se questa funzione ha esito negativo, indica che le versioni del file di intestazione e la DLL di runtime non corrispondono.

NotaDirect3DCreate9Ex è supportato solo in Windows Vista, Windows Server 2008 e Windows 7. Le versioni precedenti della libreria D3D9.dll non includono Direct3D9Ex e Direct3DCreate9Ex.
 

Esempio

Creazione di un oggetto IDirect3D9Ex.

L'esempio di codice seguente illustra come creare un oggetto IDirect3D9Ex usando Direct3DCreate9Ex. Questo esempio usa quindi l'oggetto IDirect3D9Ex per creare un oggetto IDirect3DDevice9Ex , che viene restituito come parametro out alla funzione.

HRESULT InitD3D9Ex( /* IN */ HWND hWnd, /* OUT */ IDirect3DDevice9Ex ** ppD3DDevice )
{
    HRESULT hr = E_FAIL;
    IDirect3D9Ex * pD3D = NULL;
    IDirect3DDevice9Ex * pDevice = NULL;

    if(ppD3DDevice == NULL)
    {
        return hr;
    }
    
    // Create the D3D object, which is needed to create the D3DDevice.
    if(FAILED(hr = Direct3DCreate9Ex( D3D_SDK_VERSION, &pD3D )))
    {
        *ppD3DDevice = NULL;
        return hr;
    }
        
        
    // Set up the structure used to create the D3DDevice. 
    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    // Create the Direct3D device. 
    if( FAILED( hr = pD3D->CreateDeviceEx( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, NULL, &pDevice ) ) )

    {
        *ppD3DDevice = NULL;
        return hr;
    }

    // Device state would normally be set here

    *ppD3DDevice = pDevice;

    return hr;
}

Verifica della presenza di Direct3D9Ex.

L'esempio di codice seguente illustra come verificare l'esistenza di Direct3DCreate9Ex ed eseguire l'errore nelle piattaforme che non lo supportano. Puoi usare questo codice in un'utilità di avvio del gioco per presentare un messaggio di errore all'utente o per caricare un renderer che usa l'interfaccia IDirect3D9 .

Per verificare la presenza di Direct3DCreate9Ex, questo esempio carica in modo esplicito la libreria D3D9.dll usando la funzione LoadLibrary Win32. L'esempio assegna quindi l'indirizzo di Direct3DCreate9Ex a un puntatore usando la funzione GetProcAddress Win32. Se Direct3DCreate9Ex non è presente, il puntatore alla funzione è NULL e l'esempio di codice restituisce un valore HRESULTERROR_NOT_SUPPORTED. Tuttavia, se Direct3DCreate9Ex è presente, restituisce un valore S_OK .

HRESULT CheckD3D9Ex( void )
{
    HRESULT hr = E_FAIL;
    HMODULE libHandle = NULL;

    // Manually load the d3d9.dll library.
    libHandle = LoadLibrary(L"d3d9.dll");

    if(libHandle != NULL)
    {
        // Define a function pointer to the Direct3DCreate9Ex function.
        typedef HRESULT (WINAPI *LPDIRECT3DCREATE9EX)( UINT, void **);

        // Obtain the address of the Direct3DCreate9Ex function. 
        LPDIRECT3DCREATE9EX Direct3DCreate9ExPtr = NULL;
            
        Direct3DCreate9ExPtr = (LPDIRECT3DCREATE9EX)GetProcAddress( libHandle, "Direct3DCreate9Ex" );

        if ( Direct3DCreate9ExPtr != NULL)
        {
            // Direct3DCreate9Ex is supported.
            hr = S_OK;
        }
        else
        {
            // Direct3DCreate9Ex is not supported on this
            // operating system.
            hr = ERROR_NOT_SUPPORTED;
        }

        // Free the library.
        FreeLibrary( libHandle );

    }

    
    return hr;
}

Si noti che è possibile eseguire il cast di un puntatore di interfaccia IDirect3DDevice9Ex a un puntatore all'interfaccia IDirect3DDevice9 perché la versione estesa viene ereditata. In questo modo è possibile usare il dispositivo esteso con codice Direct3D 9 esistente, tranne dove il nuovo dispositivo modifica la semantica dell'interfaccia. Per altre informazioni sulle differenze tra le due interfacce, vedere Modifiche al comportamento del dispositivo.

Requisiti

   
Piattaforma di destinazione Windows
Intestazione d3d9.h
Libreria D3d9.lib
DLL D3d9.dll

Vedi anche

Funzioni Direct3D