Compartilhar via


Função Direct3DCreate9Ex (d3d9.h)

Cria um objeto IDirect3D9Ex e retorna uma interface para ele.

Sintaxe

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

Parâmetros

[in] SDKVersion

Tipo: UINT

O valor desse parâmetro deve ser D3D_SDK_VERSION. Consulte Observações.

[out] unnamedParam2

Tipo: IDirect3D9Ex**

Endereço de um ponteiro para uma interface IDirect3D9Ex , representando o objeto IDirect3D9Ex criado. Se a função falhar, NULL será inserido aqui.

Valor retornado

Tipo: HRESULT

  • D3DERR_NOTAVAILABLE se não houver suporte para recursos do Direct3DEx (nenhum driver WDDM está instalado) ou se o SDKVersion não corresponder à versão da DLL.
  • D3DERR_OUTOFMEMORY se condições de memória insuficiente forem detectadas ao criar o objeto enumerador.
  • S_OK se a criação do objeto enumerador for bem-sucedida.

Comentários

O objeto IDirect3D9Ex é o primeiro objeto que o aplicativo cria e o último objeto que o aplicativo libera. As funções para enumerar e recuperar recursos de um dispositivo são acessíveis por meio do objeto IDirect3D9Ex . Isso permite que os aplicativos selecionem dispositivos sem criá-los.

A interface IDirect3D9Ex dá suporte à enumeração de adaptadores de exibição ativos e permite a criação de objetos IDirect3D9Ex . Se o usuário adicionar adaptadores dinamicamente (adicionando dispositivos à área de trabalho ou encaixando um laptop), esses dispositivos não serão incluídos na enumeração. A criação de uma nova interface IDirect3D9Ex exporá os novos dispositivos.

Passe o sinalizador D3D_SDK_VERSION para essa função para garantir que os arquivos de cabeçalho usados no aplicativo compilado correspondam à versão das DLLs de runtime instaladas. D3D_SDK_VERSION é alterado no runtime somente quando um cabeçalho ou outra alteração de código exigiria a recompilação do aplicativo. Se essa função falhar, ela indicará que as versões do arquivo de cabeçalho e da DLL de runtime não correspondem.

ObservaçãoO Direct3DCreate9Ex tem suporte apenas no Windows Vista, Windows Server 2008 e Windows 7. As versões anteriores da biblioteca D3D9.dll não incluem Direct3D9Ex e Direct3DCreate9Ex.
 

Exemplos

Criando um objeto IDirect3D9Ex.

O exemplo de código a seguir demonstra como criar um objeto IDirect3D9Ex usando Direct3DCreate9Ex. Em seguida, este exemplo usa o objeto IDirect3D9Ex para criar um objeto IDirect3DDevice9Ex , que é retornado como um parâmetro out para a função.

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

Verificando o Direct3D9Ex.

O exemplo de código a seguir demonstra como marcar para a existência de Direct3DCreate9Ex e falha em plataformas que não dão suporte a ele. Você pode usar esse código em um inicializador de jogos para apresentar uma mensagem de erro ao usuário ou carregar um renderizador que usa a interface IDirect3D9 .

Para marcar para Direct3DCreate9Ex, este exemplo carrega explicitamente a biblioteca D3D9.dll usando a função Win32 LoadLibrary. Em seguida, o exemplo atribui o endereço de Direct3DCreate9Ex a um ponteiro usando a função GetProcAddress do Win32. Se Direct3DCreate9Ex não estiver presente, o ponteiro da função será NULL e o exemplo de código retornará um ERROR_NOT_SUPPORTED valor HRESULT. No entanto, se Direct3DCreate9Ex estiver presente, ele retornará um valor 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;
}

Observe que você pode converter um ponteiro de interface IDirect3DDevice9Ex em um ponteiro de interface IDirect3DDevice9 porque a versão estendida é herdada. Isso possibilita usar o dispositivo estendido com o código Direct3D 9 existente, exceto quando o novo dispositivo altera a semântica da interface. Para obter mais informações sobre as diferenças entre as duas interfaces, consulte Alterações de comportamento do dispositivo.

Requisitos

   
Plataforma de Destino Windows
Cabeçalho d3d9.h
Biblioteca D3d9.lib
DLL D3d9.dll

Confira também

Funções Direct3D