如何:枚举适配器
本主题演示如何使用 Microsoft DirectX Graphics Infrastructure (DXGI) 枚举计算机上的可用图形适配器。 Direct3D 10 和 11 可以使用 DXGI 枚举适配器。
出于以下原因,通常需要枚举适配器:
- 确定计算机上安装了多少个图形适配器。
- 帮助你选择用于创建 Direct3D 设备的适配器。
- 检索可用于检索设备功能的 IDXGIAdapter 对象。
枚举适配器
通过调用 CreateDXGIFactory 函数创建 IDXGIFactory 对象。 以下代码示例演示如何初始化 IDXGIFactory 对象。
IDXGIFactory * pFactory = NULL; CreateDXGIFactory(__uuidof(IDXGIFactory) ,(void**)&pFactory)
通过调用 IDXGIFactory::EnumAdapters 方法枚举每个适配器。 Adapter 参数允许指定要枚举的适配器的从零开始的索引号。 如果指定索引处没有可用的适配器,则 该方法将返回 DXGI_ERROR_NOT_FOUND。
下面的代码示例演示如何通过计算机上的适配器枚举。
for (UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) { ... }
下面的代码示例演示如何枚举计算机上的所有适配器。
注意
对于 Direct3D 11.0 及更高版本,我们建议应用始终改用 IDXGIFactory1 和 CreateDXGIFactory1 。
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;
}
相关主题