Поделиться через


Функция 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 среды выполнения не совпадают.

Примечание. Direct3DCreate9Ex поддерживается только в Windows Vista, Windows Server 2008 и Windows 7. Более ранние версии библиотеки D3D9.dll не включают Direct3D9Ex и Direct3DCreate9Ex.
 

Примеры

Создание объекта 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

См. также раздел

Функции Direct3D