SDL OpenlGL Alt-tab в полноэкранном режиме имеет непредсказуемые результаты

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

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

Я попытался повторно инициализировать контекст OpenGL и перезагрузить все текстуры, когда получаю событие SDL_APPACTIVE = 1, и, похоже, работает только для одной alt-tab, тогда все последующие Alt-tabs прекратят рендеринг (I "Убедитесь, что SDL_APPACTIVE правильно обрабатывается каждый раз и соответствующим образом настраивает контекст.)

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

Любые идеи?

Ответы

Ответ 1

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

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

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

EDIT: s/SO/OS/g