只是在尝试获取可用的显示模式时遇到了奇怪的问题。让我解释一下..。
首先,我列举了可用的适配器,然后将其推到std::vector,这样可以很好地工作:
for(UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
vAdapters->push_back(pAdapter);然后,我用这些适配器填充组合框,并允许选择一个我想使用的适配器。
当我试图枚举输出并获得可用的显示模式时,首先从combobox获得选定的适配器:
IDXGIAdapter* pSelectedAdapter = (*vAdapters)[index];我检查了所选适配器的地址,它与适配器枚举期间获得的地址匹配。
然后,尝试枚举输出并获得它们的描述:
IDXGIOutput* pOutput;
DXGI_OUTPUT_DESC *odesc = 0;
for(UINT i = 0; pSelectedAdapter->EnumOutputs(i, &pOutput) != DXGI_ERROR_NOT_FOUND; ++i)
{
pOutput->GetDesc(odesc);
}这就是问题所在。循环找到我的两个监视器并返回所有监视器的pOutput指针,但是当我试图触发GetDesc( odesc )时,没有返回odesc。看起来pOutput指针指向..。空物体。枚举可用的显示模式会导致0种可用模式,无论我想要检查模式的哪种回退缓冲区格式。
谢谢你,帕特里克
发布于 2015-04-26 16:12:38
当GetDesc需要一个指向DXGI_OUTPUT_DESC结构的指针时,它将传入一个空指针。试着在下面:
IDXGIOutput* pOutput;
DXGI_OUTPUT_DESC odesc;
for(UINT i = 0; pSelectedAdapter->EnumOutputs(i, &pOutput) != DXGI_ERROR_NOT_FOUND; ++i)
{
pOutput->GetDesc(&odesc);
}发布于 2015-12-03 20:25:37
还记得释放IDXGIOutput,否则会有内存泄漏:请参见这里。
https://stackoverflow.com/questions/29877550
复制相似问题