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.
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 |