# EGLManager

Artifact: [androidx.graphics:graphics-core](https://developer.android.com/jetpack/androidx/releases/graphics) [View Source](https://cs.android.com/search?q=file:androidx/graphics/opengl/egl/EGLManager.kt+class:androidx.graphics.opengl.egl.EGLManager) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

*** ** * ** ***


```
public final class EGLManager
```

<br />

*** ** * ** ***

Class responsible for configuration of EGL related resources. This includes initialization of the corresponding EGL Display as well as EGL Context, among other EGL related facilities.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#EGLManager(androidx.graphics.opengl.egl.EGLSpec)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLSpec eglSpec)` |

| ### Public methods |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLContext.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#createContext(android.opengl.EGLConfig)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLConfig.html config)` Creates an `https://developer.android.com/reference/android/opengl/EGLContext.html` from the given `https://developer.android.com/reference/android/opengl/EGLConfig.html` returning null if the context could not be created |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getCurrentDrawSurface()()` Returns the current surface used for drawing pixel content |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getCurrentReadSurface()()` Returns the current surface used for reading back or copying pixels |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getDefaultSurface()()` Returns the default surface. |
| `final https://developer.android.com/reference/android/opengl/EGLConfig.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getEGLConfig()()` Returns the `https://developer.android.com/reference/android/opengl/EGLConfig.html` used to load the current `https://developer.android.com/reference/android/opengl/EGLContext.html`. |
| `final https://developer.android.com/reference/android/opengl/EGLContext.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getEGLContext()()` Returns the current EGLContext. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLSpec` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getEGLSpec()()` |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLVersion` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#getEGLVersion()()` Returns the EGL version that is supported. |
| `final void` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#initialize()()` Initialize the EGLManager. |
| `final boolean` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#isExtensionSupported(kotlin.String)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html extensionName)` Determines whether the extension with the provided name is supported. |
| `final https://developer.android.com/reference/android/opengl/EGLConfig.html` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#loadConfig(androidx.graphics.opengl.egl.EGLConfigAttributes)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLConfigAttributes configAttributes)` Attempt to load an `https://developer.android.com/reference/android/opengl/EGLConfig.html` instance from the given `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLConfigAttributes`. |
| `final boolean` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#makeCurrent(android.opengl.EGLSurface,android.opengl.EGLSurface)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html drawSurface, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html readSurface )` Binds the current context to the given draw and read surfaces. |
| `final void` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#release()()` Release the resources allocated by EGLManager. |
| `final void` | `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#swapAndFlushBuffers()()` Post EGL surface color buffer to a native window. |

## Public constructors

### EGLManager

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public EGLManager(@NonNull EGLSpec eglSpec)
```

## Public methods

### createContext

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final @NonNull EGLContext createContext(@NonNull EGLConfig config)
```

Creates an `https://developer.android.com/reference/android/opengl/EGLContext.html` from the given `https://developer.android.com/reference/android/opengl/EGLConfig.html` returning null if the context could not be created

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLException` | if the default surface could not be made current after context creation |

### getCurrentDrawSurface

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final @NonNull EGLSurface getCurrentDrawSurface()
```

Returns the current surface used for drawing pixel content

### getCurrentReadSurface

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final @NonNull EGLSurface getCurrentReadSurface()
```

Returns the current surface used for reading back or copying pixels

### getDefaultSurface

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final @NonNull EGLSurface getDefaultSurface()
```

Returns the default surface. This can be an offscreen pixel buffer surface or `https://developer.android.com/reference/android/opengl/EGL14.html#EGL_NO_SURFACE` if the surfaceless context extension is supported.

### getEGLConfig

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final EGLConfig getEGLConfig()
```

Returns the `https://developer.android.com/reference/android/opengl/EGLConfig.html` used to load the current `https://developer.android.com/reference/android/opengl/EGLContext.html`. This is configured after `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#createContext(android.opengl.EGLConfig)` is invoked.

### getEGLContext

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final EGLContext getEGLContext()
```

Returns the current EGLContext. This parameter is configured after `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#initialize()` is invoked

### getEGLSpec

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final @NonNull EGLSpec getEGLSpec()
```

### getEGLVersion

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final @NonNull EGLVersion getEGLVersion()
```

Returns the EGL version that is supported. This parameter is configured after `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#initialize()` is invoked.

### initialize

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final void initialize()
```

Initialize the EGLManager. This initializes the default display as well as queries the supported extensions

### isExtensionSupported

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final boolean isExtensionSupported(@NonNull String extensionName)
```

Determines whether the extension with the provided name is supported. The string provided is expected to be one of the named extensions defined within the OpenGL extension documentation.

See `https://developer.android.com/reference/androidx/opengl/EGLExt` for additional documentation for given extension name constants and descriptions.

The set of supported extensions is configured after `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#initialize()` is invoked. Attempts to query support for any extension beforehand will return false.

### loadConfig

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final EGLConfig loadConfig(@NonNull EGLConfigAttributes configAttributes)
```

Attempt to load an `https://developer.android.com/reference/android/opengl/EGLConfig.html` instance from the given `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLConfigAttributes`. If the `https://developer.android.com/reference/android/opengl/EGLConfig.html` could not be loaded this returns null

### makeCurrent

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final boolean makeCurrent(
    @NonNull EGLSurface drawSurface,
    @NonNull EGLSurface readSurface
)
```

Binds the current context to the given draw and read surfaces. The draw surface is used for all operations except for any pixel data read back or copy operations which are taken from the read surface.

The same EGLSurface may be specified for both draw and read surfaces.

If the context is not previously configured, the only valid parameters for the draw and read surfaces is `https://developer.android.com/reference/android/opengl/EGL14.html#EGL_NO_SURFACE`. This is useful to make sure there is always a surface specified and to release the current context without assigning a new one.

See https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglMakeCurrent.xhtml

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html drawSurface` | Surface used for all operations that involve writing pixel information |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/opengl/EGLSurface.html readSurface` | Surface used for pixel data read back or copy operations. By default this is the same as `https://developer.android.com/reference/androidx/graphics/opengl/egl/EGLManager#makeCurrent(android.opengl.EGLSurface,android.opengl.EGLSurface)` |

### release

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final void release()
```

Release the resources allocated by EGLManager. This will destroy the corresponding EGLContext instance if it was previously initialized. The configured EGLVersion as well as EGLExtensions

### swapAndFlushBuffers

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/graphics#1.0.0)

```
public final void swapAndFlushBuffers()
```

Post EGL surface color buffer to a native window. If the current drawing surface is single buffered this will flush the buffer