如何:枚举适配器

本主题演示如何使用 Microsoft DirectX Graphics Infrastructure (DXGI) 枚举计算机上的可用图形适配器。 Direct3D 10 和 11 可以使用 DXGI 枚举适配器。

出于以下原因,通常需要枚举适配器:

  • 确定计算机上安装了多少个图形适配器。
  • 帮助你选择用于创建 Direct3D 设备的适配器。
  • 检索可用于检索设备功能的 IDXGIAdapter 对象。

枚举适配器

  1. 通过调用 CreateDXGIFactory 函数创建 IDXGIFactory 对象。 以下代码示例演示如何初始化 IDXGIFactory 对象。

    IDXGIFactory * pFactory = NULL;
    
    CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
    
  2. 通过调用 IDXGIFactory::EnumAdapters 方法枚举每个适配器。 Adapter 参数允许指定要枚举的适配器的从零开始的索引号。 如果指定索引处没有可用的适配器,则 该方法将返回 DXGI_ERROR_NOT_FOUND

    下面的代码示例演示如何通过计算机上的适配器枚举。

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

下面的代码示例演示如何枚举计算机上的所有适配器。

注意

对于 Direct3D 11.0 及更高版本,我们建议应用始终改用 IDXGIFactory1CreateDXGIFactory1

 

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;

}

如何使用 Direct3D 11