DirectX 11 EnumOutputs无法使用NVIDIA卡,Win 8

时间:2014-01-07 11:06:14

标签: directx-11

我的错误应该在以下代码中注释掉。我曾尝试在很多Wais中混合使用东西,但无论我做什么,当我尝试强制它使用我的GeForce GTX 765M卡时,“EnumOutputs”功能将无效。据我所知,我需要pdxgiOutput以后来制作我的GetDisplayModeList1();

希望这些信息足以看出问题所在。

std::vector <IDXGIAdapter1*> availableAdapters;

while (m_pIDXGIFactory->EnumAdapters1(m_adapterIndex, &pdxgiAdapter) != DXGI_ERROR_NOT_FOUND)
    {
    availableAdapters.push_back(pdxgiAdapter);
    ++m_adapterIndex;
    }
pdxgiAdapter = availableAdapters[1];  // NVIDIA GeForce GTX 765M
//pdxgiAdapter = availableAdapters[0]; // Intel(R) HD Graphics 4600

pdxgiAdapter->EnumOutputs(0, &pdxgiOutput); // !!**Failure when use NVIDIA Gefore 765M!**
  

Debug Assertion失败:C:\ ProgramFiles \ Microsoft Visual Studio   12.0 \ VC \ include \ vector行:1201

     

表达式:向量下标超出范围

2 个答案:

答案 0 :(得分:0)

断言你得到的声音来自于你在“availableAdapters”向量上使用下标运算符,而不是来自EnumOutputs。

您是否尝试在访问第二个元素之前打印出向量的.size()以检查其中有两个内容?您的笔记本电脑(?)是否有可能有两个GPU,但在任何给定时间只有一个可以枚举,并在BIOS中打开/​​关闭(或通过其他方式)?

答案 1 :(得分:0)

我是这个的初学者,但可以尝试以另一种方式设置它:

std::vector <IDXGIAdapter1*> availableAdapters;
while (m_pIDXGIFactory->EnumAdapters1(m_adapterIndex, &pdxgiAdapter) != DXGI_ERROR_NOT_FOUND)
    {
    availableAdapters.push_back(pdxgiAdapter);
    ++m_adapterIndex;
    }

pdxgiAdapter = availableAdapters[1];  // NVIDIA GeForce GTX 765M
//pdxgiAdapter = availableAdapters[0]; // Intel(R) HD Graphics 4600

pdxgiAdapter->GetDesc1(&AdapterDesc);
if (AdapterDesc.DedicatedVideoMemory)
    {
    m_videoCardMemory = AdapterDesc.DedicatedVideoMemory;
    }
else
    {
    m_videoCardMemory = AdapterDesc.SharedSystemMemory;
    }
pdxgiAdapter->EnumOutputs(m_outputIndex, &pdxgiOutput));

当我尝试使用bouth availableAdapters [1]或[0]时,GetDesc会发现英特尔和GeForce卡。但是在使用Geforce的EnumOutpts中失败了,离开pdxgiOutput = 0x00000000000000