DXGI EnumOutputs - 无 DXGI_OUTPUT_DESC 和空显示模式数组
DXGI EnumOutputs - no DXGI_OUTPUT_DESC and empty display modes array
刚刚在尝试获取可用的显示模式时遇到了一个奇怪的问题。让我解释一下...
首先,我列举了可用的适配器,然后推送到 std::vector,这很好用:
for(UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
vAdapters->push_back(pAdapter);
然后我用这些适配器填充组合框并允许 select 我想使用的一个。
当我尝试枚举输出并获得可用的显示模式时,首先我从组合框获得 selected 适配器:
IDXGIAdapter* pSelectedAdapter = (*vAdapters)[index];
我检查了 selected 适配器的地址,它与适配器枚举期间获得的地址匹配。
然后,尝试枚举输出并获取它们的描述:
IDXGIOutput* pOutput;
DXGI_OUTPUT_DESC *odesc = 0;
for(UINT i = 0; pSelectedAdapter->EnumOutputs(i, &pOutput) != DXGI_ERROR_NOT_FOUND; ++i)
{
pOutput->GetDesc(odesc);
}
问题来了。 Loop 找到了我的两个监视器和所有监视器的 returns pOutput 指针,但是当我尝试触发 GetDesc(odesc) 时,没有返回 odesc。看起来 pOutput 指针指向...空对象。枚举可用显示模式会导致 0 个可用模式,无论我想检查哪种后台缓冲区格式。
谢谢,
帕特里克
当 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);
}
另外记得释放 IDXGIOutput 否则你会发生内存泄漏:
参见 here。
刚刚在尝试获取可用的显示模式时遇到了一个奇怪的问题。让我解释一下...
首先,我列举了可用的适配器,然后推送到 std::vector,这很好用:
for(UINT i = 0; pFactory->EnumAdapters(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i)
vAdapters->push_back(pAdapter);
然后我用这些适配器填充组合框并允许 select 我想使用的一个。
当我尝试枚举输出并获得可用的显示模式时,首先我从组合框获得 selected 适配器:
IDXGIAdapter* pSelectedAdapter = (*vAdapters)[index];
我检查了 selected 适配器的地址,它与适配器枚举期间获得的地址匹配。
然后,尝试枚举输出并获取它们的描述:
IDXGIOutput* pOutput;
DXGI_OUTPUT_DESC *odesc = 0;
for(UINT i = 0; pSelectedAdapter->EnumOutputs(i, &pOutput) != DXGI_ERROR_NOT_FOUND; ++i)
{
pOutput->GetDesc(odesc);
}
问题来了。 Loop 找到了我的两个监视器和所有监视器的 returns pOutput 指针,但是当我尝试触发 GetDesc(odesc) 时,没有返回 odesc。看起来 pOutput 指针指向...空对象。枚举可用显示模式会导致 0 个可用模式,无论我想检查哪种后台缓冲区格式。
谢谢, 帕特里克
当 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);
}
另外记得释放 IDXGIOutput 否则你会发生内存泄漏: 参见 here。