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.