Name

    CHROMIUM_get_multiple

Name Strings

    GL_CHROMIUM_get_multiple

Version

    Last Modifed Date: July 22, 2011

Dependencies

    OpenGL ES 2.0 is required.

Overview

    This extension adds the ability to query multiple program information in a
    single call.

Issues


New Tokens

    None

New Procedures and Functions

    void GetProgrmaInfoCHROMIUM (GLuint program, GLsizei bufsize,
                                 GLsizei* size, void* info)

    <program> is the program to query. <bufsize> is the size of the buffer to
    hold the results. <size> is a pointer to a GLsizei to store the size needed
    to hold the results. <info> is a pointer to memory to store the result.

    To query the space needed for the results set <info> to NULL.

    The format of the data that will be stored in the memory pointed to by
    <info> is as follows.

        struct ProgramInfoHeader {
          uint32 link_status;  // same as GetProgramiv called with LINK_STATUS
          uint32 num_attribs;  // the number of active attributes
          uint32 num_uniforms;  // the number of active uniforms
          ProgramInput inputs[num_attribs + num_uniforms];
        }

        // The data for one attrib or uniform from GetProgramInfoCHROMIUM.
        struct ProgramInput {
          uint32 type;             // The type (GL_VEC3, GL_SAMPLER_2D, etc.
          int32 size;              // The size (size of array for uniforms)
          uint32 location_offset;  // offset from ProgramInfoHeader to 'size'
                                   // locations for uniforms, 1 for attribs.
          uint32 name_offset;      // offset from ProgrmaInfoHeader to start of
                                   // name.
          uint32 name_length;      // length of the name.
        };

    It is important to note that for attribs, size is the size of the attrib and
    location_offset points to a single location. For uniforms, size is the
    number of array elements and location_offset points to an array of size
    locations, one of each element of the array.

    INVALID_VALUE is generated if <bufsize> is less than 0

    INVALID_VALUE is generated if <size> is NULL

    INVALID_OPERATION is returned if <size> is less than the size needed to hold
    all the results.


    NOTE: This function is not intended to be used directly. Chromium uses it
    internally to cache data.


Errors

    None.

New State

    None.

Revision History

    7/22/2011    Documented the extension
