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.5 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                                     0x1000
        TEXTURE_HEIGHT                                    0x1001
        TEXTURE_DEPTH                                     0x8071
        TEXTURE_INTERNAL_FORMAT                           0x1003
        TEXTURE_RED_SIZE                                  0x805C
        TEXTURE_GREEN_SIZE                                0x805D
        TEXTURE_BLUE_SIZE                                 0x805E
        TEXTURE_ALPHA_SIZE                                0x805F
        TEXTURE_DEPTH_SIZE                                0x884A
        TEXTURE_STENCIL_SIZE                              0x88F1
        TEXTURE_SHARED_SIZE                               0x8C3F
        TEXTURE_RED_TYPE                                  0x8C10
        TEXTURE_GREEN_TYPE                                0x8C11
        TEXTURE_BLUE_TYPE                                 0x8C12
        TEXTURE_ALPHA_TYPE                                0x8C13
        TEXTURE_DEPTH_TYPE                                0x8C16
        TEXTURE_COMPRESSED                                0x86A1

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.11.

    <target> may be one of TEXTURE_2D or one of the cube map face targets from
    table 3.18, indicating the two-dimensional texture or one of the six distinct
    2D images making up the cube map texture object. Otherwise an INVALID_ENUM is
    generated.

    <level> determines which level-of-detail's state is returned. If <level>
    is negative or larger than the maximum allowable level-of-detail, then an
    INVALID_VALUE error is generated.

    Note that TEXTURE_CUBE_MAP is not a valid <target> parameter for
    GetTexLevelParameter{if}vANGLE, because it does not specify a particular
    cube map face.

    For texture images with uncompressed internal formats, queries of
    <pname> TEXTURE_RED_TYPE, TEXTURE_GREEN_TYPE, TEXTURE_BLUE_TYPE,
    TEXTURE_ALPHA_TYPE, and TEXTURE_DEPTH_TYPE 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, TEXTURE_GREEN_SIZE,
    TEXTURE_BLUE_SIZE, TEXTURE_ALPHA_SIZE, TEXTURE_DEPTH_SIZE,
    TEXTURE_STENCIL_SIZE, and TEXTURE_SHARED_SIZE return the actual resolutions
    of the stored image components, not the resolutions specified when the image
    was defined. Invalid <pname> generate an INVALID_ENUM error.

    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, TEXTURE_WIDTH, TEXTURE_HEIGHT,
    and TEXTURE_DEPTH return the internal format, width, height, and depth,
    respectively, as specified when the image array was created.

Errors

    The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
    if <target> is not one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of
    the cube map face targets from table 3.18, or TEXTURE_2D_MULTISAMPLE_ANGLE.

    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 <value> is not one of TEXTURE_RED_TYPE, TEXTURE_GREEN_TYPE,
    TEXTURE_BLUE_TYPE, TEXTURE_ALPHA_TYPE, TEXTURE_DEPTH_TYPE,
    TEXTURE_DEPTH_SIZE, TEXTURE_STENCIL_SIZE, TEXTURE_SHARED_SIZE,
    TEXTURE_WIDTH, TEXTURE_HEIGHT, TEXTURE_DEPTH, TEXTURE_INTERNAL_FORMAT,
    TEXTURE_RED_SIZE, TEXTURE_GREEN_SIZE, TEXTURE_BLUE_SIZE, TEXTURE_ALPHA_SIZE,
    or TEXTURE_COMPRESSED.

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             Z+    GetTexLevelParameterANGLE  0       Specified width              3.8
    TEXTURE_HEIGHT            Z+    GetTexLevelParameterANGLE  0       Specified height (2D/3D)     3.8
    TEXTURE_DEPTH             Z+    GetTexLevelParameterANGLE  0       Specified depth (3D)         3.8
    TEXTURE_INTERNAL_FORMAT   E     GetTexLevelParameterANGLE  RGBA    Internal format              3.8
                                                               or R8   (see section 3.8.14)
    TEXTURE_x_SIZE            6xZ+  GetTexLevelParameterANGLE  0       Component resolution (x is   3.8
                                                                       RED, GREEN, BLUE, ALPHA,
                                                                       DEPTH, or STENCIL)
    TEXTURE_SHARED_SIZE       Z+    GetTexLevelParameterANGLE  0       Shared exponent field        3.8
                                                                       resolution
    TEXTURE_x_TYPE            E     GetTexLevelParameterANGLE  NONE    Component type (x is RED,    6.1.4
                                                                       GREEN, BLUE, ALPHA, or
                                                                       DEPTH)
    TEXTURE_COMPRESSED        B     GetTexLevelParameterANGLE  FALSE   True if image has a          3.8.6
                                                                       compressed internal format

Issues
    None

Revision History

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