
Name

    ATI_element_array


Name Strings

    GL_ATI_element_array


Contact

    Rick Hammerstone, AMD (rick.hammerstone 'at' amd.com)


Version

    0.3 - 11/04/06
    Updated contact info after ATI/AMD merger.

    0.2 - 09/18/01
    Changed default behavior of draw commands when element array is
    not enabled. Now generates an error and draws nothing.

    0.1 - 07/06/01
    Initial revision


Number

    256
    
Dependencies

    This extension is written against the OpenGL 1.2.1 Specification.
    OpenGL 1.1 is required. ATI_vertex_array_object affects the
    definition of this extension.

    
Overview

    This extension provides a mechanism for an application to create
    an array of index data for use in specifying geometric primitives.
    
    This extension is most useful when used in conjunction with the
    ATI_vertex_array_object extension. ATI_vertex_array_object
    provides an interface for storing vertex array data in persistent,
    hardware-addressable memory. In cases where large amounts of
    vertex data are in use, the index data used to construct
    primitives (typically as passed to the GL through DrawElements)
    can impose a significant bandwidth burden. ATI_element_array
    allows the application to specify independent arrays of elements,
    which can then be cached using ATI_vertex_array_object.

    
Issues

    Should we allow ElementPointerATI to specify a stride?
    
        No, the expectation is that the indices are always packed
        together. 
    
    Should we allow ElementPointerATI to accept more types than those
    accepted by DrawElements and DrawRangeElements?
    
        No, it doesn't seem useful to allow float indices, they have
        to get converted to some kind of int anyways.
    
    Should the element count be specified in the draw command, or as
    part of the definition of the element array.
    
        As part of the draw command. Specifying it as part of the
        definition of element array sort of makes sense, but it
        doesn't really fit with the way that vertex arrays currently
        work.

    Do we want to specify new entry points for the draw commands?

        Yes. The alternative is to overload DrawElements and
        DrawRangeElements by doing something funky like passing a null
        pointer. This seems like it would be too confusing.

    Is it useful to have the draw commands do something (other than
    return an error) when the element array is disabled?

        No. It's very hard to ascertain the intent of the application
	at this point, so it's probably best to not draw anything.

    
New Procedures and Functions
    
    void ElementPointerATI(enum type, const void *pointer)
    
    void DrawElementArrayATI(enum mode, sizei count)
    
    void DrawRangeElementArrayATI(enum mode, uint start, 
                                  uint end, sizei count)
    
    
New Tokens
    
    Accepted by the <array> parameter of EnableClientState and
    DisableClientState, the <value> parameter of IsEnabled, and if
    ATI_vertex_array_object is defined, the <array> parameter of
    ArrayObjectATI, GetArrayObjectivATI, GetArrayObjectfvATI:
    
        ELEMENT_ARRAY_ATI		0x8768
    
    Accepted by the <value> parameter of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:
    
        ELEMENT_ARRAY_TYPE_ATI		0x8769

    Accepted by the <pname> paramater of GetPointerv:
    
        ELEMENT_ARRAY_POINTER_ATI	0x876A
    
    
