Запустить Android OpenGL в фоновом режиме, как рендеринг ресурсов для приложения?
Я хочу запустить поверхность Android OpenGL-ES на фоне моего приложения, чтобы предоставить динамические графические ресурсы (растровые изображения и т.д.) для приложения. OpenGl GLSurfaceView не является видимым экраном моего приложения; он используется только как рендеринг factory для производства графики для использования в основном виде деятельности.
Кто-нибудь знает, как запустить Android GLSurfaceView, если он не является активным? В документации Google Android ясно, что когда GLSurfaceView теряет свой статус основного вида, поверхность уничтожается вместе со всеми ее ресурсами.
Есть ли способ сохранить GLSurfaceView и связанный с ним GLSurfaceView.Renderer нормально работать, когда он не является (и никогда не является) основным видом приложения?
Ответы
Ответ 1
Для того, что вы пытаетесь сделать, вы должны полностью пропустить GLSurfaceView. Так как вы просто хотите сделать рендеринг с открытым экраном OpenGL, вы можете использовать буфер пикселов EGL и преобразовать его в растровое изображение. См. этот поток в anddev для решения. Я использовал его очень успешно в нескольких моих приложениях.
Реализация в нижней части этого потока немного ошибочна, поскольку она делает очень простой выбор EGL. Я бы рекомендовал внедрить более надежный выбор, который вы можете найти в Robert Green GLWallpaperService, если хотите.
Еще одно изменение, которое я закончил, заключалось в удалении зеркального отражения по вертикали. Я просто перевернул свой viewport в onSurfaceCreate, вместо того, чтобы вручную перевернуть отображаемые пиксели при записи в растровое изображение.
Удачи!
Ответ 2
Я бы настоятельно рекомендовал вам не пытаться это делать. Многие текущие драйверы на устройствах Android не поддерживают несколько активных контекстов GL во всех процессах; если драйвер действительно поддерживает это, функция не была реализована, потому что сам Android этого не делает, поэтому могут возникнуть неприятные ошибки.
Несколько GL-контекст используется только платформой, начиная с Android 3.0.