我的错误应该在以下代码中注释掉。我曾尝试在很多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
表达式:向量下标超出范围
答案 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