次の方法で共有


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

  • Direct3DEx 機能がサポートされていない (WDDM ドライバーがインストールされていない) 場合、または SDKVersion が DLL のバージョンと一致しない場合にD3DERR_NOTAVAILABLEします。
  • 列挙子オブジェクトの作成時にメモリ不足状態が検出された場合にD3DERR_OUTOFMEMORYします。
  • 列挙子オブジェクトの作成が成功した場合にS_OKします。

解説

IDirect3D9Ex オブジェクトは、アプリケーションが作成する最初のオブジェクトと、アプリケーションが解放する最後のオブジェクトです。 デバイスの機能を列挙および取得するための関数には、 IDirect3D9Ex オブジェクトを使用してアクセスできます。 これにより、アプリケーションはデバイスを作成せずに選択できます。

IDirect3D9Ex インターフェイスは、アクティブなディスプレイ アダプターの列挙をサポートし、IDirect3D9Ex オブジェクトの作成を可能にします。 ユーザーがアダプターを動的に追加する場合 (デスクトップにデバイスを追加するか、ノート PC をホットドッキングすることによって)、これらのデバイスは列挙に含まれません。 新しい IDirect3D9Ex インターフェイスを作成すると、新しいデバイスが公開されます。

この関数に D3D_SDK_VERSION フラグを渡して、コンパイル済みアプリケーションで使用されるヘッダー ファイルが、インストールされているランタイム DLL のバージョンと一致することを確認します。 D3D_SDK_VERSION は、ヘッダーまたは別のコード変更でアプリケーションの再構築が必要な場合にのみ、ランタイムで変更されます。 この関数が失敗した場合は、ヘッダー ファイルとランタイム DLL のバージョンが一致しないことを示します。

Direct3DCreate9Ex は、Windows Vista、Windows Server 2008、および Windows 7 でのみサポートされます。 以前のバージョンの D3D9.dll ライブラリには 、Direct3D9ExDirect3DCreate9Ex は含まれていません。
 

IDirect3D9Ex オブジェクトの作成。

次のコード例では、 Direct3DCreate9Ex を使用して IDirect3D9Ex オブジェクトを作成する方法を示します。 次の使用例は、 IDirect3D9Ex オブジェクトを使用して IDirect3DDevice9Ex オブジェクトを作成します。このオブジェクトは、関数の 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 をチェックするには、Win32 LoadLibrary 関数を使用して D3D9.dll ライブラリを明示的に読み込みます。 次に、Win32 GetProcAddress 関数を使用して Direct3DCreate9Ex のアドレスをポインターに割り当てます。 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 インターフェイス ポインターを IDirect3DDevice9 インターフェイス ポインターにキャストできます。 これにより、新しいデバイスがインターフェイスのセマンティクスを変更する場合を除き、既存の Direct3D 9 コードで拡張デバイスを使用できます。 2 つのインターフェイスの違いの詳細については、「 デバイスの動作の変更」を参照してください。

要件

   
対象プラットフォーム Windows
ヘッダー d3d9.h
Library D3d9.lib
[DLL] D3d9.dll

関連項目

Direct3D 関数