Directx11 SDK June(2010) 在 VC++ 2010 上初始化
Posted
技术标签:
【中文标题】Directx11 SDK June(2010) 在 VC++ 2010 上初始化【英文标题】:Directx11 SDK June(2010) Initialization on VC++ 2010 【发布时间】:2013-04-27 14:28:24 【问题描述】:我希望我在正确的论坛上发帖!
最近,我开始在配备 NVidia GeForce GT 630M GPU 和 Intel HD 4000 芯片的戴尔笔记本电脑上使用 VC++ 2010 上的 Directx 11 June (2010) SDK 进行编程。
您要做的一件事是尝试枚举可用的适配器和输出,等等。这是一个例子:
IDXGIFactory1 *factory;
CreateDXGIFactory1(__uuidof(IDXGIFactory1), (LPVOID *)&factory);
IDXGIAdapter *adapter;
factory->EnumAdapters(0, &adapter);
DXGI_ADAPTER_DESC desc;
adapter->GetDesc(&desc);
当我运行它时,desc 结构包含我的 Intel HD 芯片的信息,而不是我的 GPU 的信息!
现在,当我打开我的 NVidia 控制面板并选择 GPU 作为首选处理器并重新运行示例时,我会在 desc 中获得我的 GPU 的信息 - 这是正确的!而且,当我尝试枚举此适配器的输出时,我发现至少有一个。
我的问题是:有没有办法以编程方式完成此操作,例如在 DirectX 11 SDK 中,这样我就不必在我的 NVidia 控制面板中进行设置?
我浏览了 SDK 代码(针对 EmptyProject11),不知何故他们“抓住”了 GPU 而不是英特尔芯片。我把WinMain函数里面的代码都注释掉了,把上面的代码插入进去,还是抢GPU!它与项目设置、环境变量、命令行参数或......有关吗?我的意思是他们是怎么做到的!?!?!?
我将不胜感激。
谢谢
【问题讨论】:
这里有一个类似的问题,但我不确定它是否已解决***.com/questions/10535950/… 【参考方案1】:您可以使用您已经在使用的相同功能遍历所有可能的适配器,从而运行所有适配器呈现并获取有关它们的信息:
HRESULT r = S_OK;
unsigned int adapterindex = 0;
std::unique_ptr<IDXGIAdapter, ReleaseDirectX> dxgiadapter = null;
// Save the result of EnumAdapters to r, and then check if it's S_OK
while ( ( r = factory->EnumAdapters( adapterindex, &dxgiadapter ) ) == S_OK )
++adapterindex;
/* Work with your adapter here, particularly DXGI_ADAPTER_DESC */
通常,您必须自动选择默认选项或枚举所有选项,然后在某种设置面板中让用户选择。另一种方法是使用具有最多显存的Adapter Description。这不是一种万无一失的启发式方法,但它是我用来为系统获得“最佳”(广泛使用)视频卡的方法。然而,默认值通常是有原因的。
祝你好运!
【讨论】:
以上是关于Directx11 SDK June(2010) 在 VC++ 2010 上初始化的主要内容,如果未能解决你的问题,请参考以下文章
Windows 8.1 上的 DirectX 11 缺少 SDK 组件
DX11 Without DirectX SDK--04 使用DirectX Tool Kit帮助开发