Cara: Menghitung Adapter

Topik ini menunjukkan cara menggunakan Microsoft DirectX Graphics Infrastructure (DXGI) untuk menghitung adaptor grafis yang tersedia di komputer. Direct3D 10 dan 11 dapat menggunakan DXGI untuk menghitung adaptor.

Anda umumnya perlu menghitung adaptor karena alasan ini:

  • Untuk menentukan berapa banyak adaptor grafis yang diinstal pada komputer.
  • Untuk membantu Anda memilih adaptor mana yang akan digunakan untuk membuat perangkat Direct3D.
  • Untuk mengambil objek IDXGIAdapter yang dapat Anda gunakan untuk mengambil kemampuan perangkat.

Untuk menghitung adaptor

  1. Buat objek IDXGIFactory dengan memanggil fungsi CreateDXGIFactory . Contoh kode berikut menunjukkan cara menginisialisasi objek IDXGIFactory .

    IDXGIFactory * pFactory = NULL;
    
    CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
    
  2. Hitung melalui setiap adaptor dengan memanggil metode IDXGIFactory::EnumAdapters . Parameter Adapter memungkinkan Anda menentukan nomor indeks berbasis nol adapter untuk dijumlahkan. Jika tidak ada adaptor yang tersedia pada indeks yang ditentukan, metode akan mengembalikan DXGI_ERROR_NOT_FOUND.

    Contoh kode berikut menunjukkan cara menghitung melalui adaptor di komputer.

    for (UINT i = 0; 
         pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; 
         ++i) 
    { ... }
    

Contoh kode berikut menunjukkan cara menghitung semua adaptor di komputer.

Catatan

Untuk Direct3D 11.0 dan yang lebih baru, sebaiknya aplikasi selalu menggunakan IDXGIFactory1 dan CreateDXGIFactory1 sebagai gantinya.

 

std::vector <IDXGIAdapter*> EnumerateAdapters(void)
{
    IDXGIAdapter * pAdapter; 
    std::vector <IDXGIAdapter*> vAdapters; 
    IDXGIFactory* pFactory = NULL; 
    

    // Create a DXGIFactory object.
    if(FAILED(CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)))
    {
        return vAdapters;
    }


    for ( UINT i = 0;
          pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND;
          ++i )
    {
        vAdapters.push_back(pAdapter); 
    } 


    if(pFactory)
    {
        pFactory->Release();
    }

    return vAdapters;

}

Cara Menggunakan Direct3D 11