| Name |
| |
| ANGLE_depth_texture |
| |
| Name Strings |
| |
| GL_ANGLE_depth_texture |
| |
| Contributors |
| |
| Nicolas Capens, TransGaming |
| Daniel Koch, TransGaming |
| Shannon Woods, TransGaming |
| Kenneth Russell, Google |
| Vangelis Kokkevis, Google |
| Gregg Tavares, Google |
| Contributors to OES_depth_texture |
| Contributors to OES_packed_depth_stencil |
| |
| Contact |
| |
| Shannon Woods, TransGaming (shannon 'dot' woods 'at' transgaming.com) |
| |
| Status |
| |
| Implemented in ANGLE. |
| |
| Version |
| |
| Last Modified Date: February 25, 2013 |
| Revision: #4 |
| |
| Number |
| |
| TBD |
| |
| Dependencies |
| |
| OpenGL ES 2.0 is required. |
| This extension is written against the OpenGL ES 2.0.25 specification |
| |
| OES_packed_depth_stencil affects the definition of this extension. |
| |
| EXT_texture_storage affects the definition of this extension. |
| |
| Overview |
| |
| This extension defines support for 2D depth and depth-stencil |
| textures in an OpenGL ES implementation. |
| |
| This extension incorporates the depth texturing functionality of |
| OES_depth_texture and OES_packed_depth_stencil, but does not |
| provide the ability to load existing data via TexImage2D or |
| TexSubImage2D. This extension also allows implementation |
| variability in which components from a sampled depth texture |
| contain the depth data. Depth textures created with this |
| extension only support 1 level. |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| Accepted by the <format> parameter of TexImage2D and TexSubImage2D and |
| <internalformat> parameter of TexImage2D: |
| |
| DEPTH_COMPONENT 0x1902 |
| DEPTH_STENCIL_OES 0x84F9 |
| |
| Accepted by the <type> parameter of TexImage2D, TexSubImage2D: |
| |
| UNSIGNED_SHORT 0x1403 |
| UNSIGNED_INT 0x1405 |
| UNSIGNED_INT_24_8_OES 0x84FA |
| |
| Accepted by the <internalformat> parameter of TexStorage2DEXT: |
| |
| DEPTH_COMPONENT16 0x81A5 |
| DEPTH_COMPONENT32_OES 0x81A7 |
| DEPTH24_STENCIL8_OES 0x88F0 |
| |
| Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation) |
| |
| Update Section 2.10.5 "Shader Execution" in the subsection titled |
| "Texture Access" add a new paragraph before the last paragraph add |
| this line: |
| |
| "The stencil index texture internal component is ignored if the base |
| internal format is DEPTH_STENCIL_OES. |
| |
| If a vertex shader uses..." |
| |
| Additions to Chapter 3 of the OpenGL ES 2.0 specification (Rasterization) |
| |
| Add the following rows to Table 3.2 (page 62): |
| |
| type Parameter GL Data Type Special |
| ------------------------------------------------ |
| ... ... ... |
| UNSIGNED_SHORT ushort No |
| UNSIGNED_INT uint No |
| UNSIGNED_INT_24_8_OES uint Yes |
| |
| Add the following rows to Table 3.3 (page 62): |
| |
| Format Name Element Meaning and Order Target Buffer |
| ------------------------------------------------------------------ |
| ... ... ... |
| DEPTH_COMPONENT Depth Depth |
| DEPTH_STENCIL_OES Depth and Stencil Index Depth and Stencil |
| ... ... ... |
| |
| Add a row to Table 3.5 "Packed pixel formats" (page 64): |
| |
| type Parameter GL Type Components Pixel Formats |
| ------------------------------------------------------------------ |
| ... ... ... ... |
| UNSIGNED_INT_24_8_OES uint 2 DEPTH_STENCIL_OES |
| |
| Add a new table after Table 3.6 (page 64): |
| |
| UNSIGNED_INT_24_8_OES |
| |
| 31 30 29 28 27 26 ... 12 11 10 9 8 7 6 5 4 3 2 1 0 |
| +----------------------------------+---------------+ |
| | 1st Component | 2nd Component | |
| +----------------------------------+---------------+ |
| |
| Table 3.6.B: UNSIGNED_INT formats |
| |
| Add a row to Table 3.7 "Packed pixel field assignments" (page 65): |
| |
| Format | 1st 2nd 3rd 4th |
| ------------------+------------------------------- |
| ... | ... ... ... ... |
| DEPTH_STENCIL_OES | depth stencil N/A N/A |
| |
| Add the following paragraph to the end of the section "Conversion to |
| floating-point" (page 65): |
| |
| "For groups of components that contain both standard components and index |
| elements, such as DEPTH_STENCIL_OES, the index elements are not converted." |
| |
| In section 3.7.1 "Texture Image Specification", update page 67 to |
| say: |
| |
| "The selected groups are processed as described in section 3.6.2, stopping |
| just before final conversion. Each R, G, B, A, or depth value so generated |
| is clamped to [0, 1], while the stencil index values are masked by 2^n-1, |
| where n is the number of stencil bits in the internal format resolution |
| (see below). |
| |
| Components are then selected from the resulting R, G, B, A, depth, or |
| stencil index values to obtain a texture with the base internal format |
| specified by <internalformat>. Table 3.8 summarizes the mapping of R, G, |
| B, A, depth, or stencil values to texture components, as a function of the |
| base internal format of the texture image. <internalformat> may be |
| specified as one of the internal format symbolic constants listed in |
| table 3.8. Specifying a value for <internalformat> that is not one of the |
| above values generates the error INVALID_VALUE. If <internalformat> does |
| not match <format>, the error INVALID_OPERATION is generated. |
| |
| Textures with a base internal format of DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES are supported by texture image specification commands |
| only if <target> is TEXTURE_2D. Using these formats in conjunction with |
| any other <target> will result in an INVALID_OPERATION error. |
| |
| Textures with a base internal format of DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES only support one level of image data. Specifying a |
| non-zero value for <level> will result in an INVALID_OPERATION error. |
| |
| Textures with a base internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES |
| require either depth component data or depth/stencil component data. |
| Textures with other base internal formats require RGBA component data. The |
| error INVALID_OPERATION is generated if the base internal format is |
| DEPTH_COMPONENT or DEPTH_STENCIL_OES and <format> is not DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES, or if the base internal format is not DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES and <format> is DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
| |
| Textures with a base internal format of DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES do not support loading image data via the TexImage |
| commands. They can only have their contents specified by rendering |
| to them. The INVALID_OPERATION error is generated by the TexImage2D |
| command if <data> is not NULL for such textures." |
| |
| Add a row to table 3.8 (page 68), and update the title of the |
| second column: |
| |
| Base Internal Format RGBA, Depth and Stencil Values Internal Components |
| ------------------------------------------------------------------------- |
| ... ... ... |
| DEPTH_COMPONENT Depth D |
| DEPTH_STENCIL_OES Depth,Stencil D,S |
| ... ... ... |
| |
| Update the caption for table 3.8 (page 68) |
| |
| "Table 3.8: Conversion from RGBA, depth, and stencil pixel components to |
| internal texture components. Texture components R, G, B, A, and L are |
| converted back to RGBA colors during filtering as shown in table 3.12. |
| Texture components D are converted to RGBA colors as described in |
| section 3.7.8-1/2." |
| |
| Add the following to section 3.7.2 "Alternate Texture Image Specification |
| Commands": |
| |
| "CopyTexImage2D and CopyTexSubImage2D generate the INVALID_OPERATION |
| error if the base internal format of the destination texture is |
| DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
| |
| TexSubImage2D generates the INVALID_OPERATION error if the base internal |
| format of the texture is DEPTH_COMPONENT or DEPTH_STENCIL_OES." |
| |
| Add a new section between sections 3.7.8 and 3.7.9: |
| |
| "3.7.8-1/2 Depth/Stencil Textures |
| |
| If the currently bound texture's base internal format is DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES, then the output of the texture unit is as described |
| below. Otherwise, the texture unit operates in the normal manner. |
| |
| Let <D_t> be the depth texture value, provided by the shader's texture lookup |
| function. Then the effective texture value is computed as follows: |
| <Tau> = <D_t> |
| |
| If the texture image has a base internal format of DEPTH_STENCIL_OES, then |
| the stencil index texture component is ignored. The texture value <Tau> does |
| not include a stencil index component, but includes only the depth |
| component. |
| |
| The resulting <Tau> is assigned to <R_t>. In some implementations, <Tau> is |
| also assigned to <G_t>, <B_t>, or <A_t>. Thus in table 3.12, textures with |
| depth component data behave as if their base internal format is RGBA, with |
| values in <G_t>, <B_t>, and <A_t> being implementation dependent." |
| |
| Add the following to section 3.7.11 "Mipmap Generation": |
| |
| "If the level zero array contains depth or depth-stencil data, the |
| error INVALID_OPERATION is generated." |
| |
| Insert a new paragraph after the first paragraph of the "Texture Access" |
| subsection of section 3.8.2 on page 87, which says: |
| |
| "Texture lookups involving textures with depth component data generate |
| a texture source color by using depth data directly, as described in |
| section 3.7.8-1/2. The stencil texture internal component is ignored |
| if the base internal format is DEPTH_STENCIL_OES." |
| |
| Additions to Chapter 4 of the OpenGL ES 2.0 specification (Per-Fragment |
| Operations and the Framebuffer) |
| |
| In section 4.4.5 "Framebuffer Completeness", replace the the 3rd |
| paragraph with the following text: |
| |
| "* An internal format is color-renderable if it is one of the formats |
| from table 4.5 noted as color-renderable or if it is unsized format |
| RGBA or RGB. No other formats, including compressed internal formats, |
| are color-renderable. |
| |
| * An internal format is depth-renderable if it is one of the sized |
| internal formats from table 4.5 noted as depth-renderable, if it |
| is the unsized format DEPTH_COMPONENT or if it is the internal |
| format value of DEPTH24_STENCIL8_OES. No other formats are |
| depth-renderable. |
| |
| * An internal format is stencil-renderable if it is one of the sized |
| internal formats from table 4.5 noted as stencil-renderable or if it |
| is DEPTH24_STENCIL8_OES. No other formats are stencil-renderable." |
| |
| Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special |
| Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State |
| Requests) |
| |
| None. |
| |
| Interactions with OES_packed_depth_stencil |
| |
| If OES_packed_depth_stencil is not supported, mentions of |
| DEPTH_STENCIL_OES and UNSIGNED_INT_24_8_OES as a format/type combinations |
| for TexImage2D and TexSubImage2D are omitted. Mentions of |
| the internal format DEPTH24_STENCIL8_OES are also omitted. |
| |
| Interactions with EXT_texture_storage |
| |
| If EXT_texture_storage is supported the following internalformat |
| to format/type mappings are used: |
| |
| <internalformat> <format> <type> |
| ---------------- -------- ------ |
| DEPTH_COMPONENT16 DEPTH_COMPONENT UNSIGNED_SHORT |
| DEPTH_COMPONENT32_OES DEPTH_COMPONENT UNSIGNED_INT |
| DEPTH24_STENCIL8_OES DEPTH_STENCIL_OES UNSIGNED_INT |
| |
| Textures with the above <internalformats> only support one level of |
| image data. Specifying a value other than one for the <levels> parameter |
| to TexStorage2DEXT will result in an INVALID_OPERATION error. |
| |
| If EXT_texture_storage is not supported, ignore any references |
| to TexStorage2DEXT. |
| |
| Errors |
| |
| The error INVALID_OPERATION is generated by TexImage2D if <format> and |
| <internalformat> are DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT, |
| or UNSIGNED_INT. |
| |
| The error INVALID_OPERATION is generated by TexSubImage2D if <format> is |
| DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT, or UNSIGNED_INT. |
| |
| The error INVALID_OPERATION is generated by TexImage2D if <format> and |
| <internalformat> are not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT, |
| or UNSIGNED_INT. |
| |
| The error INVALID_OPERATION is generated by TexSubImage2D if <format> is |
| not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT, or UNSIGNED_INT. |
| |
| The error INVALID_OPERATION is generated by TexImage2D if <format> and |
| <internalformat> are DEPTH_STENCIL_OES and <type> is not |
| UNSIGNED_INT_24_8_OES. |
| |
| The error INVALID_OPERATION is generated by TexSubImage2D if <format> |
| is DEPTH_STENCIL_OES and <type> is not UNSIGNED_INT_24_8_OES. |
| |
| The error INVALID_OPERATION is generated by TexImage2D if <format> and |
| <internalformat> is not DEPTH_STENCIL_OES and <type> is |
| UNSIGNED_INT_24_8_OES. |
| |
| The error INVALID_OPERATION is generated by TexSubImage2D if <format> |
| is not DEPTH_STENCIL_OES and <type> is UNSIGNED_INT_24_8_OES. |
| |
| The error INVALID_OPERATION is generated in the following situations: |
| - TexImage2D is called with <format> and <internalformat> of |
| DEPTH_COMPONENT or DEPTH_STENCIL_OES and |
| - <target> is not TEXTURE_2D, |
| - <data> is not NULL, or |
| - <level> is not zero. |
| - TexSubImage2D is called with <format> of DEPTH_COMPONENT or |
| DEPTH_STENCIL_OES. |
| - TexStorage2DEXT is called with <internalformat> of DEPTH_COMPONENT16, |
| DEPTH_COMPONENT32_OES, or DEPTH24_STENCIL8_OES, and |
| - <target> is not TEXTURE_2D, or |
| - <levels> is not one. |
| - CopyTexImage2D is called with an <internalformat> that has a base |
| internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
| - CopyTexSubImage2D is called with a target texture that has a base |
| internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
| - GenerateMipmap is called on a texture that has a base internal format |
| of DEPTH_COMPONENT or DEPTH_STENCIL_OES. |
| |
| New State |
| |
| None. |
| |
| Issues |
| |
| 1) What are the differences between this extension and OES_depth_texture |
| and OES_packed_depth_stencil? |
| |
| RESOLVED: This extension: |
| - does not support loading pre-baked depth stencil data via |
| TexImage2D or TexSubImage2D. |
| - allows variability in the y-, z-, and w-components of the sample |
| results from depth textures. |
| - only supports one level textures. |
| - explicitly lists the errors for unsupported functionality. |
| Since these were not clearly specified in the OES_depth_texture |
| extension there may be differences in error values between |
| implementations of OES_depth_texture and ANGLE_depth_texture. |
| This specification was also rebased to apply against the OpenGL ES 2.0 |
| specification instead of the OpenGL specification, making it more |
| obvious what all the functionality changes are. |
| |
| 2) Why does TexSubImage2D accept the new format/type combinations even |
| though it does not actually support loading data? |
| |
| RESOLVED: This was done to be more consistent with the OES_depth_texture |
| extension and to make it easier to add support for loading texture |
| data if it is possible to support in the future. |
| |
| 3) Why are only 1-level depth textures supported? |
| |
| RESOLVED: The only use for multiple levels of depth textures would |
| be for fitlered texturing. However since it is not possible to |
| render to non-zero-level texture levels in OpenGL ES 2.0, and since |
| this extension forbids loading existing data and GenerateMipmap on |
| depth textures, it is impossible to initialize or specify contents |
| for non-zero levels of depth textures. |
| |
| Revision History |
| |
| 02/25/2013 swoods revise to allow texture lookup to guarantee depth values |
| only in red channel of sample result. |
| 06/04/2012 dgkoch fix errors, disallow multi-level depth textures. |
| 05/30/2012 dgkoch minor updates and add issues. |
| 05/23/2012 dgkoch intial revision based on OES_depth_texture and |
| OES_packed_depth_stencil and rebased against the ES 2.0 spec |
| |