Creating and managing an EGL context and surface is mandatory to perform GLES drawing and
is very easy with Egloo. Classes that help in this start with the Egl
prefix.
The first thing to do is creating an EGL context. This can be done through the EglCore
class:
val core = EglCore()
// At the end...
core.release()
The core object will configure a GLES 2 or GLES 3 compatible EGL context, based on the presence
of the EglCore.FLAG_TRY_GLES3
class. When you are done, the core should always be released.
The core object can also accept a shared context in the constructor, so that the new EGL context will share data with the old one.
After creation, EglCore
can be used to create EGL surfaces.
Each EglCore
object can be used to create one or more EglSurface
, which represent the output
where our GLES rendered data will be drawn. Egloo supports two types of surfaces.
After usage, all surfaces should be released with surface.release()
.
The EglWindowSurface
uses a android.view.Surface
or SurfaceTexture
as output, two objects that
can be considered system windows in Android. Anything drawn on this window will be passed to the
given Surface
or SurfaceTexture
, for display or processing.
// Create window and make it the current EGL surface
val window = EglWindowSurface(core, output)
window.makeCurrent()
// Draw something
// ...
// Publish drawn content into output
window.swapBuffers()
The EglOffscreenSurface
requires a width
and a height
in the constructor and corresponds to
an EGL pixel buffer surface which does not depend on any platform window.
// Create pbuffer and make it the current EGL surface
val pbuffer = EglOffscreenSurface(core, 100, 100)
pbuffer.makeCurrent()
// Draw something
// ...
// Offscreen surfaces are single buffered, so
// you don't need to swapBuffers() to publish
When using the android.opengl.GLSurfaceView
class, you can use two methods to control the EGL context
initialization. Egloo provides static implementations of these:
// For GLES2...
glSurfaceView.setEGLContextFactory(EglContextFactory.GLES2)
glSurfaceView.setEGLConfigChooser(EglContextFactory.GLES2)
// For GLES3...
glSurfaceView.setEGLContextFactory(EglContextFactory.GLES3)
glSurfaceView.setEGLConfigChooser(EglContextFactory.GLES3)