Перечисление устройств и режимов отображения для рендеринга OpenGL

В настоящее время я пишу средство визуализации OpenGL и частично пишу несколько классов для перечисления адаптеров дисплея, устройств и режимов для использования в раскрывающихся списках.

Я использую EnumDisplayDevices для получения адаптеров, а затем EnumDisplaySettings для каждого устройства, что дает мне bpp, ширину, высоту и частоту обновления. Однако я не уверен, как узнать, какие режимы доступны в полноэкранном режиме (похоже, для этого нет флага в структуре DEVMODE). Могу ли я предположить, что все перечисленные режимы в принципе могут быть реализованы в полноэкранном режиме?

В качестве дополнительного вопроса: является ли этот подход к перечислению устройств лучшим способом получения необходимой информации в Windows?


person Robinson    schedule 17.12.2010    source источник


Ответы (3)


В OpenGL нет такого различия между оконным и полноэкранным режимами. Если вы хотите, чтобы программа OpenGL была полноэкранной, вы просто устанавливаете окно верхнего уровня, без полей, без оформления, оставайтесь сверху и максимальных размеров.

person datenwolf    schedule 18.12.2010
comment
Полноэкранный режим — это не то же самое, что окно, которое занимает весь экран! - person Tara; 18.12.2015
comment
@Dudeson: Для OpenGL это так. В Windows и X11 это так. В MacOS X был специальный эксклюзивный полноэкранный режим доступа, но с тех пор он также был удален. - person datenwolf; 18.12.2015
comment
@datenwolf: Это очень удивительно. Я имею в виду, что приложения, работающие в полноэкранном режиме, обычно меняют разрешение рабочего стола. В оконном полноэкранном режиме в этом нет необходимости. Пример: glfw.org/docs/latest/window.html#window_full_screen Хотя я могу неправильно понять. - person Tara; 19.12.2015
comment
@Dudeson: Это изменение разрешения не имеет ничего общего с выделенным полноэкранным режимом в OpenGL. Это просто переключение разрешения экрана с помощью того же API, что и панель управления Windows. Причина переключения разрешения в первую очередь состоит в том, чтобы уменьшить количество отрисовываемых пикселей, при желании увеличить частоту кадров. GLFW имеет открытый исходный код, поэтому я предлагаю вам взглянуть на ответственный код. - person datenwolf; 20.12.2015
comment
@datenwolf: Я так и думал... Попробую посмотреть источник. - person Tara; 20.12.2015
comment
@datenwolf: сейчас я посмотрел на источник. Кажется, он просто создает окно. Но можете ли вы сказать мне, почему тогда ALT+TAB является такой проблемой для некоторых приложений? Я имею в виду, что если это просто окно, которое заполняет экран, то почему из-за этого некоторые приложения вылетают? - person Tara; 20.12.2015
comment
@Dudeson: Те приложения, для которых Alt + Tab является проблемой, обычно используют не OpenGL, а (более старую версию) Direct3D. Direct3D действительно имеет эксклюзивный полноэкранный режим, при переключении обратно на рабочий стол все графические ресурсы будут потеряны и должны быть перезагружены по возвращении; эта уборка вызывает проблемы для некоторых приложений и является причиной того, что эксклюзивный доступ к графике - такая плохая идея. OpenGL этого не делает, и игры на основе OpenGL (которых меньшинство) обычно не имеют проблем с Alt+Tab. - person datenwolf; 20.12.2015
comment
@datenwolf: Большое спасибо! Это многое прояснило для меня. Так есть ли в Direct3D эксклюзивный полноэкранный режим или он устарел? - person Tara; 20.12.2015

На самом деле вопрос выше глупый. По определению оконный режим должен быть с текущими настройками дисплея. Все остальные режимы должны быть доступны в полноэкранном режиме (при условии, что ОС их поддерживает, т.е. 640x480 не рекомендуется в Vista/7).

person Robinson    schedule 17.12.2010

Хммм, вообще не правильно, да и с отношением тоже. У вас есть множество функций, которые можно использовать.

SetPixelFormat, ChoosePixelFormat, ChangeDisplaySettings.

Функции PixelFormat позволят вам перечислить доступные режимы. ChangeDisplaySettings позволяет вам установить любой режим экрана (включая разрядность), который хочет ваше приложение. Найдите их в MSDN.

person satsumo    schedule 19.12.2010
comment
Я полагаю, что это нормально иметь отношение к своему собственному вопросу: с. - person Robinson; 20.12.2010
comment
Я не заметил, что вы сами ответили на свой вопрос. Думаю, в таком случае я мог бы простить такое отношение :oP - person satsumo; 21.12.2010