gpt4 book ai didi

visual-c++ - Directx11 SDK 6月(2010) VC++ 2010 上的初始化

转载 作者:行者123 更新时间:2023-12-02 22:41:22 25 4
gpt4 key购买 nike

我希望我能在正确的论坛上发帖!

最近,我开始在配备 NVidia GeForce GT 630M GPU 和 Intel HD 4000 芯片的 Dell 笔记本电脑上使用 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 而不是 Intel 芯片。我把WinMain函数中的代码全部注释掉,插入上面的代码,它还是抢GPU!这与项目设置、环境变量、命令行参数或……有关吗?我的意思是他们是怎么做到的!?!?!?

如果您对此事有任何见解,我将不胜感激。

谢谢

最佳答案

您可以运行所有存在的适配器,并通过使用您已经使用的相同函数循环遍历所有可能的适配器来获取有关它们的信息:

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其中视频内存最多。这不是一种万无一失的启发式方法,但我用它来为系统获得“最好的”(广泛使用的)显卡。然而,通常情况下,默认设置是有原因的。

祝你好运!

关于visual-c++ - Directx11 SDK 6月(2010) VC++ 2010 上的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16354607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com