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 上初始化的主要内容,如果未能解决你的问题,请参考以下文章

Directx 9 VS2015环境搭建

directx11编程中遇到的错误及解决方法

Windows 8.1 上的 DirectX 11 缺少 SDK 组件

DX11 Without DirectX SDK--04 使用DirectX Tool Kit帮助开发

DirectX11 Without DirectX SDK--14 深度测试

DirectX11 With Windows SDK--26 计算着色器:入门