Правильно обрабатывать Alt Tab в полноэкранном приложении OpenGL - PullRequest
2 голосов
/ 29 апреля 2011

Когда я пытался реализовать простое приложение OpenGL, я был удивлен, что хотя легко найти множество примеров и документации по продвинутым средствам рендеринга, среда Win32 плохо документирована, и даже большинство примеров и учебных пособий не реализуютэто правильно даже для базовых случаев, не говоря уже о продвинутых вещах, таких как несколько мониторов.Несмотря на несколько часов поиска, я не смог найти способ, который бы надежно обрабатывал Alt-Tab.

Как полноэкранное приложение OpenGL должно реагировать на Alt-Tab?На какие сообщения должно реагировать приложение (WM_ACTIVATE, WM_ACTIVATEAPP)?Какой должна быть реакция?(Изменить разрешение экрана, уничтожить / создать контекст рендеринга или уничтожить / создать некоторые ресурсы OpenGL?)

Ответы [ 2 ]

3 голосов
/ 29 апреля 2011

Если приложение использует какой-то цикл анимации, приостановите цикл, а затем просто сверните окно.Если оно изменило разрешение экрана и вернул гамму к настройкам перед их изменением.

Нет необходимости уничтожать контекст или ресурсы OpenGL;OpenGL использует абстрактную модель ресурсов: если другой программе требуется оперативная память графического процессора или других ресурсов, ресурсы ваших программ будут прозрачно выгружены.

РЕДАКТИРОВАТЬ:

Для изменения состояния видимости окна может потребоватьсясбросьте окно просмотра OpenGL, поэтому рекомендуется либо вызвать glViewport соответствующим образом в функции отображения / рендеринга, либо, по крайней мере, установить его в обработчике изменения размера с последующим полным перерисовыванием.

0 голосов
/ 04 мая 2019

У меня тоже были проблемы с этим. Я решил это, оставив полноэкранный режим на WM_ACTIVATE(WA_INACTIVE) и снова введя его на WM_ACTIVATE(WA_ACTIVE). Если приложение остается в полноэкранном режиме, когда оно неактивно, мое окно иногда будет рисовать поверх других приложений, даже если другое приложение получит все сообщения.

...