Name

    ARB_conditional_render_inverted

Name Strings

    GL_ARB_conditional_render_inverted

Contact

    Brian Paul, VMware Inc. (brianp 'at' vmware.com)

Contributors

    Brian Paul, VMware
    Daniel Rakos, AMD

Notice

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

Status

    Complete. 
    Approved by the ARB on June 26, 2014.
    Ratified by the Khronos Board of Promoters on August 7, 2014.

Version

    Date: June 9, 2014
    Revision: 5

Number

    ARB Extension #161

Dependencies

    OpenGL 3.0 is required.

    The extension is written against the OpenGL 4.4 Specification, Core
    Profile, March 19, 2014.

Overview

    This extension adds new modes to BeginConditionalRender which invert
    the condition used to determine whether to draw or not.

IP Status

    No known IP claims.

New Procedures and Functions

    None.

New Tokens

    Accepted by the <mode> parameter of BeginConditionalRender:

        QUERY_WAIT_INVERTED                             0x8E17
        QUERY_NO_WAIT_INVERTED                          0x8E18
        QUERY_BY_REGION_WAIT_INVERTED                   0x8E19  
        QUERY_BY_REGION_NO_WAIT_INVERTED                0x8E1A  

Additions to Chapter 10 of the OpenGL 4.4 (Core Profile) Specification (Vertex Specification and Drawing Commands)

    Modify Section 10.10, Conditional Rendering

    (add before the errors section for BeginConditionalRender on p. 339)

    If <mode> is QUERY_WAIT_INVERTED, QUERY_NO_WAIT_INVERTED,
    QUERY_BY_REGION_WAIT_INVERTED, or QUERY_BY_REGION_NO_WAIT_INVERTED
    then the condition used to determine whether or not to render subsequent
    drawing commands is negated with respect to QUERY_WAIT, QUERY_NO_WAIT,
    QUERY_BY_REGION_WAIT, or QUERY_BY_REGION_NO_WAIT, respectively. If <mode>
    is QUERY_NO_WAIT_INVERTED or QUERY_BY_REGION_NO_WAIT_INVERTED
    the GL may choose to unconditionally execute the subsequent rendering
    commands without waiting for the query to complete.

Additions to the AGL/EGL/GLX/WGL Specifications

    None.

Dependencies

    None.

New State

    None.

New Implementation Dependent State

    None.

Issues

    (1) Why is this extension necessary?

      RESOLVED:  A competing graphics API supports this feature.  This
      extension will allow one to easier implement that API's features
      on top of OpenGL. Also, with the GL_ARB_transform_feedback_overflow_query
      extension, it's not obvious whether conditional rendering should
      discard drawing if a transform feedback buffer overflow occurs or
      doesn't occur. This extension allows both possibilities.

    (2) Should there be QUERY_NO_WAIT_INVERTED and
        QUERY_BY_REGION_NO_WAIT_INVERTED queries?

      RESOLVED: Yes. Suppose we issue a SAMPLES_PASSED query and begin
      conditional rendering with QUERY_NO_WAIT_INVERTED. If the query
      it not ready yet, the GL might render the subsequent primitives even
      if they might have been visible. There may be a non-obvious use for
      this.

    (3) What gets inverted, the condition or the behavior?

      DISCUSSION: For QUERY_WAIT_INVERTED and QUERY_BY_REGION_WAIT_INVERTED
      it doesn't really matter, but for the other two modes there are two
      possibilities:

        (a) Inverted condition, in which case the GL renders subsequent
            primitives if the query is not complete yet.

        (b) Inverted behavior, in which case the GL discards subsequent
            primitives if the query is not complete yet.

      RESOLVED: We chose option (a). The condition is inverted.

Revision History

    Revision 5, 2014/06/09 (Jon Leech)
      - Assign enums per bug 12362

    Revision 4, 2014/04/25 (Daniel Rakos)
      - Renamed to ARB_conditional_render_inverted.
      - Removed suffixes.
      - Resolved isues (2) and (3).

    Revision 3, 2014/04/16 (Daniel Rakos)
      - Renamed extension to EXT_conditional_render_inverted.
      - Marked issue (2) unresolved, changed the behavior for incomplete
        queries, and added issue (3).
      - Clarified language regarding what gets inverted and how issue (2)
        affects the behavior.

    Revision 2, 2014/04/10 (Brian Paul)
      - Added issue (2) to justify QUERY_NO_WAIT_INVERTED_EXT.

    Revision 1, 2014/02/03 (Brian Paul)
      - Initial revision.
