Name

    ARB_create_context_robustness

Name Strings

    GLX_ARB_create_context_robustness

Contact

    Jon Leech (jon 'at' alumni.caltech.edu)

Notice

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

Status

    Complete. Approved by the ARB on June 9, 2010.
    Approved by the Khronos Board of Promoters on July 23, 2010.

Version

    Version 3, 2010/07/22

Number

    ARB Extension #101

Dependencies

    GLX 1.4 is required.

    GLX_ARB_create_context is required.

    An OpenGL implementation supporting GL_ARB_robustness is required.

Overview

    This extension allows creating an OpenGL context supporting robust
    buffer access behavior and a specified graphics reset notification
    behavior.

IP Status

    No known IP claims.

New Procedures and Functions

    None

New Tokens

    Accepted as a bit in the attribute value for GLX_CONTEXT_FLAGS_ARB
    in the <*attrib_list> argument to glXCreateContextAttribsARB:

        GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB       0x00000004

    Accepted as an attribute name in the <*attrib_list> argument to
    glXCreateContextAttribsARB:

        GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB     0x8256

    Accepted as an attribute value for
    GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB in the <*attrib_list>
    argument to glXCreateContextAttribsARB:

        GLX_NO_RESET_NOTIFICATION_ARB                   0x8261
        GLX_LOSE_CONTEXT_ON_RESET_ARB                   0x8252

Additions to the OpenGL / WGL Specifications

    None. This specification is written for GLX.

Additions to the GLX 1.4 Specification

    This extension modifies language specified in the
    GLX_ARB_create_context and GLX_ARB_create_context_profile
    extensions.

    In the description of glXCreateContextAttribsARB, insert a new
    paragraph before the paragraph "The default value of
    GLX_CONTEXT_FLAGS_ARB is 0.":

   "If the GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB bit is set in
    GLX_CONTEXT_FLAGS_ARB, then a context supporting <robust buffer
    access> will be created. Robust buffer access is defined in the
    GL_ARB_robustness extension specification, and the resulting context
    must also support either the GL_ARB_robustness extension, or a
    version of OpenGL incorporating equivalent functionality."

    Add a new paragraph to the description of
    glXCreateContextAttribsARB:

   "The attribute name GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB
    specifies the <reset notification behavior> of the rendering
    context. Reset notification behavior is defined in the
    GL_ARB_robustness extension specification, and the resulting context
    must also support either the GL_ARB_robustness extension, or a
    version of OpenGL incorporating equivalent functionality. The
    attribute value may be either GLX_NO_RESET_NOTIFICATION_ARB or
    GLX_LOSE_CONTEXT_ON_RESET_ARB, which respectively result in reset
    notification behavior of GL_NO_RESET_NOTIFICATION_ARB and
    GL_LOSE_CONTEXT_ON_RESET_ARB, as described by GL_ARB_robustness. The
    default value for GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB is
    GLX_NO_RESET_NOTIFICATION_ARB."

    Add "robust buffer access flag" and "reset notification behavior" to
    the list of possible context creation errors resulting in a
    GLXBadFBConfig error in this sentence:

   "* If <config> does not support compatible OpenGL contexts providing
    the requested API major and minor version, forward-compatible flag,
    and debug context flag, GLXBadFBConfig is generated."

    Add a new context creation error to glXCreateContextAttribsARB:

   "* If the reset notification behavior of <share_context> and the
    newly created context are different, BadMatch is generated."

GLX Errors

    None

GLX Protocol

    None

Errors

    GLXBadFBConfig is generated if GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB is
    set in attribute GLX_CONTEXT_FLAGS_ARB, and no GL context supporting
    the GL_ARB_robustness extension with robust buffer access enabled
    can be created.

    GLXBadFBConfig is generated if no GL context supporting the
    GL_ARB_robustness extension with the specified reset notification
    behavior (the value of attribute
    GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB) can be created.

    BadMatch is generated if the reset notification behavior of
    <share_context> does not match the reset notification behavior of
    the context being created.

New State

    None

New Implementation Dependent State

    None

Conformance Tests

    TBD

Sample Code

    TBD

Issues

    All non-window-system dependent issues described in the
    WGL_ARB_create_context_robustness extension specification apply
    equally to this extension.

Revision History

    Version 3, 2010/07/22 - Assign enums for new tokens (shared with WGL and
    GL robustness extensions).

    Version 2, 2010/07/21 - Move reset notification behavior from a GL
    toggle to a context creation parameter. Disallow sharing contexts
    with different reset notification behaviors. Rename extension, since
    it's no longer only about robust buffer access.

    Version 1, 2010/06/06 - Initial version.
