Name

    NV_read_depth
    NV_read_stencil
    NV_read_depth_stencil

Name Strings

    GL_NV_read_depth
    GL_NV_read_stencil
    GL_NV_read_depth_stencil

Contact

    Greg Roth, NVIDIA Corporation (groth 'at' nvidia.com)

Contributors

    Koji Ashida, NVIDIA Corporation
    Gregory Prisament, NVIDIA Corporation
    Greg Roth, NVIDIA Corporation

Status

    Complete.

Version

    Last Modified Date: June 07, 2011
    NVIDIA Revision: 4.0

Number

    OpenGL ES Extension #94

Dependencies

    Written against the OpenGL ES 2.0 Specification.

    NV_depth_buffer_float2 affects this extension.

    NV_read_depth_stencil requires OES_packed_depth_stencil.

Overview

    Unextended OpenGL-ES 2.0 only supports using ReadPixels to read from the
    default color buffer of the currently-bound framebuffer.  However, it is
    useful for debugging to be able to read from depth and stencil buffers.
    This extension re-introduces these features into OpenGL-ES 2.0.
    
    This document describes several extensions in order to allow an
    implementation to support a subset of the total functionality.

    The NV_read_depth extension allows reading from the depth buffer using
    ReadPixels.

    The NV_read_stencil extension allows reading from the stencil buffer using
    ReadPixels.

    The NV_read_depth_stencil extension allows reading from packed
    depth-stencil buffers using ReadPixels.


New Procedures and Functions

    None.

New Tokens

    None.

Changes to Chapter 4 of the OpenGL ES 2.0 Specification
(Per-Fragment Operations and the Framebuffer)


    Section 4.3.1 (Reading Pixels), replace description of ReadPixels:

        The arguments after x and y to ReadPixels are those described in
        section 3.6.2 defining pixel rectangles. The pixel storage modes
        that apply to ReadPixels are summarized in Table 4.3.

    Section 4.3.1 (Reading Pixels) subsection "Obtaining Pixels from
    the Framebuffer", replace the first paragraph with:

        If the <format> is DEPTH_COMPONENT, then values are obtained
        from the depth buffer. If there is no depth buffer, the error
        INVALID_OPERATION occurs. If the <type> is not UNSIGNED_SHORT,
        FLOAT, or UNSIGNED_INT_24_8_OES then the error INVALID_ENUM
        occurs. If the <type> is FLOAT and the depth buffer is not a
        float buffer, an INVALID_OPERATION error occurs. If the <type>
        is UNSIGNED_SHORT or UNSIGNED_INT_24_8_OES and the depth buffer
        is a float buffer, an INVALID_OPERATION error occurs. When the
        <type> is UNSIGNED_INT_24_8_OES the values read into the 8
        stencil bits are undefined.

        If the <format> is DEPTH_STENCIL_OES, then values are taken from
        both the depth buffer and the stencil buffer. If there is no
        depth buffer or if there is no stencil buffer, then the error
        INVALID_OPERATION occurs. If the <type> is not UNSIGNED_INT_24_-
        8_OES or FLOAT_32_UNSIGNED_INT_24_8_REV_NV, then the error
        INVALID_ENUM occurs. If the <type> is FLOAT_32_UNSIGNED_INT_24_-
        8_REV_NV and the depth buffer is not a float buffer, an INVALID_-
        OPERATION error occurs. If the <type> is UNSIGNED_INT_24_8_OES
        and the depth buffer is a float buffer, an INVALID_OPERATION
        error occurs.

        If the <format> is STENCIL_INDEX, then values are taken from
        the stencil buffer. If there is no stencil buffer, then the
        error INVALID_OPERATION occurs. If the <type> is not
        UNSIGNED_BYTE, then the error INVALID_ENUM occurs.

        If <format> is a color format, then red, green, blue, and alpha
        values are obtained from the color buffer at each pixel
        location. If the framebuffer does not support alpha values then
        the value that is obtained is 1.0. Only two combinations of
        color format and type are accepted. The first is format RGBA and
        type UNSIGNED_BYTE. The second is an implementation-chosen
        format from among those defined in table 3.4, excluding formats
        LUMINANCE and LUMINANCE_ALPHA. The values of format and type for
        this format may be determined by calling GetIntegerv with the
        symbolic constants IMPLEMENTATION_COLOR_READ_FORMAT and
        IMPLEMENTATION_COLOR_READ_TYPE, respectively. The implementation-
        chosen format may vary depending on the format of the currently
        bound rendering surface. Unsupported combinations of format and
        type will generate an INVALID_OPERATION error.

Dependencies on NV_read_depth:

    If NV_read_depth is not supported, the paragraph in "Obtaining Pixels
    from the Framebuffer" describing behavior when the <format> is 
    DEPTH_COMPONENT is omitted.

Dependencies on NV_read_stencil:

    If NV_read_stencil is not supported, the paragraph in "Obtaining
    Pixels from the Framebuffer" describing behavior "when the <format>
    is STENCIL_INDEX" is omitted.

Dependencies on NV_read_depth_stencil:

    If NV_read_depth_stencil is not supported, the paragraph in
    "Obtaining Pixels from the Framebuffer" describing behavior "when
    the <format> is  DEPTH_STENCIL_OES is omitted and UNSIGNED_INT_24_8_EXT is not an
    accepted <value> when <format> is DEPTH_COMPONENT.

Dependencies on NV_depth_buffer_float2:

    If NV_depth_buffer_float2 is not supported, FLOAT is not an accepted
    <value> when <format> is DEPTH_COMPONENT and FLOAT_32_UNSIGNED_INT_-
    24_8_REV_NV is not an accepted <value> when <format> is DEPTH_-
    STENCIL_OES.

Issues

    1. Do we need to be able to read stencil buffers individually?

      On platforms that easily support reading stencil buffers
      individually, it is useful for debugging.  However, we do not want
      to require that it is supported on platforms using packed depth-
      stencil buffers.  Therefore we use multiple extension names.

    2. Should we have FRONT/BACK, LEFT/RIGHT buffer enums for <mode>
      parameter of ReadBufferNV to be used with window system provided
      framebuffers?

      OpenGL ES 2.0 does not support stereo framebuffers, so for now we
      only support FRONT and BACK.

    3. Should this extension add reading of coverage samples?

      No.  That should be left to the EGL_NV_coverage_sample
       specification.

    4. How does this extension interact with NV_read_buffer?

      NV_read_buffer adds support for the ReadBufferNV command, which is
      used to select which color buffer to read from.  It does not
      affect the behavior of this extension, since all framebuffers have
      at most one depth and one stencil buffer.


Revision History

    Rev.    Date      Author       Changes
    ----   --------   ---------    -------------------------------------
     4     06/01/11   groth        Mostly rewrote spec edits to better
                                   match the spec and more clearly
                                   describe behavior. Reformatted.
     3     03/22/09   gprisament   Split from NV_read_buffer.
                                   Broken into several extension names.
                                   Re-wrote overview section.
     2     07/03/08   kashida      Change to depend on
                                   NV_packed_depth_stencil2
     1     06/10/07   kashida      First revision.

