Запустить Android OpenGL в фоновом режиме в качестве ресурса рендеринга для приложения?

Я хочу запустить поверхность Android OpenGL-ES в фоновом режиме моего приложения, чтобы обеспечить динамические графические ресурсы (растровые изображения и т. Д.) Для приложения. OpenGl GLSurfaceView не является видимым экраном моего приложения; он используется только как фабрика рендеринга для производства графики для основной деятельности.

Кто-нибудь знает, как заставить работать Android GLSurfaceView, когда он не активен? Документация Google Android ясна, что когда GLSurfaceView теряет свой статус основного вида, поверхность разрушается вместе со всеми его ресурсами.

Есть ли способ сохранить GLSurfaceView и связанный с ним GLSurfaceView.Renderer нормально работающим, когда он не является (и никогда не работает) основным представлением приложения?

2 ответа

Для того, что вы пытаетесь сделать, вы должны полностью пропустить GLSurfaceView. Так как вы просто хотите сделать какую-то закадровую визуализацию OpenGL, вы можете использовать пиксельный буфер EGL и преобразовать его в растровое изображение. Смотрите эту ветку на anddev для решения. Я очень успешно использовал его в нескольких своих приложениях.

Реализация в нижней части этого потока немного ошибочна, так как она делает очень простой выбор EGL. Я бы порекомендовал реализовать более надежный выбор, который вы можете найти в GLWallpaperService Роберта Грина, если хотите.

Еще одно изменение, которое я закончил, заключалось в удалении вертикального зеркального отображения. Я просто перевернул окно просмотра в onSurfaceCreate, а не переворачивал вручную отображаемые пиксели при записи в растровое изображение.

Удачи!

Я настоятельно рекомендую вам не пытаться делать это. Многие текущие драйверы на устройствах Android не поддерживают несколько активных контекстов GL в разных процессах; если драйвер это поддерживает, эта функция не была реализована, потому что сам Android этого не делает, поэтому могут возникнуть неприятные ошибки.

Множественный контекст GL используется только платформой, начиная с Android 3.0.

Другие вопросы по тегам