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

Specification Update Policy

    Khronos-approved extension specifications are updated in response to
    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
    extensions which have been promoted to a core Specification, fixes will
    first appear in the latest version of that core Specification, and will
    eventually be backported to the extension document. This policy is
    described in more detail at
        https://www.khronos.org/registry/OpenGL/docs/update_policy.php

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.
