# Renderer.GlesRenderer2

Artifact: [androidx.wear.watchface:watchface](https://developer.android.com/jetpack/androidx/releases/wear-watchface) [View Source](https://cs.android.com/search?q=file:androidx/wear/watchface/Renderer.kt+class:androidx.wear.watchface.Renderer.GlesRenderer2) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.1.0) Deprecated in [1.3.0-alpha07](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.3.0-alpha07)

*** ** * ** ***

<br />

```
public abstract class Renderer.GlesRenderer2<SharedAssetsT extends Renderer.SharedAssets> extends Renderer.GlesRenderer
```

<br />

|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) ||||
| ↳ | [androidx.wear.watchface.Renderer](https://developer.android.com/reference/androidx/wear/watchface/Renderer) |||
|   | ↳ | [androidx.wear.watchface.Renderer.GlesRenderer](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer) ||
|   |   | ↳ | [androidx.wear.watchface.Renderer.GlesRenderer2](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2) |

Known direct subclasses [ListenableGlesRenderer2](https://developer.android.com/reference/androidx/wear/watchface/ListenableGlesRenderer2)

|---|---|
| `https://developer.android.com/reference/androidx/wear/watchface/ListenableGlesRenderer2` | **This class is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |

*** ** * ** ***

> [!CAUTION]
> **This class is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

Watch faces that require `https://developer.android.com/reference/android/opengl/GLES20.html` rendering and are able to take advantage of `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets` to save memory (there can be more than once instance when editing), should extend their `https://developer.android.com/reference/androidx/wear/watchface/Renderer` from this class. OpenGL objects created by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` will be available to all instances of the watch face on both threads.

A GlesRenderer is expected to be constructed on the background thread associated with `https://developer.android.com/reference/androidx/wear/watchface/WatchFaceService#getBackgroundThreadHandler()` inside a call to `https://developer.android.com/reference/androidx/wear/watchface/WatchFaceService#createWatchFace(android.view.SurfaceHolder,androidx.wear.watchface.WatchState,androidx.wear.watchface.ComplicationSlotsManager,androidx.wear.watchface.style.CurrentUserStyleRepository)`. All rendering is be done on the UiThread. There is a memory barrier between construction and rendering so no special threading primitives are required.

Two linked `https://developer.android.com/reference/android/opengl/EGLContext.html`s are created `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#eglBackgroundThreadContext()` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#eglUiThreadContext()` which are associated with background and UiThread respectively and are shared by all instances of the renderer. OpenGL objects created on (e.g. shaders and textures) can be used on the other.

If you need to make any OpenGl calls outside of `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)`, `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onBackgroundThreadGlContextCreated()` or `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onUiThreadGlSurfaceCreated(kotlin.Int,kotlin.Int)` then you must use either `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runUiThreadGlCommands(kotlin.coroutines.SuspendFunction0)` or `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runBackgroundThreadGlCommands(kotlin.coroutines.SuspendFunction0)` to execute a `https://developer.android.com/reference/java/lang/Runnable.html` inside of the corresponding context. Access to the GL contexts this way is necessary because GL contexts are not shared between renderers and there can be multiple watch face instances existing concurrently (e.g. headless and interactive, potentially from different watch faces if an APK contains more than one `https://developer.android.com/reference/androidx/wear/watchface/WatchFaceService`). In addition most drivers do not support concurrent access.

In Java it may be easier to extend `https://developer.android.com/reference/androidx/wear/watchface/ListenableGlesRenderer2` instead.

use Watch Face Format instead

| Parameters |
|---|---|
| `<SharedAssetsT extends https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets>` | The type extending `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets` returned by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` and passed into `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer.GlesException` | If any GL calls fail during initialization. |

## Summary

| ### Public constructors |
|---|
| `@https://developer.android.com/reference/androidx/annotation/WorkerThread <SharedAssetsT extends https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets> [GlesRenderer2](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#GlesRenderer2(android.view.SurfaceHolder,androidx.wear.watchface.style.CurrentUserStyleRepository,androidx.wear.watchface.WatchState,kotlin.Long,kotlin.IntArray,kotlin.IntArray,kotlin.IntArray))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/SurfaceHolder.html surfaceHolder, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/style/CurrentUserStyleRepository currentUserStyleRepository, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/WatchState watchState, @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0, to = 60000) long interactiveDrawModeUpdateDelayMillis, @https://developer.android.com/reference/androidx/annotation/NonNull int[] eglConfigAttribList, @https://developer.android.com/reference/androidx/annotation/NonNull int[] eglSurfaceAttribList, @https://developer.android.com/reference/androidx/annotation/NonNull int[] eglContextAttribList )` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |
| `@https://developer.android.com/reference/androidx/annotation/WorkerThread <SharedAssetsT extends https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets> [GlesRenderer2](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#GlesRenderer2(android.view.SurfaceHolder,androidx.wear.watchface.style.CurrentUserStyleRepository,androidx.wear.watchface.WatchState,kotlin.Long,kotlin.collections.List,kotlin.IntArray,kotlin.IntArray))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/SurfaceHolder.html surfaceHolder, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/style/CurrentUserStyleRepository currentUserStyleRepository, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/WatchState watchState, @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0, to = 60000) long interactiveDrawModeUpdateDelayMillis, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull int[]> eglConfigAttribListList, @https://developer.android.com/reference/androidx/annotation/NonNull int[] eglSurfaceAttribList, @https://developer.android.com/reference/androidx/annotation/NonNull int[] eglContextAttribList )` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |

| ### Public methods |
|---|---|
| `final int` | `[getSelectedEglConfigAttribListIndex](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#getSelectedEglConfigAttribListIndex())()` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |
| `final void` | `[render](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime)` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |
| `abstract void` | `@https://developer.android.com/reference/androidx/annotation/UiThread [render](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime, @https://developer.android.com/reference/androidx/annotation/NonNull SharedAssetsT sharedAssets )` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |
| `final void` | `[renderHighlightLayer](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime)` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |
| `abstract void` | `@https://developer.android.com/reference/androidx/annotation/UiThread [renderHighlightLayer](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets))( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime, @https://developer.android.com/reference/androidx/annotation/NonNull SharedAssetsT sharedAssets )` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |

| ### Protected methods |
|---|---|
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull SharedAssetsT` | `@https://developer.android.com/reference/androidx/annotation/WorkerThread [createSharedAssets](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets())()` **This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead. |

### Inherited methods

From [androidx.wear.watchface.Renderer](https://developer.android.com/reference/androidx/wear/watchface/Renderer) `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Collection.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-pair/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/ContentDescriptionLabel>>` `[getAdditionalContentDescriptionLabels](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getAdditionalContentDescriptionLabels())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final float` `[getCenterX](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getCenterX())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final float` `[getCenterY](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getCenterY())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final long` `[getInteractiveDrawModeUpdateDelayMillis](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getInteractiveDrawModeUpdateDelayMillis())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/graphics/Rect.html` `@https://developer.android.com/reference/androidx/annotation/UiThread
[getMainClockElementBounds](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getMainClockElementBounds())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/RenderParameters` `[getRenderParameters](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getRenderParameters())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/graphics/Rect.html` `[getScreenBounds](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getScreenBounds())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/SurfaceHolder.html` `[getSurfaceHolder](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getSurfaceHolder())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final https://developer.android.com/reference/androidx/wear/watchface/WatchFaceColors` `@https://developer.android.com/reference/androidx/wear/watchface/WatchFaceExperimental
[getWatchfaceColors](https://developer.android.com/reference/androidx/wear/watchface/Renderer#getWatchfaceColors())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `@https://developer.android.com/reference/androidx/annotation/UiThread
[invalidate](https://developer.android.com/reference/androidx/wear/watchface/Renderer#invalidate())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`void` `@https://developer.android.com/reference/androidx/annotation/UiThread
[onRenderParametersChanged](https://developer.android.com/reference/androidx/wear/watchface/Renderer#onRenderParametersChanged(androidx.wear.watchface.RenderParameters))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/RenderParameters renderParameters)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[postInvalidate](https://developer.android.com/reference/androidx/wear/watchface/Renderer#postInvalidate())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[sendPreviewImageNeedsUpdateRequest](https://developer.android.com/reference/androidx/wear/watchface/Renderer#sendPreviewImageNeedsUpdateRequest())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[setAdditionalContentDescriptionLabels](https://developer.android.com/reference/androidx/wear/watchface/Renderer#setAdditionalContentDescriptionLabels(kotlin.collections.Collection))(

@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Collection.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-pair/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Integer.html, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/ContentDescriptionLabel>> value

)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[setInteractiveDrawModeUpdateDelayMillis](https://developer.android.com/reference/androidx/wear/watchface/Renderer#setInteractiveDrawModeUpdateDelayMillis(kotlin.Long))(long value)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[setSurfaceHolder](https://developer.android.com/reference/androidx/wear/watchface/Renderer#setSurfaceHolder(android.view.SurfaceHolder))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/SurfaceHolder.html value)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `@https://developer.android.com/reference/androidx/wear/watchface/WatchFaceExperimental
[setWatchfaceColors](https://developer.android.com/reference/androidx/wear/watchface/Renderer#setWatchfaceColors(androidx.wear.watchface.WatchFaceColors))(https://developer.android.com/reference/androidx/wear/watchface/WatchFaceColors value)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`boolean` `@https://developer.android.com/reference/androidx/annotation/UiThread
[shouldAnimate](https://developer.android.com/reference/androidx/wear/watchface/Renderer#shouldAnimate())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
From [androidx.wear.watchface.Renderer.GlesRenderer](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer) `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLContext.html` `[getEglBackgroundThreadContext](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#getEglBackgroundThreadContext())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLConfig.html` `[getEglConfig](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#getEglConfig())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLDisplay.html` `[getEglDisplay](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#getEglDisplay())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLContext.html` `[getEglUiThreadContext](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#getEglUiThreadContext())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`void` `@https://developer.android.com/reference/androidx/annotation/WorkerThread
[onBackgroundThreadGlContextCreated](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onBackgroundThreadGlContextCreated())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`void` `@https://developer.android.com/reference/androidx/annotation/CallSuper
[onDestroy](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onDestroy())()`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`void` `[onDump](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onDump(java.io.PrintWriter))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/io/PrintWriter.html writer)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`void` `@https://developer.android.com/reference/androidx/annotation/UiThread
[onUiThreadGlSurfaceCreated](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onUiThreadGlSurfaceCreated(kotlin.Int,kotlin.Int))(@https://developer.android.com/reference/androidx/annotation/Px int width, @https://developer.android.com/reference/androidx/annotation/Px int height)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `@https://developer.android.com/reference/androidx/annotation/WorkerThread
[runBackgroundThreadGlCommands](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runBackgroundThreadGlCommands(kotlin.coroutines.SuspendFunction0))(@https://developer.android.com/reference/androidx/annotation/NonNull SuspendFunction0<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> commands)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[runUiThreadGlCommands](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runUiThreadGlCommands(kotlin.coroutines.SuspendFunction0))(@https://developer.android.com/reference/androidx/annotation/NonNull SuspendFunction0<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> commands)`

**This method is deprecated.** AndroidX watchface libraries are deprecated, use Watch Face Format instead.
`final void` `[setEglConfig](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#setEglConfig(android.opengl.EGLConfig))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLConfig.html eglConfig)`

**This method is deprecated.** It's not intended for eglConfig to be set
`final void` `[setEglDisplay](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#setEglDisplay(android.opengl.EGLDisplay))(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLDisplay.html eglDisplay)`

**This method is deprecated.** It's not intended for eglDisplay to be set

## Public constructors

### GlesRenderer2

```
@WorkerThread
public <SharedAssetsT extends Renderer.SharedAssets> [GlesRenderer2](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#GlesRenderer2(android.view.SurfaceHolder,androidx.wear.watchface.style.CurrentUserStyleRepository,androidx.wear.watchface.WatchState,kotlin.Long,kotlin.IntArray,kotlin.IntArray,kotlin.IntArray))(
    @NonNull SurfaceHolder surfaceHolder,
    @NonNull CurrentUserStyleRepository currentUserStyleRepository,
    @NonNull WatchState watchState,
    @IntRange(from = 0, to = 60000) long interactiveDrawModeUpdateDelayMillis,
    @NonNull int[] eglConfigAttribList,
    @NonNull int[] eglSurfaceAttribList,
    @NonNull int[] eglContextAttribList
)
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

Constructs a `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2`.

| Parameters |
|---|---|
| `<SharedAssetsT extends https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets>` | The type extending `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets` returned by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` and passed into `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/SurfaceHolder.html surfaceHolder` | The `https://developer.android.com/reference/android/view/SurfaceHolder.html` whose `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` will draw into. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/style/CurrentUserStyleRepository currentUserStyleRepository` | The associated `https://developer.android.com/reference/androidx/wear/watchface/style/CurrentUserStyleRepository`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/WatchState watchState` | The associated `https://developer.android.com/reference/androidx/wear/watchface/WatchState`. |
| `@https://developer.android.com/reference/androidx/annotation/IntRange(from = 0, to = 60000) long interactiveDrawModeUpdateDelayMillis` | The interval in milliseconds between frames in interactive `https://developer.android.com/reference/androidx/wear/watchface/DrawMode`s. To render at 60hz set to 16. Note when battery is low, the frame rate will be clamped to 10fps. Watch faces are recommended to use lower frame rates if possible for better battery life. Variable frame rates can also help preserve battery life, e.g. if a watch face has a short animation once per second it can adjust the frame rate inorder to sleep when not animating. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull int[] eglConfigAttribList` | Attributes for `https://developer.android.com/reference/android/opengl/EGL14.html#eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int)`. By default this selects an RGBA8888 back buffer. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull int[] eglSurfaceAttribList` | The attributes to be passed to `https://developer.android.com/reference/android/opengl/EGL14.html#eglCreateWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.lang.Object, int[], int)`. By default this is empty. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull int[] eglContextAttribList` | The attributes to be passed to `https://developer.android.com/reference/android/opengl/EGL14.html#eglCreateContext(android.opengl.EGLDisplay, android.opengl.EGLConfig, android.opengl.EGLContext, int[], int)`. By default this selects `https://developer.android.com/reference/android/opengl/EGL14.html#EGL_CONTEXT_CLIENT_VERSION` 2. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer.GlesException` | If any GL calls fail during initialization. |

### GlesRenderer2

```
@WorkerThread
public <SharedAssetsT extends Renderer.SharedAssets> [GlesRenderer2](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#GlesRenderer2(android.view.SurfaceHolder,androidx.wear.watchface.style.CurrentUserStyleRepository,androidx.wear.watchface.WatchState,kotlin.Long,kotlin.collections.List,kotlin.IntArray,kotlin.IntArray))(
    @NonNull SurfaceHolder surfaceHolder,
    @NonNull CurrentUserStyleRepository currentUserStyleRepository,
    @NonNull WatchState watchState,
    @IntRange(from = 0, to = 60000) long interactiveDrawModeUpdateDelayMillis,
    @NonNull List<@NonNull int[]> eglConfigAttribListList,
    @NonNull int[] eglSurfaceAttribList,
    @NonNull int[] eglContextAttribList
)
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

| Parameters |
|---|---|
| `<SharedAssetsT extends https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets>` | The type extending `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets` returned by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` and passed into `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/view/SurfaceHolder.html surfaceHolder` | The `https://developer.android.com/reference/android/view/SurfaceHolder.html` whose `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` will draw into. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/style/CurrentUserStyleRepository currentUserStyleRepository` | The associated `https://developer.android.com/reference/androidx/wear/watchface/style/CurrentUserStyleRepository`. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/wear/watchface/WatchState watchState` | The associated `https://developer.android.com/reference/androidx/wear/watchface/WatchState`. |
| `@https://developer.android.com/reference/androidx/annotation/IntRange(from = 0, to = 60000) long interactiveDrawModeUpdateDelayMillis` | The interval in milliseconds between frames in interactive `https://developer.android.com/reference/androidx/wear/watchface/DrawMode`s. To render at 60hz set to 16. Note when battery is low, the frame rate will be clamped to 10fps. Watch faces are recommended to use lower frame rates if possible for better battery life. Variable frame rates can also help preserve battery life, e.g. if a watch face has a short animation once per second it can adjust the frame rate inorder to sleep when not animating. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull int[]> eglConfigAttribListList` | A list of attributes to be tried in turn by `https://developer.android.com/reference/android/opengl/EGL14.html#eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int)`. The first one to succeed is chosen and its index is wrtten to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#selectedEglConfigAttribListIndex()`. If none succeed then a `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer.GlesException` will be thrown. An example use of this is to define a config with MSAA (anti-aliasing) and to fall back to one without where that's not available. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull int[] eglSurfaceAttribList` | The attributes to be passed to `https://developer.android.com/reference/android/opengl/EGL14.html#eglCreateWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.lang.Object, int[], int)`. By default this is empty. |
| `@https://developer.android.com/reference/androidx/annotation/NonNull int[] eglContextAttribList` | The attributes to be passed to `https://developer.android.com/reference/android/opengl/EGL14.html#eglCreateContext(android.opengl.EGLDisplay, android.opengl.EGLConfig, android.opengl.EGLContext, int[], int)`. By default this selects `https://developer.android.com/reference/android/opengl/EGL14.html#EGL_CONTEXT_CLIENT_VERSION` 2. |

## Public methods

### getSelectedEglConfigAttribListIndex

Added in [1.3.0-alpha07](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.3.0-alpha07) Deprecated in [1.3.0-alpha07](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.3.0-alpha07)

```
public final int [getSelectedEglConfigAttribListIndex](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#getSelectedEglConfigAttribListIndex())()
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

If an eglConfigAttribListList is specified then each list of attributes will be tried in turn by `https://developer.android.com/reference/android/opengl/EGL14.html#eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int)`. The first one to succeed is chosen and its index is written to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#selectedEglConfigAttribListIndex()`.

If an eglConfigAttribListList was not specified this will be zero. If this is accessed before the constructor has finished an exception will be thrown.

### render

```
public final void [render](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime))(@NonNull ZonedDateTime zonedDateTime)
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

Sub-classes should override this to implement their watch face rendering logic which should respect the current `https://developer.android.com/reference/androidx/wear/watchface/Renderer#renderParameters()`. Please note `https://developer.android.com/reference/androidx/wear/watchface/WatchState#isAmbient()` may not match the `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters#drawMode()` and should not be used to decide what to render. E.g. when editing from the companion phone while the watch is ambient, renders may be requested with `https://developer.android.com/reference/androidx/wear/watchface/DrawMode#INTERACTIVE`.

Any highlights due to `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters#highlightLayer()` should be rendered by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#renderHighlightLayer(java.time.ZonedDateTime)` instead where possible. For correct behavior this function must use the supplied `https://developer.android.com/reference/java/time/ZonedDateTime.html` in favor of any other ways of getting the time.

Note this function is called inside a lambda passed to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runUiThreadGlCommands(kotlin.coroutines.SuspendFunction0)` which has synchronized access to the GL context.

Note also `GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ZERO)` is called by the library before this method.

Before any calls to this function `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onBackgroundThreadGlContextCreated()` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onUiThreadGlSurfaceCreated(kotlin.Int,kotlin.Int)` will have been called once on their respective threads.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime` | The zonedDateTime `https://developer.android.com/reference/java/time/ZonedDateTime.html` to render with |

### render

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.1.0) Deprecated in [1.3.0-alpha07](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.3.0-alpha07)

```
@UiThread
public abstract void [render](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets))(
    @NonNull ZonedDateTime zonedDateTime,
    @NonNull SharedAssetsT sharedAssets
)
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

Sub-classes should override this to implement their watch face rendering logic which should respect the current `https://developer.android.com/reference/androidx/wear/watchface/Renderer#renderParameters()`. Please note `https://developer.android.com/reference/androidx/wear/watchface/WatchState#isAmbient()` may not match the `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters#drawMode()` and should not be used to decide what to render. E.g. when editing from the companion phone while the watch is ambient, renders may be requested with `https://developer.android.com/reference/androidx/wear/watchface/DrawMode#INTERACTIVE`.

Any highlights due to `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters#highlightLayer()` should be rendered by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` instead where possible. For correct behavior this function must use the supplied `https://developer.android.com/reference/java/time/ZonedDateTime.html` in favor of any other ways of getting the time.

Note this function is called inside a lambda passed to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runUiThreadGlCommands(kotlin.coroutines.SuspendFunction0)` which has synchronized access to the GL context.

Note also `GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ZERO)` is called by the library before this method.

Before any calls to this function `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onBackgroundThreadGlContextCreated()` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#onUiThreadGlSurfaceCreated(kotlin.Int,kotlin.Int)` will have been called once on their respective threads. In addition if `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets` hasn't already been created, then a call to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` will have been completed before calling render.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime` | The zonedDateTime `https://developer.android.com/reference/java/time/ZonedDateTime.html` to render with |
| `@https://developer.android.com/reference/androidx/annotation/NonNull SharedAssetsT sharedAssets` | The `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2` returned by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` |

### renderHighlightLayer

```
public final void [renderHighlightLayer](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime))(@NonNull ZonedDateTime zonedDateTime)
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

Sub-classes should override this to implement their watch face highlight layer rendering logic for the `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters#highlightLayer()` aspect of `https://developer.android.com/reference/androidx/wear/watchface/Renderer#renderParameters()`. Typically the implementation will clear the buffer to `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters.HighlightLayer#backgroundTint()` before rendering a transparent highlight or a solid outline around the `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters.HighlightLayer#highlightedElement()`. This will be composited as needed on top of the results of `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#render(java.time.ZonedDateTime)`. For correct behavior this function must use the supplied `https://developer.android.com/reference/java/time/ZonedDateTime.html` in favor of any other ways of getting the time.

Note this function is called inside a lambda passed to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runUiThreadGlCommands(kotlin.coroutines.SuspendFunction0)` which has synchronized access to the GL context.

Note also `GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ZERO)` is called by the library before this method.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime` | The zonedDateTime `https://developer.android.com/reference/java/time/ZonedDateTime.html` to render with |

### renderHighlightLayer

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.1.0) Deprecated in [1.3.0-alpha07](https://developer.android.com/jetpack/androidx/releases/wear-watchface#1.3.0-alpha07)

```
@UiThread
public abstract void [renderHighlightLayer](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets))(
    @NonNull ZonedDateTime zonedDateTime,
    @NonNull SharedAssetsT sharedAssets
)
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

Sub-classes should override this to implement their watch face highlight layer rendering logic for the `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters#highlightLayer()` aspect of `https://developer.android.com/reference/androidx/wear/watchface/Renderer#renderParameters()`. Typically the implementation will clear the buffer to `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters.HighlightLayer#backgroundTint()` before rendering a transparent highlight or a solid outline around the `https://developer.android.com/reference/androidx/wear/watchface/RenderParameters.HighlightLayer#highlightedElement()`. This will be composited as needed on top of the results of `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)`. For correct behavior this function must use the supplied `https://developer.android.com/reference/java/time/ZonedDateTime.html` in favor of any other ways of getting the time.

Note this function is called inside a lambda passed to `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer#runUiThreadGlCommands(kotlin.coroutines.SuspendFunction0)` which has synchronized access to the GL context.

Note also `GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ZERO)` is called by the library before this method.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/time/ZonedDateTime.html zonedDateTime` | The zonedDateTime `https://developer.android.com/reference/java/time/ZonedDateTime.html` to render with |
| `@https://developer.android.com/reference/androidx/annotation/NonNull SharedAssetsT sharedAssets` | The `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2` returned by `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets()` |

## Protected methods

### createSharedAssets

```
@WorkerThread
protected abstract @NonNull SharedAssetsT [createSharedAssets](https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#createSharedAssets())()
```

> [!CAUTION]
> **This method is deprecated.**   
> AndroidX watchface libraries are deprecated, use Watch Face Format instead. For more info see: https://developer.android.com/training/wearables/wff

When editing multiple `https://developer.android.com/reference/androidx/wear/watchface/WatchFaceService` instances and hence Renderers can exist concurrently (e.g. a headless instance and an interactive instance) and using `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets` allows memory to be saved by sharing immutable data (e.g. Bitmaps, shaders, etc...) between them.

To take advantage of SharedAssets, override this method. The constructed SharedAssets are passed into the `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` as an argument (NB you'll have to cast this to your type). It is safe to make GLES calls within this method.

When all instances using SharedAssets have been closed, `https://developer.android.com/reference/androidx/wear/watchface/Renderer.SharedAssets#onDestroy()` will be called.

Note that while SharedAssets are constructed on a background thread, they'll typically be used on the main thread and subsequently destroyed there. The watch face library constructs shared GLES contexts to allow resource sharing between threads.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull SharedAssetsT` | The `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2` that will be passed into `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#render(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)` and `https://developer.android.com/reference/androidx/wear/watchface/Renderer.GlesRenderer2#renderHighlightLayer(java.time.ZonedDateTime,androidx.wear.watchface.Renderer.SharedAssets)`. |