Name

    OES_surfaceless_context

Name Strings

    GL_OES_surfaceless_context

Contributors

    Kristian Hoegsberg, Intel
    Steven Holte, NVIDIA
    Greg Roth, NVIDIA

Contact

    Steven Holte, NVIDIA (sholte 'at' nvidia.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 OpenGL ES Working Group.
    Ratified by the Khronos Board of Promoters on July 28, 2012.

Version

    Version 4, 2012/05/30

Number

    OpenGL ES Extension #116

Dependencies

    This extension is written against the OpenGL ES 2.0 Specification
    but can apply to OpenGL ES 1.1 with the GL_OES_framebuffer_object
    extension.

    Support for creating contexts that this extension applies to may
    require extensions to companion APIs (see
    EGL_KHR_surfaceless_context)

Overview

    Applications that only want to render to framebuffer objects should
    not need to create a throw-away EGL surface (typically a 1x1
    pbuffer) just to get a current context.  The EGL extension
    KHR_surfaceless_context provides a mechanism for making a context
    current without a surface.  This extensions specifies the behaviour
    of OpenGL ES 1.x and OpenGL ES 2.0 when such a context is made
    current.

New Procedures and Functions

    None

New Tokens

    Returned by glCheckFramebufferStatusOES and glCheckFramebufferStatus:

        GL_FRAMEBUFFER_UNDEFINED_OES                    0x8219

Additions to Chapter 2 'OpenGL ES Operation' of the OpenGL ES 2.0
Specification:

    In section 2.1 'OpenGL ES Fundamentals', replace the paragraphs
    beginning:

    "   The GL interacts with two classes of framebuffers: window-
    system-provided framebuffers and application-created framebuffers ...
        The effects of GL commands on the window-system-provided
    framebuffer are ultimately controlled by the window-system that
    allocates framebuffer resources ...
        The initialization of a GL context itself occurs when the
    window-system allocates a window for GL rendering and is influenced
    by the state of the windowsystem-provided framebuffer"

    with the following paragraphs:

    "    The GL interacts with two classes of framebuffers: window
    system-provided and application-created. There is at most one window
    system-provided framebuffer at any time, referred to as the default
    framebuffer. Application-created framebuffers, referred to as
    framebuffer objects, may be created as desired. These two types of
    framebuffer are distinguished primarily by the interface for
    configuring and managing their state.
        The effects of GL commands on the default framebuffer are
    ultimately controlled by the window system, which allocates
    framebuffer resources, determines which portions of the default
    framebuffer the GL may access at any given time, and communicates to
    the GL how those portions are structured. Therefore, there are no GL
    commands to initialize a GL context or configure the default
    framebuffer.
        Similarly, display of framebuffer contents on a physical display
    device (including the transformation of individual framebuffer
    values by such techniques as gamma correction) is not addressed by
    the GL.
        Allocation and configuration of the default framebuffer occurs
    outside of the GL in conjunction with the window system, using
    companion APIs, such as EGL. Allocation and initialization of GL
    contexts is also done using these companion APIs. GL contexts can
    typically be associated with different default framebuffers, and
    some context state is determined at the time this association is
    performed.
        It is possible to use a GL context without a default framebuffer,
    in which case a framebuffer object must be used to perform all
    rendering. This is useful for applications needing to perform
    offscreen rendering."

    In the last paragraph of section 2.12 'Controlling the viewport',
    after the sentence:

    " In the initial state, w and h are set to the width and height,
    respectively, of the window into which the GL is to do its
    rendering."

    Add the sentence:

    " If no default framebuffer is associated with the GL context (see
    chapter 4), then w and h are initially set to zero."

Additions to Chapter 4 'Per-Fragment Operations and the Framebuffer', of
the OpenGL ES 2.0 Specification:

    In the introduction, after the sentence:

    " Further, and implementation or context may not provide depth or
    stencil buffers."

    Add the sentence:
    " If no default framebuffer is associated with the GL context, the
    framebuffer is incomplete except when a framebuffer object is bound.
    (see sections 4.4.1 and 4.4.5)"

    In the last paragraph of section 4.1.2 'Scissor Test', after the
    sentence

    " The state required consists of four integer values and a bit
    indicating whether the test is enabled or disabled. In the initial
    state left = bottom = 0; width and height are determined by the size
    of the GL window."

    Add the sentence:

    " If the default framebuffer is bound but no default framebuffer is
    associated with the GL context (see chapter 4), then width and
    height are initially set to zero."

    In section 4.4.5 'Framebuffer Completeness', before the first
    paragraph, add the paragraphs:

    "   A framebuffer must be framebuffer complete to effectively be
    used as the draw or read framebuffer of the GL.
        The default framebuffer is always complete if it exists; however,
    if no default framebuffer exists (no window system-provided drawable
    is associated with the GL context), it is deemed to be incomplete."

    In the subsection 'Framebuffer Completeness', add to the list of
    rules for framebuffer completeness and associated errors:

    "* if target is the default framebuffer, the default framebuffer
    exists. { FRAMEBUFFER_UNDEFINED_OES } "

    To the list of actions which may affect framebuffer completeness,
    add the action:

    " Associating a different window system-provided drawable, or no
    drawable, with the default framebuffer using a window system binding
    API such as EGL."

Revision History

    Version 4, 2012/05/30 (Greg Roth) - OESify. Add suffix. Omit
    indiscression. Revise widths.

    Version 3, 2012/05/29 (Steven Holte) - Typo corrections.

    Version 2, 2012/04/13 (Steven Holte) - Language modifications
    expanded to include harmonize with related specifications.

    Version 1, 2010/08/19 (Kristian Hoegsberg) - Initial draft, based
    on Jon's wording in the EGL_KHR_surfaceless_gles extension.
