Bagikan melalui


Fungsi Direct3DCreate9Ex (d3d9.h)

Membuat objek IDirect3D9Ex dan mengembalikan antarmuka ke objek tersebut.

Sintaks

HRESULT Direct3DCreate9Ex(
  [in]  UINT         SDKVersion,
  [out] IDirect3D9Ex **unnamedParam2
);

Parameter

[in] SDKVersion

Jenis: UINT

Nilai parameter ini harus D3D_SDK_VERSION. Lihat Keterangan.

[out] unnamedParam2

Jenis: IDirect3D9Ex**

Alamat penunjuk ke antarmuka IDirect3D9Ex , mewakili objek IDirect3D9Ex yang dibuat. Jika fungsi gagal, NULL disisipkan di sini.

Nilai kembali

Jenis: HRESULT

  • D3DERR_NOTAVAILABLE jika fitur Direct3DEx tidak didukung (tidak ada driver WDDM yang diinstal) atau jika SDKVersion tidak cocok dengan versi DLL.
  • D3DERR_OUTOFMEMORY jika kondisi kehabisan memori terdeteksi saat membuat objek enumerator.
  • S_OK jika pembuatan objek enumerator berhasil.

Keterangan

Objek IDirect3D9Ex adalah objek pertama yang dibuat aplikasi dan objek terakhir yang dirilis aplikasi. Fungsi untuk menghitung dan mengambil kemampuan perangkat dapat diakses melalui objek IDirect3D9Ex . Ini memungkinkan aplikasi untuk memilih perangkat tanpa membuatnya.

Antarmuka IDirect3D9Ex mendukung enumerasi adaptor tampilan aktif dan memungkinkan pembuatan objek IDirect3D9Ex . Jika pengguna secara dinamis menambahkan adaptor (baik dengan menambahkan perangkat ke desktop, atau dengan hot-docking laptop), perangkat ini tidak termasuk dalam enumerasi. Membuat antarmuka IDirect3D9Ex baru akan mengekspos perangkat baru.

Teruskan bendera D3D_SDK_VERSION ke fungsi ini untuk memastikan bahwa file header yang digunakan dalam aplikasi yang dikompilasi cocok dengan versi DLL runtime yang diinstal. D3D_SDK_VERSION diubah dalam runtime hanya ketika header atau perubahan kode lain akan memerlukan pembangunan kembali aplikasi. Jika fungsi ini gagal, itu menunjukkan bahwa versi file header dan DLL runtime tidak cocok.

CatatanDirect3DCreate9Ex hanya didukung di Windows Vista, Windows Server 2008, dan Windows 7. Versi pustaka D3D9.dll yang lebih lama tidak menyertakan Direct3D9Ex dan Direct3DCreate9Ex.
 

Contoh

Membuat objek IDirect3D9Ex.

Contoh kode berikut menunjukkan cara membuat objek IDirect3D9Ex menggunakan Direct3DCreate9Ex. Contoh ini kemudian menggunakan objek IDirect3D9Ex untuk membuat objek IDirect3DDevice9Ex , yang dikembalikan sebagai parameter keluar ke fungsi.

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;
}

Memeriksa Direct3D9Ex.

Contoh kode berikut menunjukkan cara memeriksa keberadaan Direct3DCreate9Ex dan gagal pada platform yang tidak mendukungnya. Anda dapat menggunakan kode ini dalam peluncur game untuk menyajikan pesan kesalahan kepada pengguna atau untuk memuat perender yang menggunakan antarmuka IDirect3D9 sebagai gantinya.

Untuk memeriksa Direct3DCreate9Ex, contoh ini secara eksplisit memuat pustaka D3D9.dll menggunakan fungsi Win32 LoadLibrary . Contoh kemudian menetapkan alamat Direct3DCreate9Ex ke pointer dengan menggunakan fungsi Win32 GetProcAddress . Jika Direct3DCreate9Ex tidak ada, penunjuk fungsi adalah NULL, dan contoh kode mengembalikan nilai HRESULTERROR_NOT_SUPPORTED. Namun, jika Direct3DCreate9Ex ada, itu mengembalikan nilai 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;
}

Perhatikan bahwa Anda dapat mentransmisikan penunjuk antarmuka IDirect3DDevice9Ex ke penunjuk antarmuka IDirect3DDevice9 karena versi yang diperluas diwariskan. Ini memungkinkan untuk menggunakan perangkat yang diperluas dengan kode Direct3D 9 yang ada, kecuali di mana perangkat baru mengubah semantik antarmuka. Untuk informasi selengkapnya tentang perbedaan antara kedua antarmuka, lihat perubahan perilaku perangkat.

Persyaratan

   
Target Platform Windows
Header d3d9.h
Pustaka D3d9.lib
DLL D3d9.dll

Lihat juga

Fungsi Direct3D