Memilih Perangkat (Direct3D 9)

Aplikasi dapat meminta perangkat keras untuk mendeteksi jenis perangkat Direct3D yang didukung. Bagian ini berisi informasi tentang tugas utama yang terlibat dalam menghitung adaptor tampilan dan memilih perangkat Direct3D.

Aplikasi harus melakukan serangkaian tugas untuk memilih perangkat Direct3D yang sesuai. Perhatikan bahwa langkah-langkah berikut ditujukan untuk aplikasi layar penuh dan, dalam banyak kasus, aplikasi berjendela dapat melewati sebagian besar langkah-langkah ini.

  1. Awalnya, aplikasi harus menghitung adaptor tampilan pada sistem. Adaptor adalah perangkat keras fisik. Perhatikan bahwa kartu grafis mungkin berisi lebih dari satu adaptor, seperti halnya dengan layar berkepala ganda. Aplikasi yang tidak peduli dengan dukungan multi-monitor dapat mengalihkan langkah ini, dan meneruskan D3DADAPTER_DEFAULT ke metode IDirect3D9::EnumAdapterModes di langkah 2.

  2. Untuk setiap adaptor, aplikasi menghitung mode tampilan yang didukung dengan memanggil IDirect3D9::EnumAdapterModes.

  3. Jika diperlukan, aplikasi memeriksa keberadaan akselerasi perangkat keras di setiap mode tampilan yang dijumlahkan dengan memanggil IDirect3D9::CheckDeviceType, seperti yang ditunjukkan dalam contoh kode berikut. Perhatikan bahwa ini hanya salah satu kemungkinan penggunaan untuk IDirect3D9::CheckDeviceType; untuk detailnya, lihat Menentukan Dukungan Perangkat Keras (Direct3D 9).

    D3DPRESENT_PARAMETERS Params;
    // Initialize values for D3DPRESENT_PARAMETERS members. 
    
    Params.BackBufferFormat = D3DFMT_X1R5G5B5; 
    
    if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter, 
                      Device.m_DevType, 
                      Params.BackBufferFormat, Params.BackBufferFormat, 
                      FALSE))) 
        return E_FAIL;
    
  4. Aplikasi memeriksa tingkat fungsionalitas yang diinginkan untuk perangkat pada adaptor ini dengan memanggil metode IDirect3D9::GetDeviceCaps . Kemampuan yang dikembalikan oleh metode ini dijamin konstan untuk perangkat di semua mode tampilan, diverifikasi oleh IDirect3D9::CheckDeviceType.

  5. Perangkat selalu dapat merender ke permukaan format mode tampilan enumerasi yang didukung oleh perangkat. Jika aplikasi diperlukan untuk merender ke permukaan format yang berbeda, aplikasi dapat memanggil IDirect3D9::CheckDeviceFormat. Jika perangkat dapat merender ke format, maka dijamin bahwa semua kemampuan yang dikembalikan oleh IDirect3D9::GetDeviceCaps berlaku.

  6. Terakhir, aplikasi dapat menentukan apakah teknik multisampling, seperti antialias adegan penuh, didukung untuk format render dengan menggunakan metode IDirect3D9::CheckDeviceMultiSampleType .

Setelah menyelesaikan langkah-langkah sebelumnya, aplikasi harus memiliki daftar mode tampilan tempat aplikasi dapat beroperasi. Langkah terakhir adalah memverifikasi bahwa memori yang dapat diakses perangkat yang cukup tersedia untuk mengakomodasi jumlah buffer dan antialias yang diperlukan. Pengujian ini diperlukan karena konsumsi memori untuk mode dan kombinasi multisample tidak mungkin diprediksi tanpa memverifikasinya. Selain itu, beberapa arsitektur adaptor tampilan mungkin tidak memiliki jumlah memori yang dapat diakses perangkat secara konstan. Ini berarti bahwa aplikasi harus dapat melaporkan kegagalan memori di luar video saat masuk ke mode layar penuh. Biasanya, aplikasi harus menghapus mode layar penuh dari daftar mode yang ditawarkannya kepada pengguna, atau harus mencoba mengonsumsi lebih sedikit memori dengan mengurangi jumlah buffer belakang atau dengan menggunakan teknik multisampling yang kurang kompleks.

Aplikasi berjendela melakukan serangkaian tugas serupa.

  1. Ini menentukan persegi panjang desktop yang dicakup oleh area klien jendela.
  2. Ini menghitung adaptor, mencari adaptor yang monitornya mencakup area klien. Jika area klien dimiliki oleh lebih dari satu adaptor, maka aplikasi dapat memilih untuk mendorong setiap adaptor secara independen, atau untuk mendorong satu adaptor dan memiliki piksel transfer Direct3D dari satu perangkat ke perangkat lain saat presentasi. Aplikasi ini juga dapat mengabaikan dua langkah sebelumnya dan menggunakan adaptor D3DADAPTER_DEFAULT. Perhatikan bahwa ini dapat mengakibatkan operasi yang lebih lambat ketika jendela ditempatkan pada monitor sekunder.
  3. Aplikasi harus memanggil IDirect3D9::CheckDeviceType untuk menentukan apakah perangkat dapat mendukung penyajian ke buffer belakang format yang ditentukan saat dalam mode desktop. IDirect3D9::GetAdapterDisplayMode dapat digunakan untuk menentukan format tampilan desktop, seperti yang ditunjukkan dalam contoh kode berikut.
    D3DPRESENT_PARAMETERS Params;
    // Initialize values for D3DPRESENT_PARAMETERS members. 
    
    // Use the current display mode.
    D3DDISPLAYMODE mode;
    
    if(FAILED(m_pD3D->GetAdapterDisplayMode(Device.m_uAdapter , &mode)))
        return E_FAIL;
    
    Params.BackBufferFormat = mode.Format;
    
    if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter, Device.m_DevType, 
    Params.BackBufferFormat, Params.BackBufferFormat, FALSE)))
        return E_FAIL;
    

Perangkat Direct3D