DXGI EnumOutputs - 没有DXGI_OUTPUT_DESC和空显示模式数组

时间:2015-04-26 12:21:11

标签: c++ directx-11 dxgi

尝试获取可用的显示模式时遇到了奇怪的问题。让我解释一下......

首先,我枚举可用的适配器然后推送到std :: vector,这很好用:

for(UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
    vAdapters->push_back(pAdapter);

然后我用这些适配器填充组合框并允许选择我想要使用的那个。

当我尝试枚举输出并获得可用的显示模式时,首先我从组合框中选择适配器:

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种可用模式,无论我想检查哪种后缓冲格式。

谢谢, Patryk

2 个答案:

答案 0 :(得分:2)

当它期望指向DXGI_OUTPUT_DESC结构的指针时,你传入了一个指向GetDesc的空指针。请尝试以下:

IDXGIOutput* pOutput;
DXGI_OUTPUT_DESC odesc;
for(UINT i = 0; pSelectedAdapter->EnumOutputs(i, &pOutput) != DXGI_ERROR_NOT_FOUND; ++i)
{
    pOutput->GetDesc(&odesc);
}

答案 1 :(得分:-2)

还记得释放IDXGIOutput或者你会发生内存泄漏: 请参阅here