【发布时间】:2009-07-07 03:38:38
【问题描述】:
我想知道如何从代码特别是 DirectX 9.0c(从 C++ 代码中)获取显卡型号/品牌。
【问题讨论】:
标签: c++ graphics model directx intel
我想知道如何从代码特别是 DirectX 9.0c(从 C++ 代码中)获取显卡型号/品牌。
【问题讨论】:
标签: c++ graphics model directx intel
DirectX 中最简单的方法是通过IDirect3D9::GetAdapterIdentifier。
只需创建一个D3DADAPTER_IDENTIFIER9 对象,将指向它的指针传递给GetAdapterIdentifier。 DirectX 将图形卡描述作为字符串填写在描述字段中。它还包括有关该卡是哪种显示设备以及您拥有的驱动程序版本的信息。
你会得到这样的东西:
【讨论】:
在运行时,可以查询设备型号和厂商:
在 OpenGL 中,使用命令 glGetString(GL_VENDOR) 或 GL_RENDERER 或 GL_VERSION 来获取您需要的信息。
在 DirectX 9 中,信息似乎在 Microsoft 配置系统中,并且是从设备数据库中查询的。这是本文档的第 3 部分,其中也有示例代码:http://msdn.microsoft.com/en-us/library/bb204848(VS.85).aspx 使用相同的系统,您可以获得显卡的内存量、驱动程序号等信息。
【讨论】:
看看我的书The Direct3D Graphics Pipeline中的Chapter 2. Direct3D。请参阅第 2.12 节,识别特定设备。
【讨论】:
您可以使用“DirecX 诊断工具”API,例如 DX SDK 中的示例 DxDiagOutput http://msdn.microsoft.com/en-us/library/ee416986%28v=VS.85%29.aspx
【讨论】:
IDirect3D9* d3dobject = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpresent;
memset(&d3dpresent, 0, sizeof(D3DPRESENT_PARAMETERS));
d3dpresent.Windowed = TRUE;
d3dpresent.SwapEffect = D3DSWAPEFFECT_DISCARD;
UINT adaptercount = d3dobject->GetAdapterCount();
D3DADAPTER_IDENTIFIER9* adapters = (D3DADAPTER_IDENTIFIER9*)malloc(sizeof(D3DADAPTER_IDENTIFIER9) * adaptercount);
for (int i = 0; i < adaptercount; i++)
{
d3dobject->GetAdapterIdentifier(i, 0, &(adapters[i]));
}
然后获取适配器的描述(adapters->Description)
【讨论】: