Función Direct3DCreate9Ex (d3d9.h)
Crea un objeto IDirect3D9Ex y devuelve una interfaz a él.
Sintaxis
HRESULT Direct3DCreate9Ex(
[in] UINT SDKVersion,
[out] IDirect3D9Ex **unnamedParam2
);
Parámetros
[in] SDKVersion
Tipo: UINT
El valor de este parámetro debe ser D3D_SDK_VERSION. Vea la sección Comentarios.
[out] unnamedParam2
Tipo: IDirect3D9Ex**
Dirección de un puntero a una interfaz IDirect3D9Ex , que representa el objeto IDirect3D9Ex creado. Si se produce un error en la función, se inserta NULL aquí.
Valor devuelto
Tipo: HRESULT
- D3DERR_NOTAVAILABLE si no se admiten características de Direct3DEx (no hay ningún controlador WDDM instalado) o si SDKVersion no coincide con la versión del archivo DLL.
- D3DERR_OUTOFMEMORY si se detectan condiciones de memoria insuficiente al crear el objeto enumerador.
- S_OK si la creación del objeto enumerador se realiza correctamente.
Comentarios
El objeto IDirect3D9Ex es el primer objeto que crea la aplicación y el último objeto que libera la aplicación. Las funciones para enumerar y recuperar funcionalidades de un dispositivo son accesibles a través del objeto IDirect3D9Ex . Esto permite a las aplicaciones seleccionar dispositivos sin crearlos.
La interfaz IDirect3D9Ex admite la enumeración de adaptadores de pantalla activos y permite la creación de objetos IDirect3D9Ex . Si el usuario agrega adaptadores dinámicamente (ya sea agregando dispositivos al escritorio o acoplando de forma activa un portátil), estos dispositivos no se incluyen en la enumeración . La creación de una nueva interfaz IDirect3D9Ex expondrá los nuevos dispositivos.
Pase la marca D3D_SDK_VERSION a esta función para asegurarse de que los archivos de encabezado usados en la aplicación compilada coincidan con la versión de los archivos DLL del entorno de ejecución instalados. D3D_SDK_VERSION se cambia en tiempo de ejecución solo cuando un encabezado u otro cambio de código requeriría volver a generar la aplicación. Si se produce un error en esta función, indica que las versiones del archivo de encabezado y el archivo DLL en tiempo de ejecución no coinciden.
Ejemplos
Crear un objeto IDirect3D9Ex.
En el ejemplo de código siguiente se muestra cómo crear un objeto IDirect3D9Ex mediante Direct3DCreate9Ex. A continuación, en este ejemplo se usa el objeto IDirect3D9Ex para crear un objeto IDirect3DDevice9Ex , que se devuelve como un parámetro out para la función.
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;
}
Comprobación de Direct3D9Ex.
En el ejemplo de código siguiente se muestra cómo comprobar la existencia de Direct3DCreate9Ex y se produce un error en las plataformas que no lo admiten. Puedes usar este código en un iniciador de juegos para presentar un mensaje de error al usuario o cargar un representador que use la interfaz IDirect3D9 en su lugar.
Para comprobar Direct3DCreate9Ex, en este ejemplo se carga explícitamente la biblioteca de D3D9.dll mediante la función LoadLibrary de Win32. A continuación, en el ejemplo se asigna la dirección de Direct3DCreate9Ex a un puntero mediante la función GetProcAddress de Win32 . Si Direct3DCreate9Ex no está presente, el puntero de función es NULL y el ejemplo de código devuelve un valor HRESULTde ERROR_NOT_SUPPORTED. Sin embargo, si Direct3DCreate9Ex está presente, devuelve un 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;
}
Tenga en cuenta que puede convertir un puntero de interfaz IDirect3DDevice9Ex a un puntero de interfaz IDirect3DDevice9 porque se hereda la versión extendida. Esto permite usar el dispositivo extendido con código Direct3D 9 existente, excepto cuando el nuevo dispositivo cambia la semántica de la interfaz. Para obtener más información sobre las diferencias entre las dos interfaces, consulte Cambios de comportamiento del dispositivo.
Requisitos
Plataforma de destino | Windows |
Encabezado | d3d9.h |
Library | D3d9.lib |
Archivo DLL | D3d9.dll |