2014-01-07 74 views
0

我的錯誤應在下面的代碼中註釋掉。我試圖在許多Wais中混合使用,但是當我嘗試強制使用我的GeForce GTX 765M卡時,無論我做什麼「EnumOutputs」函數都不起作用。據我所知,我需要這個pdxgiOutput來稍後使用我的GetDisplayModeList1();DirectX 11 EnumOutputs失敗,NVIDIA卡Win 8

希望這將是足夠的信息,看看問題是什麼。

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!** 

調試斷言失敗:C:\ PROGRAMFILES \微軟的Visual Studio 12.0 \ VC \包括\矢量線:1201

表達:向量下標越界

回答

0

的斷言你聽起來像是來自你在「availableAdapters」向量中使用下標操作符,而不是來自EnumOutputs。

您是否嘗試過在訪問第二個元素之前打印出矢量的.size(),以檢查其中是否有兩個東西?您的筆記本電腦(?)是否有兩個GPU,但在任何給定時間只有一個可枚舉並且在BIOS中打開/​​關閉(或通過其他方式)是不可能的?

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找到bouth英特爾和GeForce - 卡。但在使用Geforce的EnumOutpts失敗後,葉pdxgiOutput = 0x00000000000000