Android: сохранить EGLContext при повороте экрана
Я пишу приложение Android OpenGL ES, которое потенциально может иметь много ресурсов, текстур, шейдеров и т. Д. Для загрузки. Обычно EGLContext удаляется при разрушении вида, например, когда изменяется ориентация экрана. Поскольку загрузка всех необходимых ресурсов в OpenGL, компиляция шейдеров, создание мип-карт и т. Д. Может занять значительное время, я ищу способ сохранить контекст EGL при изменении ориентации экрана, чтобы это не нужно делать каждый раз, когда устройство поворачивается.
Дополнительная информация: я использую GLSurfaceView. Я попытался реализовать пользовательский EGLContextFactory, который создает EGLContext, а затем каждый раз возвращает один и тот же контекст в новый GLSurfaceView. Однако, когда устройство вращается, выдается ошибка EGL_BAD_CONTEXT, предположительно, потому что старое представление больше не существует или потому что новое представление не совпадает с тем, на котором был создан EGLContext для рисования.
Должен быть какой-то способ сохранить контекст. К сожалению, API EGLContext очень минимален и не позволяет изменять контекст после его создания. Есть ли способ, например, разделить поверхность, на которой рисует контекст, между несколькими видами?
1 ответ
Я использую NDK, но поворот устройства не заставляет меня перезагружать любой мой контекст. Из того, что я прочитал в коде, eglMakeCurrent связывает контекст с новыми поверхностями.
Я использую некоторый написанный на nVidia код, который управляет этим для меня, но он выглядит как простой конечный автомат, который перепривязывает старый контекст к новой поверхности.
Я знаю, что это код C/C++, а не Java, но шаги и порядок должны быть одинаковыми.