DXGI EnumOutputs — нет DXGI_OUTPUT_DESC и пустой массив режимов отображения

Просто столкнулся со странной проблемой при попытке получить доступные режимы отображения. Позволь мне объяснить…

Сначала я перечисляю доступные адаптеры и затем нажимаю на 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

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);
}
2

Другие решения

Также не забудьте освободить IDXGIOutput, иначе у вас будет утечка памяти:
Увидеть Вот.

-2

По вопросам рекламы [email protected]