Partager via


Fonction Direct3DCreate9Ex (d3d9.h)

Crée un objet IDirect3D9Ex et lui retourne une interface.

Syntaxe

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

Paramètres

[in] SDKVersion

Type : UINT

La valeur de ce paramètre doit être D3D_SDK_VERSION. Consultez la section Notes.

[out] unnamedParam2

Type : IDirect3D9Ex**

Adresse d’un pointeur vers une interface IDirect3D9Ex , représentant l’objet IDirect3D9Ex créé. Si la fonction échoue, null est inséré ici.

Valeur retournée

Type : HRESULT

  • D3DERR_NOTAVAILABLE si les fonctionnalités Direct3DEx ne sont pas prises en charge (aucun pilote WDDM n’est installé) ou si le SDKVersion ne correspond pas à la version de la DLL.
  • D3DERR_OUTOFMEMORY si des conditions de mémoire insuffisante sont détectées lors de la création de l’objet énumérateur.
  • S_OK si la création de l’objet énumérateur réussit.

Notes

L’objet IDirect3D9Ex est le premier objet créé par l’application et le dernier objet libéré par l’application. Les fonctions d’énumération et de récupération des fonctionnalités d’un appareil sont accessibles via l’objet IDirect3D9Ex . Cela permet aux applications de sélectionner des appareils sans les créer.

L’interface IDirect3D9Ex prend en charge l’énumération des cartes d’affichage actives et permet la création d’objets IDirect3D9Ex . Si l’utilisateur ajoute dynamiquement des adaptateurs (soit en ajoutant des appareils au bureau, soit en plaçant un ordinateur portable à chaud), ces appareils ne sont pas inclus dans l’énumération. La création d’une interface IDirect3D9Ex expose les nouveaux appareils.

Transmettez l’indicateur D3D_SDK_VERSION à cette fonction pour vous assurer que les fichiers d’en-tête utilisés dans l’application compilée correspondent à la version des DLL du runtime installées. D3D_SDK_VERSION est modifié dans le runtime uniquement lorsqu’un en-tête ou un autre changement de code nécessite la reconstruction de l’application. Si cette fonction échoue, cela indique que les versions du fichier d’en-tête et de la DLL runtime ne correspondent pas.

RemarqueDirect3DCreate9Ex est pris en charge uniquement dans Windows Vista, Windows Server 2008 et Windows 7. Les versions antérieures de la bibliothèque D3D9.dll n’incluent pas Direct3D9Ex et Direct3DCreate9Ex.
 

Exemples

Création d’un objet IDirect3D9Ex.

L’exemple de code suivant montre comment créer un objet IDirect3D9Ex à l’aide de Direct3DCreate9Ex. Cet exemple utilise ensuite l’objet IDirect3D9Ex pour créer un objet IDirect3DDevice9Ex , qui est retourné en tant que paramètre out à la fonction.

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;
}

Vérification de Direct3D9Ex.

L’exemple de code suivant montre comment case activée pour l’existence de Direct3DCreate9Ex et échouer sur les plateformes qui ne le prennent pas en charge. Vous pouvez utiliser ce code dans un lanceur de jeux pour présenter un message d’erreur à l’utilisateur ou pour charger un convertisseur qui utilise l’interface IDirect3D9 à la place.

Pour case activée pour Direct3DCreate9Ex, cet exemple charge explicitement la bibliothèque D3D9.dll à l’aide de la fonction Win32 LoadLibrary. L’exemple affecte ensuite l’adresse de Direct3DCreate9Ex à un pointeur à l’aide de la fonction GetProcAddress Win32. Si Direct3DCreate9Ex n’est pas présent, le pointeur de fonction a la valeur NULL et l’exemple de code retourne une valeur HRESULTERROR_NOT_SUPPORTED. Toutefois, si Direct3DCreate9Ex est présent, il retourne une valeur 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;
}

Notez que vous pouvez convertir un pointeur d’interface IDirect3DDevice9Ex en pointeur d’interface IDirect3DDevice9 , car la version étendue est héritée. Cela permet d’utiliser l’appareil étendu avec du code Direct3D 9 existant, sauf si le nouvel appareil modifie la sémantique de l’interface. Pour plus d’informations sur les différences entre les deux interfaces, consultez Modifications du comportement des appareils.

Spécifications

   
Plateforme cible Windows
En-tête d3d9.h
Bibliothèque D3d9.lib
DLL D3d9.dll

Voir aussi

Fonctions Direct3D