SDL OpenGL Alt-tab в полноэкранном режиме приводит к непредсказуемым результатам - PullRequest
17 голосов
/ 25 июня 2011

Я пишу игру на C ++ с использованием SDL 1.2.14 и включенных в нее привязок OpenGL.

Однако, если игра в полноэкранном режиме и я Alt - Вкладка затем обратно в игру, результаты непредсказуемы.Логика игры все еще работает.Однако рендеринг останавливается.Я вижу только последний кадр игры, нарисованный перед Alt-tab

. Я позаботился о том, чтобы заново инициализировать контекст OpenGL и перезагрузить все текстуры, когда получаю событие SDL_APPACTIVE = 1, и это кажетсяработать только для одной Alt - Tab , тогда все последующие Alt - Tab s прекратят рендеринг (я уверен SDL_APPACTIVE правильно обрабатывается каждый раз и соответствующим образом настраивает контекст.)

Я бы рискнул предположить, что SDL делает что-то под капотом при минимизации приложения, о котором я не знаю.

Есть идеи?

1 Ответ

1 голос
/ 13 июля 2011

Это хорошая практика, чтобы "замедлить" ваше полноэкранное приложение, когда оно теряет фокус.Две причины:

  1. Пользователю может потребоваться Alt-Tab и сделать что-то важное (например, закрыть тяжелое приложение, которое загружает ресурсы).Когда он переключается, новое приложение берет на себя управление, и ОС должна высвобождать ресурсы из вашего приложения по мере необходимости
  2. Современная ОС использует много графических процессоров - это означает, что для работы ей необходимо освободить некоторое количество графической памяти.

Попробуйте выключить каждый ресурс GL, который вы используете, когда APPACTIVE = 0, и распределите их снова в APPACTIVE = 1.Если это решит, это была «твоя вина».Если это не решает, это ошибка SDL (или GL или OS).

РЕДАКТИРОВАТЬ: s / SO / OS / g

...