Gles2WatchFaceService устарел? Что теперь?

Для моего проекта циферблата Wear OS я использую Gles2WatchFaceService , поэтому при необходимости циферблат имеет плавную анимацию OpenGL . Я только что обновил в build.gradle следующую зависимость:

      implementation 'com.google.android.support:wearable:2.9.0'

Старая версия была 2.8.1. Теперь, с 2.9.0, я вижу это в моем основном файле проекта при наведении курсора мыши на Gles2WatchFaceService:

Похоже, Gles2WatchFaceService и WatchFaceService устарели . Если да, то что я могу использовать вместо этого? Я нашел это предупреждение в https://developer.android.com/reference/android/support/wearable/watchface/WatchFaceService:

      This class is deprecated.
Use androidx.wear.watchface.WatchFaceService from the Jetpack Wear Watch Face libraries instead.

А как насчет Gles2WatchFaceService? Любая помощь приветствуется.

2 ответа

См. https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer .

Циферблаты, для которых требуется рендеринг GLES20, должны расширять свой Renderer от этого класса.

Ожидается, что GlesRenderer будет создан в фоновом потоке, связанном с WatchFaceService.getBackgroundThreadHandler внутри вызова WatchFaceService.createWatchFace. Весь рендеринг выполняется в UiThread. Между построением и рендерингом существует барьер памяти, поэтому не требуются специальные примитивы потоковой обработки.

Два связанных EGLContext создаются eglBackgroundThreadContext и eglUiThreadContext, которые связаны с фоном и UiThread соответственно и совместно используются всеми экземплярами средства визуализации. Объекты OpenGL, созданные на одном (например, шейдеры и текстуры), можно использовать на другом.

Поскольку при редактировании может быть несколько экземпляров, для экономии памяти рекомендуется переопределить createSharedAssets и загрузить все статические данные (например, модели, текстуры, шейдеры и т. д.). Объекты OpenGL, созданные внутри createSharedAssets, будут доступны для всех экземпляров циферблата в обоих потоках.

Если вам нужно сделать какие-либо вызовы OpenGl вне рендеринга, onBackgroundThreadGlContextCreated или onUiThreadGlSurfaceCreated, вы должны использовать либо runUiThreadGlCommands, либо runBackgroundThreadGlCommands для выполнения Runnable внутри соответствующего контекста. Такой доступ к контекстам GL необходим, потому что контексты GL не используются совместно средствами визуализации, и одновременно может существовать несколько экземпляров циферблата (например, безголовые и интерактивные, потенциально с разных циферблатов, если APK содержит более одного WatchFaceService). Кроме того, большинство драйверов не поддерживают одновременный доступ.

В Java может быть проще расширить androidx.wear.watchface.ListenableGlesRenderer.

Согласно примечанию к выпуску: https://developer.android.com/wear/releases

      Version 2.9.0 of the Wearable Support Library deprecates all remaining classes. The Wear OS Jetpack libraries should now be used instead.
Другие вопросы по тегам