Просто столкнулся со странной проблемой при попытке получить доступные режимы отображения. Позволь мне объяснить…
Сначала я перечисляю доступные адаптеры и затем нажимаю на 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
Вы передаете нулевой указатель на 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, иначе у вас будет утечка памяти:
Увидеть Вот.