Функция Direct3DCreate9Ex (d3d9.h)
Создает объект IDirect3D9Ex и возвращает ему интерфейс.
Синтаксис
HRESULT Direct3DCreate9Ex(
[in] UINT SDKVersion,
[out] IDirect3D9Ex **unnamedParam2
);
Параметры
[in] SDKVersion
Тип: UINT
Значение этого параметра должно быть D3D_SDK_VERSION. См. заметки.
[out] unnamedParam2
Тип: IDirect3D9Ex**
Адрес указателя на интерфейс IDirect3D9Ex , представляющий созданный объект IDirect3D9Ex . Если функция завершается сбоем, сюда вставляется значение NULL .
Возвращаемое значение
Тип: HRESULT
- D3DERR_NOTAVAILABLE , если функции Direct3DEx не поддерживаются (драйвер WDDM не установлен) или если версия SDKVersion не соответствует версии библиотеки DLL.
- D3DERR_OUTOFMEMORY , если при создании объекта перечислителя обнаружены условия нехватки памяти.
- S_OK , если создание объекта перечислителя прошло успешно.
Комментарии
Объект IDirect3D9Ex — это первый объект, создаваемый приложением, и последний объект, который освобождает приложение. Функции для перечисления и получения возможностей устройства доступны через объект IDirect3D9Ex . Это позволяет приложениям выбирать устройства без их создания.
Интерфейс IDirect3D9Ex поддерживает перечисление активных адаптеров отображения и позволяет создавать объекты IDirect3D9Ex . Если пользователь динамически добавляет адаптеры (путем добавления устройств на рабочий стол или путем горячей док-станции ноутбука), эти устройства не включаются в перечисление. При создании нового интерфейса IDirect3D9Ex будут представлены новые устройства.
Передайте флаг D3D_SDK_VERSION этой функции, чтобы убедиться, что файлы заголовков, используемые в скомпилированном приложении, соответствуют версии установленных библиотек DLL среды выполнения. D3D_SDK_VERSION изменяется в среде выполнения только в том случае, если для изменения заголовка или другого кода потребуется перестроить приложение. Если эта функция завершается сбоем, это означает, что версии файла заголовка и библиотеки DLL среды выполнения не совпадают.
Примеры
Создание объекта IDirect3D9Ex.
В следующем примере кода показано, как создать объект IDirect3D9Ex с помощью Direct3DCreate9Ex. В этом примере используется объект IDirect3D9Ex для создания объекта IDirect3Device9Ex , который возвращается функции в качестве параметра out.
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;
}
Проверка direct3D9Ex.
В следующем примере кода показано, как проверка существования Direct3DCreate9Ex и выполнить сбой на платформах, которые не поддерживают его. Этот код можно использовать в средства запуска игр, чтобы представить пользователю сообщение об ошибке или загрузить отрисовщик, использующий интерфейс IDirect3D9 .
Чтобы проверка для Direct3DCreate9Ex, этот пример явно загружает библиотеку D3D9.dll с помощью функции Win32 LoadLibrary. Затем в примере адрес Direct3DCreate9Ex назначается указателю с помощью функции Win32 GetProcAddress . Если Direct3DCreate9Ex отсутствует, то указатель функции имеет значение NULL, а пример кода возвращает ERROR_NOT_SUPPORTED значение HRESULT. Однако при наличии Direct3DCreate9Ex возвращается значение 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;
}
Обратите внимание, что указатель интерфейса IDirect3DDevice9Ex можно привести к указателю интерфейса IDirect3Device9 , так как расширенная версия наследуется. Это позволяет использовать расширенное устройство с существующим кодом Direct3D 9, за исключением случаев, когда новое устройство изменяет семантику интерфейса. Дополнительные сведения о различиях между этими двумя интерфейсами см. в разделе Изменения в поведении устройства.
Требования
Целевая платформа | Windows |
Header | d3d9.h |
Библиотека | D3d9.lib |
DLL | D3d9.dll |