• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    NV_depth_nonlinear
4
5Name Strings
6
7    GL_NV_depth_nonlinear
8    EGL_NV_depth_nonlinear
9
10Contact
11
12    Gary King, NVIDIA Corporation (gking 'at' nvidia.com)
13
14Notice
15
16    Copyright NVIDIA Corporation, 2005 - 2007.
17
18Status
19
20    NVIDIA Proprietary
21
22Version
23
24    Last Modified: 2007/03/20
25    NVIDIA Revision: 1.0
26
27Number
28
29    EGL Extension #18
30    OpenGL ES Extension #73
31
32Dependencies
33
34    Written based on the wording of the OpenGL 2.0 Specification and
35    EGL 1.2 Specification.
36
37    Requires EGL 1.1.
38
39    Requires OpenGL-ES 1.0.
40
41    OES_framebuffer_object affects the wording of this specification.
42
43Overview
44
45    Due to the perspective divide, conventional integer Z-buffers have
46    a hyperbolic distribution of encodings between the near plane
47    and the far plane.  This can result in inaccurate depth testing,
48    particularly when the number of depth buffer bits is small
49    and objects are rendered near the far plane.
50
51    Particularly when the number of depth buffer bits is limited
52    (desirable and/or required in low-memory environments), artifacts
53    due to this loss of precision may occur even with relatively
54    modest far plane-to-near plane ratios (e.g., greater than 100:1).
55
56    Many attempts have been made to provide alternate encodings for
57    Z-buffer (or alternate formulations for the stored depth) to
58    reduce the artifacts caused by perspective division, such as
59    W-buffers, Z-complement buffers and floating-point 1-Z buffers.
60
61    This extension adds a non-linear encoded Z buffer to OpenGL,
62    which can improve the practically useful range of, e.g. 16-bit
63    depth buffers by up to a factor of 16, greatly improving depth
64    test quality in applications where the ratio between the near
65    and far planes can not be as tightly controlled.
66
67IP Status
68
69    NVIDIA Proprietary
70
71New Procedures and Functions
72
73    None
74
75New Tokens
76
77    Accepted as a valid sized internal format by all functions accepting
78    sized internal formats with a base format of DEPTH_COMPONENT
79
80        DEPTH_COMPONENT16_NONLINEAR_NV     0x8E2C
81
82    Accepted by the <attrib_list> parameter of eglChooseConfig and
83    eglCreatePbufferSurface, and by the <attribute> parameter of
84    eglGetConfigAttrib
85
86        EGL_DEPTH_ENCODING_NV              0x30E2
87
88    Accepted as a value in the <attrib_list> parameter of eglChooseConfig
89    and eglCreatePbufferSurface, and returned in the <value> parameter
90    of eglGetConfigAttrib
91
92        EGL_DEPTH_ENCODING_NONE_NV         0
93        EGL_DEPTH_ENCODING_NONLINEAR_NV    0x30E3
94
95Changes to the OpenGL 2.0 Specification
96
97    Add the following line to table 3.16 (p. 154)
98
99    +--------------------------------+-----------------+------+
100    |      Sized Internal Format     |  Base Internal  |  D   |
101    |                                |  Format         | Bits |
102    +--------------------------------+-----------------+------+
103    | DEPTH_COMPONENT16_NONLINEAR_NV | DEPTH_COMPONENT |  16  |
104    +--------------------------------+-----------------+------+
105
106Changes to the EGL 1.2 Specification
107
108    Add the following line to table 3.1 (p. 14)
109
110    +--------------------------+------+---------------------------------------+
111    |         Attribute        | Type | Notes                                 |
112    +--------------------------+------+---------------------------------------+
113    |   EGL_DEPTH_ENCODING_NV  | enum | Type of depth-buffer encoding employed|
114    +--------------------------+------+---------------------------------------+
115
116    Modify the description of the depth buffer in Section 3.4 (p. 15)
117
118    "The depth buffer is used only by OpenGL ES.  It contains fragment depth
119    (Z) information generated during rasterization.  EGL_DEPTH_SIZE indicates
120    the depth of this buffer in bits, and EGL_DEPTH_ENCODING_NV indicates which
121    alternate depth-buffer encoding (if any) should be used.  Legal values for
122    EGL_DEPTH_ENCODING_NV are: EGL_DONT_CARE, EGL_DEPTH_ENCODING_NONE_NV and
123    EGL_DEPTH_ENCODING_NONLINEAR_NV."
124
125    Add the following line to table 3.4 (p. 20)
126
127    +-----------------------+---------------+-----------+-------+----------+
128    |       Attribute       |     Default   | Selection |  Sort |   Sort   |
129    |                       |               |  Criteria | Order | Priority |
130    +-----------------------+---------------+-----------+-------+----------+
131    | EGL_DEPTH_ENCODING_NV | EGL_DONT_CARE |   Exact   |  None |     -    |
132    +-----------------------+---------------+-------------------+----------+
133
134Issues
135
136    None
137
138Revision History
139
140#1.0 - 20.03.2007
141
142   Renumbered enumerants.  Reformatted to 80 columns.
143