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