Additions to Chapter 2 of the GL Specification (OpenGL Operation)

    In section 2.6.3, GL Commands within Begin/End, add
    ElementArrayATI to the list of commands that are not allowed
    within any Begin/End pair, but may or may not generate an error.


    Inserted in section 2.8, Vertex Arrays, after the description of
    DrawRangeElements, but before the description of
    InterleavedArrays:
    
    The commands
    
        void DrawElementArrayATI(enum mode, sizei count)
    
        void DrawRangeElementArrayATI(enum mode, uint start, 
                                      uint end, sizei count)
    
    can be used to construct a sequence of geometric primitives in the
    same manner as DrawElements and DrawRangeElements, but using
    a previously defined array of indices. For DrawElementArrayATI,
    the <mode> and <count> arguments match the corresponding arguments
    to DrawElements. For DrawRangeElementArrayATI, the <mode>,
    <start>, <end> and <count> arguments match the corresponding
    arguments to DrawRangeElements.
    
    For both DrawElementArrayATI and DrawRangeElementArrayATI, the
    list of indices used to generate primitives is defined by the
    command
    
        void ElementPointer(enum type, const void *pointer)
    
    The <pointer> argument is used to specify the list of indices, and
    the <type> argument specifies their format. These arguments match
    the <type> and <indices> arguments to DrawElements and
    DrawRangeElements, and the allowed types match those accepted by
    these two commands -- GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, and
    GL_UNSIGNED_INT. ElementPointer does not specify a stride between
    successive indices in the array, the values must be stored
    sequentially in memory.
    
    The array of element indices can be enabled and disabled by
    calling EnableClientState and DisableClientState with the argument
    ELEMENT_ARRAY_ATI. DrawElements and DrawRangeElements ignore the
    currently enabled element array.
    
    If a DrawElementArrayATI or DrawRangeElementArrayATI command is
    issued when there is no currently enabled element array, an error
    is generated, no drawing is done and the current state is not
    updated. 
    
    
    
Additions to Chapter 3 of the 1.2.1 Specification (Rasterization)

    None


Additions to Chapter 4 of the 1.2.1 Specification (Per-Fragment
Operations and the Frame Buffer)

    None


Additions to Chapter 5 of the 1.2.1 Specification (Special Functions)

    In section 5.4, Display Lists, change the last sentence of the first
    paragraph to read: 
    
    (Vertex array and element array pointers are dereferenced when the
    commands ArrayElement, DrawArrays, DrawElements,
    DrawRangeElements, DrawElementArrayATI, or
    DrawRangeElementArrayATI are accumulated into a display list.)
    
    In section 5.4, Display Lists, add ElementArrayATI to the list of
    commands that are not compiled into display lists but are executed
    immediately.


Additions to Chapter 6 of the 1.2.1 Specification (State and State
Requests)

    In section 6.1.11, Pointer and String Queries, add
    ELEMENT_ARRAY_POINTER_ATI to the list of possible values for the
    <pname> parameter of GetPointerv.
    
    
Additions to the specification of ATI_vertex_array_object
    
    Added to the discussion of the <size>, <type>, and <stride>
    parameters of ArrayObjectATI:
    
    If the <array> parameter of ArrayObjectATI is ELEMENT_ARRAY_ATI,
    then <size> must be one, and <stride> must be zero. INVALID_VALUE
    is generated if either of these parameters is invalid. The <type>
    parameter must be UNSIGNED_BYTE, UNSIGNED_SHORT, or UNSIGNED_INT.
    INVALID_ENUM is generated if <type> is not one of these values.
    
    
Errors
    
    Invalid <mode> or <count> parameters to DrawElementArrayATI
    generate the same errors as would the corresponding call to
    DrawElements.
    
    Invalid <mode>, <count>, <start>, or <end> parameters to
    DrawRangeElementArrayATI generate the same errors as would the
    corresponding call to DrawRangeElements.
    
    INVALID_ENUM is generated if the <type> parameter of
    ElementArrayATI is not UNSIGNED_BYTE, UNSIGNED_SHORT, or
    UNSIGNED_INT. 

    INVALID_OPERATION is generated if a DrawElementArrayATI or
    DrawRangeElementArrayATI command is issued when there is no
    currently enabled element array.

    
New State
    
    Added to table 6.6, Vertex Array Data
    
    Get Value                   Get Command     Type    Initial Value   Attrib
    ---------                   -----------     ----    -------------   ------
    ELEMENT_ARRAY_ATI           IsEnabled       B       False           client
    ELEMENT_ARRAY_TYPE_ATI      GetIntegerv     Z4      UNSIGNED_INT    client
    ELEMENT_ARRAY_POINTER_ATI   GetPointerv     Z+      0               client
        
    
Implementation Notes

    For maximum performance, applications should use
    UNSIGNED_SHORT or UNSIGNED_INT indices.
