KHR_surfaceless_context

Name

KHR_surfaceless_context

Name Strings

EGL_KHR_surfaceless_context

Contributors

Acorn Pooley
Jon Leech
Kristian Hoegsberg
Steven Holte

Contact

Acorn Pooley:   apooley at nvidia dot com

Notice

Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at
    http://www.khronos.org/registry/speccopyright.html

Status

Complete.
Approved by the EGL Working Group on June 6, 2012.
Approved by the Khronos Board of Promoters on July 27, 2012.

Version

Version 4, 2012/05/03

Number

EGL Extension #40

Dependencies

EGL 1.0 is required.

The functionality of this extension is not supported by client OpenGL ES
contexts unless the GL_OES_surfaceless_context extension is supported by
those contexts.

Written against wording of EGL 1.4 specification.

Overview

These extensions allows an application to make a context current by
passing EGL_NO_SURFACE for the write and read surface in the
call to eglMakeCurrent. The motivation is that applications that only
want to render to client API targets (such as OpenGL framebuffer
objects) should not need to create a throw-away EGL surface just to get
a current context.

The state of an OpenGL ES context with no default framebuffer provided
by EGL is the same as a context with an incomplete framebuffer object
bound.

New Procedures and Functions

None

New Tokens

None

Additions to the EGL Specification section "3.7.3 Binding Contexts and Drawables"

Replace the following two error conditions in the
list of eglMakeCurrent errors:

" * If is not a valid context, an EGL_BAD_CONTEXT error is generated. * If either or are not valid EGL surfaces, an EGL_BAD_SURFACE error is generated."

with the following error conditions:

" * If is not a valid context and is not EGL_NO_CONTEXT, an EGL_BAD_CONTEXT error is generated. * If either or are not valid EGL surfaces and are not EGL_NO_SURFACE, an EGL_BAD_SURFACE error is generated. * If is EGL_NO_CONTEXT and either or are not EGL_NO_SURFACE, an EGL_BAD_MATCH error is generated. * If either of or is a valid surface and the other is EGL_NO_SURFACE, an EGL_BAD_MATCH error is generated. * If does not support being bound without read and draw surfaces, and both and are EGL_NO_SURFACE, an EGL_BAD_MATCH error is generated."

Replace the paragraph starting "If <ctx> is EGL_NO_CONTEXT and
<draw> and <read> are not EGL_NO_SURFACE..." with

"If both and are EGL_NO_SURFACE, and is a context which supports being bound without read and draw surfaces, then no error is generated and the context is made current without a . The meaning of this is defined by the API of the supporting context. (See chapter 4 of the OpenGL 3.0 Specification, and the GL_OES_surfaceless_context OpenGL ES extension.)"

Append to the paragraph starting "The first time an OpenGL or OpenGL
ES context is made current..." with

"If the first time <ctx> is made current, it is without a default
framebuffer (e.g. both <draw> and <read> are EGL_NO_SURFACE), then
the viewport and scissor regions are set as though
glViewport(0,0,0,0) and glScissor(0,0,0,0) were called."

Interactions with other extensions

The semantics of having a current context with no surface for OpenGL ES
1.x and OpenGL ES 2.x are specified by the GL_OES_surfaceless_context
extension.

Issues

1) Do we need a mechanism to indicate which contexts may be bound with and set to NULL? Or is it ok to require that if this extension is supported then any context of the particular API may be made current with no surfaces?

RESOLVED. Because multiple API implementations may be available as
contexts we cannot guarantee that all OpenGL ES 1.x or OpenGL ES 2.x
contexts will support GL_OES_surfaceless_context. If the user attempts
to call eglMakeCurrent with EGL_NO_SURFACE on a context which does not
support it, this simply results in EGL_BAD_MATCH.

2) Do we need to include all of the relevant "default framebuffer" language from the OpenGL specification to properly specify OpenGL ES behavior with no default framebuffer bound?

RESOLVED. Yes, the behaviour of the GLES contexts when no default
framebuffer is associated with the context has been moved to the OpenGL
ES extension OES_surfaceless_context.

3) Since these EGL extensions also modify OpenGL ES behavior and introduce a new error condition, do we want corresponding OpenGL ES extension strings as well?

RESOLVED. Yes, see GL_OES_surfaceless_context extension.

4) How does this document interact with EGL_KHR_create_context and OpenGL contexts?

RESOLVED. Some language defining the error conditions of eglMakeCurrent
have been imported from the draft specification of EGL_KHR_create_context
and the definitions of the behaviour of the GLES contexts without a
default framebuffer have been moved to GL_OES_surfaceless_context. Any
further interactions are left to the create_context extension to define
when it is completed.

Revision History

Version 5, 2014/01/07 (Jon Leech) - Correct references to
EXT_surfaceless_context with GL_OES_surfaceless_context.

Version 4, 2012/02/27 (Steven Holte) - Add language for error conditions
from EGL_KHR_create_context, and resolutions of issues. Combined API
specific extensions into a single extension.

Version 3, 2010/08/19 (Kristian Hoegsberg) - Move default framebuffer
language to new GLES extension (GL_OES_surfaceless_context) and make
this extension depend on that.

Version 2, 2010/08/03 (Jon Leech) - add default framebuffer language to
the OpenGL ES Specifications, including changes to initial GL state and
the FRAMEBUFFER_UNDEFINED incompleteness status when no default
framebuffer is bound.

Version 1, 2010/07/09 (Acorn Pooley) - Initial draft.