• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    EXT_shadow_funcs
4
5Name Strings
6
7    GL_EXT_shadow_funcs
8
9Contact
10
11    Mark J. Kilgard (mjk 'at' nvidia.com)
12
13Status
14
15    Complete
16
17Version
18
19    Last Modified Date:  $Date: 2002/03/22 $
20    NVIDIA Revision:  $Revision: #5 $
21
22Number
23
24    267
25
26Dependencies
27
28    OpenGL 1.1 is required.
29    ARB_depth_texture is required.
30    ARB_shadow is required.
31    This extension is written against the OpenGL 1.3 Specification.
32
33Overview
34
35    This extension generalizes the GL_ARB_shadow extension to support all
36    eight binary texture comparison functions rather than just GL_LEQUAL
37    and GL_GEQUAL.
38
39IP Status
40
41    None.
42
43Issues
44
45    (1) What should this extension be called?
46
47      RESOLUTION: EXT_shadow_funcs.  The extension adds new texture
48      compare (shadow) comparison functions to ARB_shadow.
49
50    (2) Are there issues with GL_EQUAL and GL_NOTEQUAL?
51
52      The GL_EQUAL mode (and GL_NOTEQUAL) may be difficult to obtain
53      well-defined behavior from. This is because there is no guarantee
54      that the divide done by the shadow mapping r/q division is going
55      to exactly match the z/w perspective divide and depth range scale
56      & bias used to generate depth values.  Perhaps it can work in a
57      well-defined manner in orthographic views or if you can guarantee
58      that the texture hardware's r/q is computed with the same hardware
59      used to compute z/w (NVIDIA's NV_texture_shader extension can
60      provide such a guarantee).
61
62      Similiarly, GL_LESS and GL_GREATER or only different from GL_LEQUAL
63      and GL_GEQUAL respectively by a single unit of depth precision
64      which may make the difference between these modes very subtle.
65
66New Procedures and Functions
67
68    None
69
70New Tokens
71
72    None
73
74Additions to Chapter 2 of the 1.3 Specification (OpenGL Operation)
75
76    None
77
78Additions to Chapter 3 of the 1.3 Specification (Rasterization)
79
80    Section 3.8.4, Texture Parameters, p. 133, update table 3.19 with the
81    following new legal values for TEXTURE_COMPARE_FUNC_ARB:
82
83        Name                        Type  Legal Values
84        --------------------------  ----  -------------------------------
85        TEXTURE_COMPARE_FUNC_ARB    enum  LEQUAL, GEQUAL, LESS, GREATER,
86                                          EQUAL, NOTEQUAL, ALWAYS, NEVER
87
88    After section 3.8.12, Texture Environments and Texture Functions,
89    p. 149, update the texture compare pseudo-code in section 3.8.13.1
90    (as added by ARB_shadow):
91
92        if TEXTURE_COMPARE_MODE_ARB = NONE
93
94            r = Dt
95
96        else if TEXTURE_COMPARE_MODE_ARB = COMPARE_R_TO_TEXTURE_ARB
97
98            if TEXTURE_COMPARE_FUNC_ARB = LEQUAL
99
100                 { 1.0,  if R <= Dt
101             r = {
102                 { 0.0,  if R > Dt
103
104            else if TEXTURE_COMPARE_FUNC_ARB = GEQUAL
105
106                 { 1.0,  if R >= Dt
107             r = {
108                 { 0.0,  if R < Dt
109
110            else if TEXTURE_COMPARE_FUNC_ARB = LESS
111
112                 { 1.0,  if R < Dt
113             r = {
114                 { 0.0,  if R >= Dt
115
116            else if TEXTURE_COMPARE_FUNC_ARB = GREATER
117
118                 { 1.0,  if R > Dt
119             r = {
120                 { 0.0,  if R <= Dt
121
122            else if TEXTURE_COMPARE_FUNC_ARB = EQUAL
123
124                 { 1.0,  if R == Dt
125             r = {
126                 { 0.0,  if R != Dt
127
128            else if TEXTURE_COMPARE_FUNC_ARB = NOTEQUAL
129
130                 { 1.0,  if R != Dt
131             r = {
132                 { 0.0,  if R == Dt
133
134            else if TEXTURE_COMPARE_FUNC_ARB = ALWAYS
135
136             r = 1.0
137
138            else if TEXTURE_COMPARE_FUNC_ARB = NEVER
139
140             r = 0.0
141
142            endif
143
144            if DEPTH_TEXTURE_MODE_ARB = LUMINANCE
145
146                Lt = r
147
148            else if DEPTH_TEXTURE_MODE_ARB = INTENSITY
149
150                It = r
151
152            else if DEPTH_TEXTURE_MODE_ARB = ALPHA
153
154                At = r
155
156            endif
157
158        endif
159
160Additions to Chapter 4 of the 1.3 Specification (Per-Fragment Operations
161and the Frame Buffer)
162
163    None
164
165Additions to Chapter 5 of the 1.3 Specification (Special Functions)
166
167    None
168
169Additions to Chapter 6 of the 1.3 Specification (State and State Requests)
170
171    None
172
173Additions to the GLX Specification
174
175    None
176
177Errors
178
179    INVALID_ENUM is generated if TexParameter[if][v] parameter <pname>
180    is TEXTURE_COMPARE_FUNC_ARB and parameter <param> is not one of
181    LEQUAL, GEQUAL, LESS, GREATER, EQUAL, NOTEQUAL, ALWAYS, or NEVER.
182
183New State
184
185    In table 6.16, Texture Objects, p. 224, add the following:
186
187    Get Value                   Type  Get Command           Initial Value  Description     Sec.   Attribute
188    --------------------------  ----  --------------------  -------------  --------------  -----  ---------
189    TEXTURE_COMPARE_FUNC_ARB    Z_8   GetTexParameter[if]v  LEQUAL         compare func    3.8.13 texture
190
191New Implementation Dependent State
192
193    None
194
195Revision History
196
197    None
198
199NV20 Implementation Details
200
201    NV20 (GeForce3 and Quadro DCC) will fallback to software rasterization
202    if two or more texture units have distinct TEXTURE_COMPARE_FUNC_ARB
203    settings that are not opposites (eg, GL_EQUAL and GL_NOTEQUAL).
204    This is not an issue on NV25 (GeForce4 and Quadro4).
205