blob: edaf65e75ffb747e32770501c58201f3bf7f1f98 [file] [log] [blame]
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.