Name

    ANGLE_get_tex_level_parameter

Name Strings

    GL_ANGLE_get_tex_level_parameter

Contributors

    Geoff Lang, Google

Contact

    Geoff Lang (geofflang 'at' google.com)

Status

    Incomplete

Version

    Last Modified Date: Oct 12, 2020
    Author Revision: 1

Number

    OpenGL ES Extension XX

Dependencies

    OpenGL ES 2.0 is required.

    This extension is written against the OpenGL ES 3.0.6 specification.

Overview

    This extension allows the user to query information about specific texture
    levels exposed later in OpenGL ES 3.1.

IP Status

    No known IP claims.

New Procedures and Functions

    void GetTexLevelParameter{if}vANGLE(enum target, int level,
                                        enum pname, T *params );

New Tokens

    Accepted by the <pname> parameter of GetTexLevelParameter{if}vANGLE:

        TEXTURE_WIDTH_ANGLE                               0x1000
        TEXTURE_HEIGHT_ANGLE                              0x1001
        TEXTURE_DEPTH_ANGLE                               0x8071
        TEXTURE_INTERNAL_FORMAT_ANGLE                     0x1003
        TEXTURE_RED_SIZE_ANGLE                            0x805C
        TEXTURE_GREEN_SIZE_ANGLE                          0x805D
        TEXTURE_BLUE_SIZE_ANGLE                           0x805E
        TEXTURE_ALPHA_SIZE_ANGLE                          0x805F
        TEXTURE_DEPTH_SIZE_ANGLE                          0x884A
        TEXTURE_STENCIL_SIZE_ANGLE                        0x88F1
        TEXTURE_SHARED_SIZE_ANGLE                         0x8C3F
        TEXTURE_RED_TYPE_ANGLE                            0x8C10
        TEXTURE_GREEN_TYPE_ANGLE                          0x8C11
        TEXTURE_BLUE_TYPE_ANGLE                           0x8C12
        TEXTURE_ALPHA_TYPE_ANGLE                          0x8C13
        TEXTURE_DEPTH_TYPE_ANGLE                          0x8C16
        TEXTURE_COMPRESSED_ANGLE                          0x86A1
        TEXTURE_SAMPLES_ANGLE                             0x9106
        TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE              0x9107

    (Note: these tokens are shared with OpenGL ES 3.1.)

    Returned in <params> by GetTexLevelParameter{if}vANGLE:

        UNSIGNED_NORMALIZED_ANGLE                         0x8C17
        SIGNED_NORMALIZED_ANGLE                           0x8F9C

    (Note: these tokens are shared with OpenGL ES 3.0.)

Additions to Chapter 6 of the OpenGL ES 3.0.5 Specification (State and State
Requests)

    Modify Section 6.1.4 "Texture Queries":

    (Add the following text to the end of the section)

    The commands

        void GetTexLevelParameter{if}vANGLE(enum target, int level,
                                            enum pname, T *params );

    place information about texture image parameter <pname> for level-of-detail
    <level> of the specified <target> into <params>. <pname> must be one of the
    symbolic values in table 6.10.

    <target> may be any of the cube map face targets from table 3.21 or any
    texture target valid for the BindTexture command except TEXTURE_CUBE_MAP.

    <level> determines which level-of-detail's state is returned. The maximum
    value of <level> depends on the texture <target>:

    * For cube map targets, the maximum value is log2 of the value of
      MAX_CUBE_MAP_TEXTURE_SIZE.

    * For the 3D texture target, the maximum value is log2 of the value of
      MAX_3D_TEXTURE_SIZE.

    * For targets that do not support mipmaps, the maximum value is zero.

    * For all other texture targets, the maximum value is log2 of the value of
      MAX_TEXTURE_SIZE.

    For texture images with uncompressed internal formats, queries of <pname>
    TEXTURE_RED_TYPE_ANGLE, TEXTURE_GREEN_TYPE_ANGLE, TEXTURE_BLUE_TYPE_ANGLE,
    TEXTURE_ALPHA_TYPE_ANGLE, and TEXTURE_DEPTH_TYPE_ANGLE return the data type
    used to store the component. Types NONE, SIGNED_NORMALIZED, UNSIGNED_-
    NORMALIZED, FLOAT, INT, and UNSIGNED_INT respectively indicate missing,
    signed normalized fixed-point, unsigned normalized fixed-point, floating-
    point, signed unnormalized integer, and unsigned unnormalized integer
    components. Queries of <pname> TEXTURE_RED_SIZE_ANGLE, TEXTURE_GREEN_SIZE_-
    ANGLE, TEXTURE_BLUE_SIZE_ANGLE, TEXTURE_ALPHA_SIZE_ANGLE, TEXTURE_DEPTH_-
    SIZE_ANGLE, TEXTURE_STENCIL_SIZE_ANGLE, and TEXTURE_SHARED_SIZE_ANGLE return
    the actual resolutions of the stored image components, not the resolutions
    specified when the image was defined.

    For texture images with compressed internal formats, the types returned
    specify how components are interpreted after decompression, while the
    resolutions returned specify the component resolution of an uncompressed
    internal format that produces an image of roughly the same quality as the
    compressed image in question. Since the quality of the implementation's
    compression algorithm is likely data-dependent, the returned component sizes
    should be treated only as rough approximations.

    Queries of <pname> TEXTURE_INTERNAL_FORMAT_ANGLE, TEXTURE_WIDTH_ANGLE,
    TEXTURE_HEIGHT_ANGLE, and TEXTURE_DEPTH_ANGLE return the internal format,
    width, height, and depth, respectively, as specified when the texture image
    was created. Queries of <pname> TEXTURE_DEPTH_ANGLE return 1 if the created
    image has neither 3D slices nor array layers.

    Queries of <pname> TEXTURE_SAMPLES_ANGLE, and TEXTURE_FIXED_SAMPLE_-
    LOCATIONS_ANGLE on multisample textures return the number of samples and
    whether texture sample fixed locations are enabled, respectively.
    For non-multisample textures, the default values in table 6.10 are returned.

