Direct3DCreate9Ex-Funktion (d3d9.h)
Erstellt ein IDirect3D9Ex-Objekt und gibt eine Schnittstelle zurück.
Syntax
HRESULT Direct3DCreate9Ex(
[in] UINT SDKVersion,
[out] IDirect3D9Ex **unnamedParam2
);
Parameter
[in] SDKVersion
Typ: UINT
Der Wert dieses Parameters sollte D3D_SDK_VERSION sein. Siehe Hinweise.
[out] unnamedParam2
Typ: IDirect3D9Ex**
Adresse eines Zeigers auf eine IDirect3D9Ex-Schnittstelle , die das erstellte IDirect3D9Ex-Objekt darstellt. Wenn die Funktion fehlschlägt, wird HIER NULL eingefügt.
Rückgabewert
Typ: HRESULT
- D3DERR_NOTAVAILABLE , wenn Direct3DEx-Features nicht unterstützt werden (es ist kein WDDM-Treiber installiert) oder wenn die SDKVersion nicht mit der Version der DLL übereinstimmt.
- D3DERR_OUTOFMEMORY , wenn beim Erstellen des Enumeratorobjekts nicht genügend Arbeitsspeicherbedingungen erkannt werden.
- S_OK , wenn die Erstellung des Enumeratorobjekts erfolgreich war.
Hinweise
Das IDirect3D9Ex-Objekt ist das erste Objekt, das die Anwendung erstellt, und das letzte Objekt, das die Anwendung freigibt. Auf Funktionen zum Aufzählen und Abrufen von Funktionen eines Geräts kann über das IDirect3D9Ex-Objekt zugegriffen werden. Dadurch können Anwendungen Geräte auswählen, ohne sie zu erstellen.
Die IDirect3D9Ex-Schnittstelle unterstützt die Enumeration aktiver Anzeigeadapter und ermöglicht die Erstellung von IDirect3D9Ex-Objekten . Wenn der Benutzer Adapter dynamisch hinzufügt (entweder durch Hinzufügen von Geräten zum Desktop oder durch Hot-Docking eines Laptops), sind diese Geräte nicht in der Enumeration enthalten. Durch das Erstellen einer neuen IDirect3D9Ex-Schnittstelle werden die neuen Geräte verfügbar gemacht.
Übergeben Sie das flag D3D_SDK_VERSION an diese Funktion, um sicherzustellen, dass die in der kompilierten Anwendung verwendeten Headerdateien mit der Version der installierten Laufzeit-DLLs übereinstimmen. D3D_SDK_VERSION wird in der Laufzeit nur geändert, wenn eine Header- oder eine andere Codeänderung eine Neuerstellung der Anwendung erfordern würde. Wenn diese Funktion fehlschlägt, gibt sie an, dass die Versionen der Headerdatei und der Laufzeit-DLL nicht übereinstimmen.
Beispiele
Erstellen eines IDirect3D9Ex-Objekts.
Im folgenden Codebeispiel wird das Erstellen eines IDirect3D9Ex-Objekts mithilfe von Direct3DCreate9Ex veranschaulicht. In diesem Beispiel wird dann das IDirect3D9Ex-Objekt verwendet, um ein IDirect3DDevice9Ex-Objekt zu erstellen, das als out-Parameter für die Funktion zurückgegeben wird.
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;
}
Überprüfen auf Direct3D9Ex.
Im folgenden Codebeispiel wird veranschaulicht, wie Sie überprüfen, ob Direct3DCreate9Ex vorhanden ist und auf Plattformen fehlschlägt, die dies nicht unterstützen. Sie können diesen Code in einem Spielstartprogramm verwenden, um dem Benutzer eine Fehlermeldung anzuzeigen oder einen Renderer zu laden, der stattdessen die IDirect3D9-Schnittstelle verwendet.
Um direct3DCreate9Ex zu überprüfen, lädt dieses Beispiel die D3D9.dll Bibliothek explizit mithilfe der Win32 LoadLibrary-Funktion . Im Beispiel wird dann die Adresse von Direct3DCreate9Ex mithilfe der Win32 GetProcAddress-Funktion einem Zeiger zugewiesen. Wenn Direct3DCreate9Ex nicht vorhanden ist, ist der Funktionszeiger NULL, und das Codebeispiel gibt einen ERROR_NOT_SUPPORTED HRESULT-Wert zurück. Wenn Direct3DCreate9Ex jedoch vorhanden ist, wird ein S_OK Wert zurückgegeben.
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;
}
Beachten Sie, dass Sie einen IDirect3DDevice9Ex-Schnittstellenzeiger in einen IDirect3DDevice9-Schnittstellenzeiger umwandeln können, da die erweiterte Version geerbt wird. Dadurch kann das erweiterte Gerät mit vorhandenem Direct3D 9-Code verwendet werden, es sei denn, das neue Gerät ändert die Semantik der Schnittstelle. Weitere Informationen zu den Unterschieden zwischen den beiden Schnittstellen finden Sie unter Änderungen des Geräteverhaltens.
Anforderungen
Zielplattform | Windows |
Kopfzeile | d3d9.h |
Bibliothek | D3d9.lib |
DLL | D3d9.dll |