eglMakeCurrent — attach an EGL rendering context to EGL surfaces

C Specification

EGLBoolean eglMakeCurrent( EGLDisplay display,
  EGLSurface draw,
  EGLSurface read,
  EGLContext context);



Specifies the EGL display connection.


Specifies the EGL draw surface.


Specifies the EGL read surface.


Specifies the EGL rendering context to be attached to the surfaces.


eglMakeCurrent binds context to the current rendering thread and to the draw and read surfaces. draw is used for all GL operations except for any pixel data read back (glReadPixels, glCopyTexImage2D, and glCopyTexSubImage2D), which is taken from the frame buffer values of read.

If the calling thread has already a current rendering context, that context is flushed and marked as no longer current.

The first time that context is made current, the viewport and scissor dimensions are set to the size of the draw surface. The viewport and scissor are not modified when context is subsequently made current.

To release the current context without assigning a new one, call eglMakeCurrent with draw and read set to EGL_NO_SURFACE and context set to EGL_NO_CONTEXT.

Use eglGetCurrentContext, eglGetCurrentDisplay, and eglGetCurrentSurface to query the current rendering context and associated display connection and surfaces.


EGL_FALSE is returned on failure, EGL_TRUE otherwise. If EGL_FALSE is returned, the previously current rendering context and surfaces (if any) remain unchanged.

EGL_BAD_DISPLAY is generated if display is not an EGL display connection.

EGL_NOT_INITIALIZED is generated if display has not been initialized.

EGL_BAD_SURFACE is generated if draw or read is not an EGL surface.

EGL_BAD_CONTEXT is generated if context is not an EGL rendering context.

EGL_BAD_MATCH is generated if draw or read are not compatible with context, or if context is set to EGL_NO_CONTEXT and draw or read are not set to EGL_NO_SURFACE, or if draw or read are set to EGL_NO_SURFACE and context is not set to EGL_NO_CONTEXT.

EGL_BAD_ACCESS is generated if context is current to some other thread.

EGL_BAD_NATIVE_PIXMAP may be generated if a native pixmap underlying either draw or read is no longer valid.

EGL_BAD_NATIVE_WINDOW may be generated if a native window underlying either draw or read is no longer valid.

EGL_BAD_CURRENT_SURFACE is generated if the previous context has unflushed commands and the previous surface is no longer valid.

EGL_BAD_ALLOC may be generated if allocation of ancillary buffers for draw or read were delayed until eglMakeCurrent is called, and there are not enough resources to allocate them.

EGL_CONTEXT_LOST is generated if a power management event has occurred. The application must destroy all contexts and reinitialise OpenGL ES state and objects to continue rendering.