|
1 Name |
|
2 |
|
3 ANGLE_depth_texture |
|
4 |
|
5 Name Strings |
|
6 |
|
7 GL_ANGLE_depth_texture |
|
8 |
|
9 Contributors |
|
10 |
|
11 Nicolas Capens, TransGaming |
|
12 Daniel Koch, TransGaming |
|
13 Shannon Woods, TransGaming |
|
14 Kenneth Russell, Google |
|
15 Vangelis Kokkevis, Google |
|
16 Gregg Tavares, Google |
|
17 Contributors to OES_depth_texture |
|
18 Contributors to OES_packed_depth_stencil |
|
19 |
|
20 Contact |
|
21 |
|
22 Shannon Woods, TransGaming (shannon 'dot' woods 'at' transgaming.com) |
|
23 |
|
24 Status |
|
25 |
|
26 Implemented in ANGLE. |
|
27 |
|
28 Version |
|
29 |
|
30 Last Modified Date: February 25, 2013 |
|
31 Revision: #4 |
|
32 |
|
33 Number |
|
34 |
|
35 TBD |
|
36 |
|
37 Dependencies |
|
38 |
|
39 OpenGL ES 2.0 is required. |
|
40 This extension is written against the OpenGL ES 2.0.25 specification |
|
41 |
|
42 OES_packed_depth_stencil affects the definition of this extension. |
|
43 |
|
44 EXT_texture_storage affects the definition of this extension. |
|
45 |
|
46 Overview |
|
47 |
|
48 This extension defines support for 2D depth and depth-stencil |
|
49 textures in an OpenGL ES implementation. |
|
50 |
|
51 This extension incorporates the depth texturing functionality of |
|
52 OES_depth_texture and OES_packed_depth_stencil, but does not |
|
53 provide the ability to load existing data via TexImage2D or |
|
54 TexSubImage2D. This extension also allows implementation |
|
55 variability in which components from a sampled depth texture |
|
56 contain the depth data. Depth textures created with this |
|
57 extension only support 1 level. |
|
58 |
|
59 New Procedures and Functions |
|
60 |
|
61 None |
|
62 |
|
63 New Tokens |
|
64 |
|
65 Accepted by the <format> parameter of TexImage2D and TexSubImage2D and |
|
66 <internalformat> parameter of TexImage2D: |
|
67 |
|
68 DEPTH_COMPONENT 0x1902 |
|
69 DEPTH_STENCIL_OES 0x84F9 |
|
70 |
|
71 Accepted by the <type> parameter of TexImage2D, TexSubImage2D: |
|
72 |
|
73 UNSIGNED_SHORT 0x1403 |
|
74 UNSIGNED_INT 0x1405 |
|
75 UNSIGNED_INT_24_8_OES 0x84FA |
|
76 |
|
77 Accepted by the <internalformat> parameter of TexStorage2DEXT: |
|
78 |
|
79 DEPTH_COMPONENT16 0x81A5 |
|
80 DEPTH_COMPONENT32_OES 0x81A7 |
|
81 DEPTH24_STENCIL8_OES 0x88F0 |
|
82 |
|
83 Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation) |
|
84 |
|
85 Update Section 2.10.5 "Shader Execution" in the subsection titled |
|
86 "Texture Access" add a new paragraph before the last paragraph add |
|
87 this line: |
|
88 |
|
89 "The stencil index texture internal component is ignored if the base |
|
90 internal format is DEPTH_STENCIL_OES. |
|
91 |
|
92 If a vertex shader uses..." |
|
93 |
|
94 Additions to Chapter 3 of the OpenGL ES 2.0 specification (Rasterization) |
|
95 |
|
96 Add the following rows to Table 3.2 (page 62): |
|
97 |
|
98 type Parameter GL Data Type Special |
|
99 ------------------------------------------------ |
|
100 ... ... ... |
|
101 UNSIGNED_SHORT ushort No |
|
102 UNSIGNED_INT uint No |
|
103 UNSIGNED_INT_24_8_OES uint Yes |
|
104 |
|
105 Add the following rows to Table 3.3 (page 62): |
|
106 |
|
107 Format Name Element Meaning and Order Target Buffer |
|
108 ------------------------------------------------------------------ |
|
109 ... ... ... |
|
110 DEPTH_COMPONENT Depth Depth |
|
111 DEPTH_STENCIL_OES Depth and Stencil Index Depth and Stencil |
|
112 ... ... ... |
|
113 |
|
114 Add a row to Table 3.5 "Packed pixel formats" (page 64): |
|
115 |
|
116 type Parameter GL Type Components Pixel Formats |
|
117 ------------------------------------------------------------------ |
|
118 ... ... ... ... |
|
119 UNSIGNED_INT_24_8_OES uint 2 DEPTH_STENCIL_OES |
|
120 |
|
121 Add a new table after Table 3.6 (page 64): |
|
122 |
|
123 UNSIGNED_INT_24_8_OES |
|
124 |
|
125 31 30 29 28 27 26 ... 12 11 10 9 8 7 6 5 4 3 2 1 0 |
|
126 +----------------------------------+---------------+ |
|
127 | 1st Component | 2nd Component | |
|
128 +----------------------------------+---------------+ |
|
129 |
|
130 Table 3.6.B: UNSIGNED_INT formats |
|
131 |
|
132 Add a row to Table 3.7 "Packed pixel field assignments" (page 65): |
|
133 |
|
134 Format | 1st 2nd 3rd 4th |
|
135 ------------------+------------------------------- |
|
136 ... | ... ... ... ... |
|
137 DEPTH_STENCIL_OES | depth stencil N/A N/A |
|
138 |
|
139 Add the following paragraph to the end of the section "Conversion to |
|
140 floating-point" (page 65): |
|
141 |
|
142 "For groups of components that contain both standard components and index |
|
143 elements, such as DEPTH_STENCIL_OES, the index elements are not converted." |
|
144 |
|
145 In section 3.7.1 "Texture Image Specification", update page 67 to |
|
146 say: |
|
147 |
|
148 "The selected groups are processed as described in section 3.6.2, stopping |
|
149 just before final conversion. Each R, G, B, A, or depth value so generated |
|
150 is clamped to [0, 1], while the stencil index values are masked by 2^n-1, |
|
151 where n is the number of stencil bits in the internal format resolution |
|
152 (see below). |
|
153 |
|
154 Components are then selected from the resulting R, G, B, A, depth, or |
|
155 stencil index values to obtain a texture with the base internal format |
|
156 specified by <internalformat>. Table 3.8 summarizes the mapping of R, G, |
|
157 B, A, depth, or stencil values to texture components, as a function of the |
|
158 base internal format of the texture image. <internalformat> may be |
|
159 specified as one of the internal format symbolic constants listed in |
|
160 table 3.8. Specifying a value for <internalformat> that is not one of the |
|
161 above values generates the error INVALID_VALUE. If <internalformat> does |
|
162 not match <format>, the error INVALID_OPERATION is generated. |
|
163 |
|
164 Textures with a base internal format of DEPTH_COMPONENT or |
|
165 DEPTH_STENCIL_OES are supported by texture image specification commands |
|
166 only if <target> is TEXTURE_2D. Using these formats in conjunction with |
|
167 any other <target> will result in an INVALID_OPERATION error. |
|
168 |
|
169 Textures with a base internal format of DEPTH_COMPONENT or |
|
170 DEPTH_STENCIL_OES only support one level of image data. Specifying a |
|
171 non-zero value for <level> will result in an INVALID_OPERATION error. |
|
172 |
|
173 Textures with a base internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES |
|
174 require either depth component data or depth/stencil component data. |
|
175 Textures with other base internal formats require RGBA component data. The |
|
176 error INVALID_OPERATION is generated if the base internal format is |
|
177 DEPTH_COMPONENT or DEPTH_STENCIL_OES and <format> is not DEPTH_COMPONENT or |
|
178 DEPTH_STENCIL_OES, or if the base internal format is not DEPTH_COMPONENT or |
|
179 DEPTH_STENCIL_OES and <format> is DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
|
180 |
|
181 Textures with a base internal format of DEPTH_COMPONENT or |
|
182 DEPTH_STENCIL_OES do not support loading image data via the TexImage |
|
183 commands. They can only have their contents specified by rendering |
|
184 to them. The INVALID_OPERATION error is generated by the TexImage2D |
|
185 command if <data> is not NULL for such textures." |
|
186 |
|
187 Add a row to table 3.8 (page 68), and update the title of the |
|
188 second column: |
|
189 |
|
190 Base Internal Format RGBA, Depth and Stencil Values Internal Components |
|
191 ------------------------------------------------------------------------- |
|
192 ... ... ... |
|
193 DEPTH_COMPONENT Depth D |
|
194 DEPTH_STENCIL_OES Depth,Stencil D,S |
|
195 ... ... ... |
|
196 |
|
197 Update the caption for table 3.8 (page 68) |
|
198 |
|
199 "Table 3.8: Conversion from RGBA, depth, and stencil pixel components to |
|
200 internal texture components. Texture components R, G, B, A, and L are |
|
201 converted back to RGBA colors during filtering as shown in table 3.12. |
|
202 Texture components D are converted to RGBA colors as described in |
|
203 section 3.7.8-1/2." |
|
204 |
|
205 Add the following to section 3.7.2 "Alternate Texture Image Specification |
|
206 Commands": |
|
207 |
|
208 "CopyTexImage2D and CopyTexSubImage2D generate the INVALID_OPERATION |
|
209 error if the base internal format of the destination texture is |
|
210 DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
|
211 |
|
212 TexSubImage2D generates the INVALID_OPERATION error if the base internal |
|
213 format of the texture is DEPTH_COMPONENT or DEPTH_STENCIL_OES." |
|
214 |
|
215 Add a new section between sections 3.7.8 and 3.7.9: |
|
216 |
|
217 "3.7.8-1/2 Depth/Stencil Textures |
|
218 |
|
219 If the currently bound texture's base internal format is DEPTH_COMPONENT or |
|
220 DEPTH_STENCIL_OES, then the output of the texture unit is as described |
|
221 below. Otherwise, the texture unit operates in the normal manner. |
|
222 |
|
223 Let <D_t> be the depth texture value, provided by the shader's texture lookup |
|
224 function. Then the effective texture value is computed as follows: |
|
225 <Tau> = <D_t> |
|
226 |
|
227 If the texture image has a base internal format of DEPTH_STENCIL_OES, then |
|
228 the stencil index texture component is ignored. The texture value <Tau> does |
|
229 not include a stencil index component, but includes only the depth |
|
230 component. |
|
231 |
|
232 The resulting <Tau> is assigned to <R_t>. In some implementations, <Tau> is |
|
233 also assigned to <G_t>, <B_t>, or <A_t>. Thus in table 3.12, textures with |
|
234 depth component data behave as if their base internal format is RGBA, with |
|
235 values in <G_t>, <B_t>, and <A_t> being implementation dependent." |
|
236 |
|
237 Add the following to section 3.7.11 "Mipmap Generation": |
|
238 |
|
239 "If the level zero array contains depth or depth-stencil data, the |
|
240 error INVALID_OPERATION is generated." |
|
241 |
|
242 Insert a new paragraph after the first paragraph of the "Texture Access" |
|
243 subsection of section 3.8.2 on page 87, which says: |
|
244 |
|
245 "Texture lookups involving textures with depth component data generate |
|
246 a texture source color by using depth data directly, as described in |
|
247 section 3.7.8-1/2. The stencil texture internal component is ignored |
|
248 if the base internal format is DEPTH_STENCIL_OES." |
|
249 |
|
250 Additions to Chapter 4 of the OpenGL ES 2.0 specification (Per-Fragment |
|
251 Operations and the Framebuffer) |
|
252 |
|
253 In section 4.4.5 "Framebuffer Completeness", replace the the 3rd |
|
254 paragraph with the following text: |
|
255 |
|
256 "* An internal format is color-renderable if it is one of the formats |
|
257 from table 4.5 noted as color-renderable or if it is unsized format |
|
258 RGBA or RGB. No other formats, including compressed internal formats, |
|
259 are color-renderable. |
|
260 |
|
261 * An internal format is depth-renderable if it is one of the sized |
|
262 internal formats from table 4.5 noted as depth-renderable, if it |
|
263 is the unsized format DEPTH_COMPONENT or if it is the internal |
|
264 format value of DEPTH24_STENCIL8_OES. No other formats are |
|
265 depth-renderable. |
|
266 |
|
267 * An internal format is stencil-renderable if it is one of the sized |
|
268 internal formats from table 4.5 noted as stencil-renderable or if it |
|
269 is DEPTH24_STENCIL8_OES. No other formats are stencil-renderable." |
|
270 |
|
271 Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special |
|
272 Functions) |
|
273 |
|
274 None. |
|
275 |
|
276 Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State |
|
277 Requests) |
|
278 |
|
279 None. |
|
280 |
|
281 Interactions with OES_packed_depth_stencil |
|
282 |
|
283 If OES_packed_depth_stencil is not supported, mentions of |
|
284 DEPTH_STENCIL_OES and UNSIGNED_INT_24_8_OES as a format/type combinations |
|
285 for TexImage2D and TexSubImage2D are omitted. Mentions of |
|
286 the internal format DEPTH24_STENCIL8_OES are also omitted. |
|
287 |
|
288 Interactions with EXT_texture_storage |
|
289 |
|
290 If EXT_texture_storage is supported the following internalformat |
|
291 to format/type mappings are used: |
|
292 |
|
293 <internalformat> <format> <type> |
|
294 ---------------- -------- ------ |
|
295 DEPTH_COMPONENT16 DEPTH_COMPONENT UNSIGNED_SHORT |
|
296 DEPTH_COMPONENT32_OES DEPTH_COMPONENT UNSIGNED_INT |
|
297 DEPTH24_STENCIL8_OES DEPTH_STENCIL_OES UNSIGNED_INT |
|
298 |
|
299 Textures with the above <internalformats> only support one level of |
|
300 image data. Specifying a value other than one for the <levels> parameter |
|
301 to TexStorage2DEXT will result in an INVALID_OPERATION error. |
|
302 |
|
303 If EXT_texture_storage is not supported, ignore any references |
|
304 to TexStorage2DEXT. |
|
305 |
|
306 Errors |
|
307 |
|
308 The error INVALID_OPERATION is generated by TexImage2D if <format> and |
|
309 <internalformat> are DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT, |
|
310 or UNSIGNED_INT. |
|
311 |
|
312 The error INVALID_OPERATION is generated by TexSubImage2D if <format> is |
|
313 DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT, or UNSIGNED_INT. |
|
314 |
|
315 The error INVALID_OPERATION is generated by TexImage2D if <format> and |
|
316 <internalformat> are not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT, |
|
317 or UNSIGNED_INT. |
|
318 |
|
319 The error INVALID_OPERATION is generated by TexSubImage2D if <format> is |
|
320 not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT, or UNSIGNED_INT. |
|
321 |
|
322 The error INVALID_OPERATION is generated by TexImage2D if <format> and |
|
323 <internalformat> are DEPTH_STENCIL_OES and <type> is not |
|
324 UNSIGNED_INT_24_8_OES. |
|
325 |
|
326 The error INVALID_OPERATION is generated by TexSubImage2D if <format> |
|
327 is DEPTH_STENCIL_OES and <type> is not UNSIGNED_INT_24_8_OES. |
|
328 |
|
329 The error INVALID_OPERATION is generated by TexImage2D if <format> and |
|
330 <internalformat> is not DEPTH_STENCIL_OES and <type> is |
|
331 UNSIGNED_INT_24_8_OES. |
|
332 |
|
333 The error INVALID_OPERATION is generated by TexSubImage2D if <format> |
|
334 is not DEPTH_STENCIL_OES and <type> is UNSIGNED_INT_24_8_OES. |
|
335 |
|
336 The error INVALID_OPERATION is generated in the following situations: |
|
337 - TexImage2D is called with <format> and <internalformat> of |
|
338 DEPTH_COMPONENT or DEPTH_STENCIL_OES and |
|
339 - <target> is not TEXTURE_2D, |
|
340 - <data> is not NULL, or |
|
341 - <level> is not zero. |
|
342 - TexSubImage2D is called with <format> of DEPTH_COMPONENT or |
|
343 DEPTH_STENCIL_OES. |
|
344 - TexStorage2DEXT is called with <internalformat> of DEPTH_COMPONENT16, |
|
345 DEPTH_COMPONENT32_OES, or DEPTH24_STENCIL8_OES, and |
|
346 - <target> is not TEXTURE_2D, or |
|
347 - <levels> is not one. |
|
348 - CopyTexImage2D is called with an <internalformat> that has a base |
|
349 internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
|
350 - CopyTexSubImage2D is called with a target texture that has a base |
|
351 internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
|
352 - GenerateMipmap is called on a texture that has a base internal format |
|
353 of DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
|
354 |
|
355 New State |
|
356 |
|
357 None. |
|
358 |
|
359 Issues |
|
360 |
|
361 1) What are the differences between this extension and OES_depth_texture |
|
362 and OES_packed_depth_stencil? |
|
363 |
|
364 RESOLVED: This extension: |
|
365 - does not support loading pre-baked depth stencil data via |
|
366 TexImage2D or TexSubImage2D. |
|
367 - allows variability in the y-, z-, and w-components of the sample |
|
368 results from depth textures. |
|
369 - only supports one level textures. |
|
370 - explicitly lists the errors for unsupported functionality. |
|
371 Since these were not clearly specified in the OES_depth_texture |
|
372 extension there may be differences in error values between |
|
373 implementations of OES_depth_texture and ANGLE_depth_texture. |
|
374 This specification was also rebased to apply against the OpenGL ES 2.0 |
|
375 specification instead of the OpenGL specification, making it more |
|
376 obvious what all the functionality changes are. |
|
377 |
|
378 2) Why does TexSubImage2D accept the new format/type combinations even |
|
379 though it does not actually support loading data? |
|
380 |
|
381 RESOLVED: This was done to be more consistent with the OES_depth_texture |
|
382 extension and to make it easier to add support for loading texture |
|
383 data if it is possible to support in the future. |
|
384 |
|
385 3) Why are only 1-level depth textures supported? |
|
386 |
|
387 RESOLVED: The only use for multiple levels of depth textures would |
|
388 be for fitlered texturing. However since it is not possible to |
|
389 render to non-zero-level texture levels in OpenGL ES 2.0, and since |
|
390 this extension forbids loading existing data and GenerateMipmap on |
|
391 depth textures, it is impossible to initialize or specify contents |
|
392 for non-zero levels of depth textures. |
|
393 |
|
394 Revision History |
|
395 |
|
396 02/25/2013 swoods revise to allow texture lookup to guarantee depth values |
|
397 only in red channel of sample result. |
|
398 06/04/2012 dgkoch fix errors, disallow multi-level depth textures. |
|
399 05/30/2012 dgkoch minor updates and add issues. |
|
400 05/23/2012 dgkoch intial revision based on OES_depth_texture and |
|
401 OES_packed_depth_stencil and rebased against the ES 2.0 spec |
|
402 |