Errors

    The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
    if <target> is not one of the texture targets described above.

    The error INVALID_VALUE is generated by GetTexLevelParameter{if}vANGLE
    if <level> is negative or larger than the maximum allowable level-of-detail.

    The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
    if <pname> is not one of the symbolic values in table 6.10.

Interactions with OpenGL ES 3.1

    If this extension is exposed on OpenGL ES 3.1 or higher context versions,
    the GetTexLevelParameter{if}vANGLE commands become identical to the core
    GetTexLevelParameter{if}v commands.

Interactions with OpenGL ES 3.0

    If this extension is exposed on OpenGL ES 3.0, which does not support
    multisample textures, queries with the TEXTURE_SAMPLES_ANGLE and
    TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE parameters are still valid.

    If multisample textures are supported via additional extensions, such as
    ANGLE_texture_multisample, queries with these parameters return
    corresponding parameter values for multisample textures.

Interactions with OpenGL ES 2.0

    If this extension is exposed on OpenGL ES 2.0, which does not support
    multisample textures, 2D array and 3D textures, depth textures, combined
    depth-stencil textures, and the shared-exponent internal format, queries
    with the TEXTURE_SAMPLES_ANGLE, TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE,
    TEXTURE_DEPTH_ANGLE, TEXTURE_DEPTH_SIZE_ANGLE, TEXTURE_STENCIL_SIZE_ANGLE,
    and TEXTURE_SHARED_SIZE_ANGLE parameters are still valid.

    If 3D textures are supported via additional extensions, such as
    OES_texture_3d, queries with the TEXTURE_DEPTH_ANGLE parameter return
    corresponding depth values for 3D textures.

    If depth textures are supported via additional extensions, such as
    OES_depth_texture, queries with the TEXTURE_DEPTH_SIZE_ANGLE and
    TEXTURE_DEPTH_TYPE_ANGLE parameters return corresponding resolutions
    and types of the depth component.

    If combined depth-stencil textures are supported via additional extensions,
    such as OES_packed_depth_stencil, queries with the TEXTURE_STENCIL_SIZE_-
    ANGLE parameter return corresponding resolutions of the stencil
    component.

    If the shared-exponent internal format is supported via additional
    extensions, such as APPLE_texture_packed_float, queries with the TEXTURE_-
    SHARED_SIZE_ANGLE parameter return corresponding resolutions of the
    shared-exponent component.

    If this extension is exposed on OpenGL ES 2.0, the enums denoting the
    normalized component types can be taken from this extension as they are not
    defined in OpenGL ES 2.0 headers.

New State

    (add new table 6.10, Textures (state per texture image), renumber subsequent tables)

                                                                      Initial
    Get Value                      Type   Get Command                  Value   Description                  Sec.
    -----------------------------  ----   --------------------------- -------  ---------------------------  ------
    TEXTURE_WIDTH_ANGLE             Z+    GetTexLevelParameterivANGLE  0       Specified width              3.8
    TEXTURE_HEIGHT_ANGLE            Z+    GetTexLevelParameterivANGLE  0       Specified height (2D/3D)     3.8
    TEXTURE_DEPTH_ANGLE             Z+    GetTexLevelParameterivANGLE  0       Specified depth (3D)         3.8
    TEXTURE_INTERNAL_FORMAT_ANGLE   E     GetTexLevelParameterivANGLE  RGBA    Internal format              3.8
                                                                               (see section 3.8.14)
    TEXTURE_x_SIZE_ANGLE            6xZ+  GetTexLevelParameterivANGLE  0       Component resolution (x is   3.8
                                                                               RED, GREEN, BLUE, ALPHA,
                                                                               DEPTH, or STENCIL)
    TEXTURE_SHARED_SIZE_ANGLE       Z+    GetTexLevelParameterivANGLE  0       Shared exponent field        3.8
                                                                               resolution
    TEXTURE_x_TYPE_ANGLE            E     GetTexLevelParameterivANGLE  NONE    Component type (x is RED,    6.1.4
                                                                               GREEN, BLUE, ALPHA, or
                                                                               DEPTH)
    TEXTURE_COMPRESSED_ANGLE        B     GetTexLevelParameterivANGLE  FALSE   True if image has a          3.8.6
                                                                               compressed internal format
    TEXTURE_SAMPLES_ANGLE           Z+    GetTexLevelParameterivANGLE  0       Number of samples per texel
    TEXTURE_FIXED_SAMPLE_-          B     GetTexLevelParameterivANGLE  TRUE    Whether the image uses
    LOCATIONS_ANGLE                                                            a fixed sample pattern

Issues
    None

Revision History

    Rev.    Date    Author       Changes
    ----  --------  ----------   --------------------------------------------
    1     14/10/20   Geoff Lang  First revision. Adapted from OpenGL ES
                                 specification 3.1.
