15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    NV_instanced_arrays
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_NV_instanced_arrays
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContributors
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Contributors to ARB_instanced_arrays and ANGLE_instanced_arrays
125bd8deadSopenharmony_ci    Mathias Heyer, NVIDIA
135bd8deadSopenharmony_ci    Greg Roth, NVIDIA
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ciContact
165bd8deadSopenharmony_ci
175bd8deadSopenharmony_ci    Greg Roth, NVIDIA (groth 'at' nvidia 'dot' com)
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciStatus
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Complete
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ciVersion
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ci    Last Modified Date:  Aug 28, 2012
265bd8deadSopenharmony_ci    Author Revision: 4
275bd8deadSopenharmony_ci
285bd8deadSopenharmony_ciNumber
295bd8deadSopenharmony_ci
305bd8deadSopenharmony_ci    OpenGL ES Extension #145
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ciDependencies
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    OpenGL ES 2.0 is required.
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ci    This extension is written against the OpenGL ES 2.0.25
375bd8deadSopenharmony_ci    Specification.
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ci    NV_draw_instanced affects the definition of this extension.
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    OES_element_index_uint affects the definition of this extension.
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci    OES_vertex_array_object affects the definition of this extension.
445bd8deadSopenharmony_ci
455bd8deadSopenharmony_ciOverview
465bd8deadSopenharmony_ci
475bd8deadSopenharmony_ci    A common use case in GL for some applications is to be able to
485bd8deadSopenharmony_ci    draw the same object, or groups of similar objects that share
495bd8deadSopenharmony_ci    vertex data, primitive count and type, multiple times.  This
505bd8deadSopenharmony_ci    extension provides a means of accelerating such use cases while
515bd8deadSopenharmony_ci    limiting the number of required API calls, and keeping the amount
525bd8deadSopenharmony_ci    of duplicate data to a minimum.
535bd8deadSopenharmony_ci
545bd8deadSopenharmony_ci    In particular, this extension specifies an alternative to the
555bd8deadSopenharmony_ci    read-only shader variable introduced by NV_draw_instanced.  It
565bd8deadSopenharmony_ci    uses the same draw calls introduced by that extension, but
575bd8deadSopenharmony_ci    redefines them so that a vertex shader can instead use vertex
585bd8deadSopenharmony_ci    array attributes as a source of instance data.
595bd8deadSopenharmony_ci
605bd8deadSopenharmony_ci    This extension introduces an array "divisor" for generic
615bd8deadSopenharmony_ci    vertex array attributes, which when non-zero specifies that the
625bd8deadSopenharmony_ci    attribute is "instanced."  An instanced attribute does not
635bd8deadSopenharmony_ci    advance per-vertex as usual, but rather after every <divisor>
645bd8deadSopenharmony_ci    conceptual draw calls.
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    (Attributes which aren't instanced are repeated in their entirety
675bd8deadSopenharmony_ci    for every conceptual draw call.)
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    By specifying transform data in an instanced attribute or series
705bd8deadSopenharmony_ci    of instanced attributes, vertex shaders can, in concert with the
715bd8deadSopenharmony_ci    instancing draw calls, draw multiple instances of an object with
725bd8deadSopenharmony_ci    one draw call.
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ciNew Procedures and Functions
755bd8deadSopenharmony_ci
765bd8deadSopenharmony_ci    void VertexAttribDivisorNV(uint index, uint divisor);
775bd8deadSopenharmony_ci
785bd8deadSopenharmony_ciNew Tokens
795bd8deadSopenharmony_ci
805bd8deadSopenharmony_ci    Accepted by the <pname> parameters of GetVertexAttribfv, and
815bd8deadSopenharmony_ci    GetVertexAttribiv:
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ci        VERTEX_ATTRIB_ARRAY_DIVISOR_NV                  0x88FE
845bd8deadSopenharmony_ci
855bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL ES 2.0.25 Specification
865bd8deadSopenharmony_ci(OpenGL ES Operation)
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ci    Modify section 2.8 (Vertex Arrays)
895bd8deadSopenharmony_ci
905bd8deadSopenharmony_ci    After description of EnableVertexAttribArray /
915bd8deadSopenharmony_ci    DisableVertexAttribArray add the following:
925bd8deadSopenharmony_ci
935bd8deadSopenharmony_ci    The internal counter <instanceID> is a 32-bit integer value which
945bd8deadSopenharmony_ci    may be read by a vertex shader as <gl_InstanceIDNV>, as
955bd8deadSopenharmony_ci    described in section 2.10.5.2.  The value of this counter is
965bd8deadSopenharmony_ci    always zero, except as noted below.
975bd8deadSopenharmony_ci
985bd8deadSopenharmony_ci    The command
995bd8deadSopenharmony_ci
1005bd8deadSopenharmony_ci        void VertexAttribDivisorNV(uint index, uint divisor);
1015bd8deadSopenharmony_ci
1025bd8deadSopenharmony_ci    modifies the rate at which generic vertex attributes advance when
1035bd8deadSopenharmony_ci    rendering multiple instances of primitives in a single draw call.
1045bd8deadSopenharmony_ci    If <divisor> is zero, the attribute at slot <index> advances once
1055bd8deadSopenharmony_ci    per vertex.  If <divisor> is non-zero, the attribute advances once
1065bd8deadSopenharmony_ci    per <divisor> instances of the set(s) of vertices being rendered.
1075bd8deadSopenharmony_ci    An attribute is referred to as "instanced" if its <divisor> value is
1085bd8deadSopenharmony_ci    non-zero.
1095bd8deadSopenharmony_ci
1105bd8deadSopenharmony_ci    Replace the text describing DrawArrays and DrawElements in the
1115bd8deadSopenharmony_ci    "Transferring Array Elements" subsection of 2.8, from the second paragraph
1125bd8deadSopenharmony_ci    through the end of the section with the following:
1135bd8deadSopenharmony_ci
1145bd8deadSopenharmony_ci    The function
1155bd8deadSopenharmony_ci
1165bd8deadSopenharmony_ci        void DrawArraysOneInstance( enum mode, int first, sizei count, int instance );
1175bd8deadSopenharmony_ci
1185bd8deadSopenharmony_ci    does not exist in the GL, but is used to describe functionality in
1195bd8deadSopenharmony_ci    the rest of this section.  This function constructs a sequence of
1205bd8deadSopenharmony_ci    geometric primitives using the indicated elements of enabled arrays.
1215bd8deadSopenharmony_ci    <mode> specifies what kind of primitives are constructed, as defined
1225bd8deadSopenharmony_ci    in section 2.6.1. Elements <first> through <first> + <count> - 1 of
1235bd8deadSopenharmony_ci    enabled non-instanced arrays are transferred to the GL.
1245bd8deadSopenharmony_ci    If an enabled vertex attribute array is instanced (it has a non-zero
1255bd8deadSopenharmony_ci    attribute <divisor> as specified by VertexAttribDivisorNV), the
1265bd8deadSopenharmony_ci    element that is transferred to the GL is given by:
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci        floor( <instance> / <divisor> ).
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ci    If an array corresponding to a generic attribute required by a
1315bd8deadSopenharmony_ci    vertex shader is not enabled, then the corresponding element is
1325bd8deadSopenharmony_ci    taken from the current generic attribute state (see section 2.7).
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci    If an array corresponding to a attribute required by a vertex
1355bd8deadSopenharmony_ci    shader is enabled, the corresponding current generic attribute value
1365bd8deadSopenharmony_ci    is unaffected by the execution of DrawArraysOneInstance.
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci    Specifying <first> < 0 results in undefined behavior.  Generating
1395bd8deadSopenharmony_ci    the error INVALID_VALUE is recommended in this case.
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    The command
1425bd8deadSopenharmony_ci
1435bd8deadSopenharmony_ci        void DrawArrays( enum mode, int first, sizei count );
1445bd8deadSopenharmony_ci
1455bd8deadSopenharmony_ci    behaves identically to DrawArraysOneInstance with the instance
1465bd8deadSopenharmony_ci    set to zero; the effect of calling
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ci        DrawArrays(mode, first, count);
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ci    is equivalent to the command sequence:
1515bd8deadSopenharmony_ci
1525bd8deadSopenharmony_ci        if (mode or count is invalid )
1535bd8deadSopenharmony_ci            generate appropriate error
1545bd8deadSopenharmony_ci        else
1555bd8deadSopenharmony_ci            DrawArraysOneInstance(mode, first, count, 0);
1565bd8deadSopenharmony_ci
1575bd8deadSopenharmony_ci    The command
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci        void DrawArraysInstancedNV(enum mode, int first, sizei count,
1605bd8deadSopenharmony_ci                sizei primcount);
1615bd8deadSopenharmony_ci
1625bd8deadSopenharmony_ci    behaves identically to DrawArrays except that <primcount>
1635bd8deadSopenharmony_ci    instances of the range of elements are executed, the value of
1645bd8deadSopenharmony_ci    <instanceID> advances for each iteration, and the instance advances
1655bd8deadSopenharmony_ci    between each set. Instanced attributes that have <divisor> N, (where
1665bd8deadSopenharmony_ci    N > 0, as specified by VertexAttribDivisorNV advance once every N
1675bd8deadSopenharmony_ci    instances.
1685bd8deadSopenharmony_ci
1695bd8deadSopenharmony_ci    It has the same effect as:
1705bd8deadSopenharmony_ci
1715bd8deadSopenharmony_ci        if (mode, count, or primcount is invalid)
1725bd8deadSopenharmony_ci            generate appropriate error
1735bd8deadSopenharmony_ci        else {
1745bd8deadSopenharmony_ci            for (i = 0; i < primcount; i++) {
1755bd8deadSopenharmony_ci                instanceID = i;
1765bd8deadSopenharmony_ci                DrawArraysOneInstance(mode, first, count, i);
1775bd8deadSopenharmony_ci            }
1785bd8deadSopenharmony_ci            instanceID = 0;
1795bd8deadSopenharmony_ci        }
1805bd8deadSopenharmony_ci
1815bd8deadSopenharmony_ci    The function
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci        void DrawElementsOneInstance( enum mode, sizei count, enum type,
1845bd8deadSopenharmony_ci            void *indices, int instance );
1855bd8deadSopenharmony_ci
1865bd8deadSopenharmony_ci    does not exist in the GL, but is used to describe functionality in
1875bd8deadSopenharmony_ci    the rest of this section.  This function constructs a sequence of
1885bd8deadSopenharmony_ci    geometric primitives by successively transferring the <count>
1895bd8deadSopenharmony_ci    elements whose indices are stored in <indices>. <type> must be one
1905bd8deadSopenharmony_ci    of UNSIGNED_BYTE, UNSIGNED_SHORT, or UNSIGNED_INT, indicating that
1915bd8deadSopenharmony_ci    the values in <indices> are indices of GL type ubyte, ushort, or
1925bd8deadSopenharmony_ci    uint respectively. <mode> specifies what kind of primitives are
1935bd8deadSopenharmony_ci    constructed, as defined in section 2.6.1.
1945bd8deadSopenharmony_ci
1955bd8deadSopenharmony_ci    If an enabled vertex attribute array is instanced (it has a non-zero
1965bd8deadSopenharmony_ci    attribute <divisor> as specified by VertexAttribDivisorNV), the
1975bd8deadSopenharmony_ci    element that is transferred to the GL is given by:
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci        floor( <instance> / <divisor> );
2005bd8deadSopenharmony_ci
2015bd8deadSopenharmony_ci    If an array corresponding to a generic attribute required by a
2025bd8deadSopenharmony_ci    vertex shader is not enabled, then the corresponding element is
2035bd8deadSopenharmony_ci    taken from the current generic attribute state (see section 2.7).
2045bd8deadSopenharmony_ci    Otherwise, if an array is enabled, the corresponding current
2055bd8deadSopenharmony_ci    generic attribute value is unaffected by the execution of
2065bd8deadSopenharmony_ci    DrawElementsOneInstance.
2075bd8deadSopenharmony_ci
2085bd8deadSopenharmony_ci    The command
2095bd8deadSopenharmony_ci
2105bd8deadSopenharmony_ci        void DrawElements( enum mode, sizei count, enum type,
2115bd8deadSopenharmony_ci            void *indices );
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci    behaves identically to DrawElementsOneInstance with <instance> set
2145bd8deadSopenharmony_ci    to zero; the effect of calling
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ci        DrawElements(mode, count, type, indices);
2175bd8deadSopenharmony_ci
2185bd8deadSopenharmony_ci    is equivalent to the command sequence:
2195bd8deadSopenharmony_ci
2205bd8deadSopenharmony_ci        if (mode, count or type is invalid )
2215bd8deadSopenharmony_ci            generate appropriate error
2225bd8deadSopenharmony_ci        else
2235bd8deadSopenharmony_ci            DrawElementsOneInstance(mode, count, type, indices, 0);
2245bd8deadSopenharmony_ci
2255bd8deadSopenharmony_ci    The command
2265bd8deadSopenharmony_ci
2275bd8deadSopenharmony_ci        void DrawElementsInstancedNV(enum mode, sizei count, enum type,
2285bd8deadSopenharmony_ci                const void *indices, sizei primcount);
2295bd8deadSopenharmony_ci
2305bd8deadSopenharmony_ci    behaves identically to DrawElements except that <primcount>
2315bd8deadSopenharmony_ci    instances of the set of elements are executed, the value of
2325bd8deadSopenharmony_ci    <instanceID> advances for each iteration, and the instance
2335bd8deadSopenharmony_ci    advances between each set. Instanced attributes are advanced as
2345bd8deadSopenharmony_ci    they do during the execution of DrawArraysInstancedNV. It has the
2355bd8deadSopenharmony_ci    same effect as:
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci        if (mode, count, primcount, or type is invalid )
2385bd8deadSopenharmony_ci            generate appropriate error
2395bd8deadSopenharmony_ci        else {
2405bd8deadSopenharmony_ci            for (int i = 0; i < primcount; i++) {
2415bd8deadSopenharmony_ci                instanceID = i;
2425bd8deadSopenharmony_ci                DrawElementsOneInstance(mode, count, type, indices, i);
2435bd8deadSopenharmony_ci            }
2445bd8deadSopenharmony_ci            instanceID = 0;
2455bd8deadSopenharmony_ci        }
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ci    If the number of supported generic vertex attributes (the value of
2485bd8deadSopenharmony_ci    MAX_VERTEX_ATTRIBS) is <n>, then the client state required to
2495bd8deadSopenharmony_ci    implement vertex arrays consists of <n> boolean values, <n> memory
2505bd8deadSopenharmony_ci    pointers, <n> integer stride values, <n> symbolic constants
2515bd8deadSopenharmony_ci    representing array types, <n> integers representing values per
2525bd8deadSopenharmony_ci    element, <n> boolean values indicating normalization, and <n>
2535bd8deadSopenharmony_ci    integers representing vertex attribute divisors.
2545bd8deadSopenharmony_ci
2555bd8deadSopenharmony_ci    In the initial state, the boolean values are each false, the memory
2565bd8deadSopenharmony_ci    pointers are each NULL, the strides are each zero, the array types
2575bd8deadSopenharmony_ci    are each FLOAT, the integers representing values per element are
2585bd8deadSopenharmony_ci    each four, and the divisors are each zero.
2595bd8deadSopenharmony_ci
2605bd8deadSopenharmony_ci    Modify section 2.10, "Vertex Array Objects" (Added by OES_vertex_array_object)
2615bd8deadSopenharmony_ci
2625bd8deadSopenharmony_ci    Add VERTEX_ATTRIB_ARRAY_DIVISOR_NV to the list of state included in
2635bd8deadSopenharmony_ci    the vertex array object type vector.
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL ES 2.0.25 Specification (State and
2665bd8deadSopenharmony_ciState Requests)
2675bd8deadSopenharmony_ci
2685bd8deadSopenharmony_ci    In section 6.1.8, add VERTEX_ATTRIB_ARRAY_DIVISOR_NV to the list of
2695bd8deadSopenharmony_ci    pnames accepted by GetVertexAttribfv and GetVertexAttribiv:
2705bd8deadSopenharmony_ci
2715bd8deadSopenharmony_ciDependencies on OES_element_index_uint
2725bd8deadSopenharmony_ci
2735bd8deadSopenharmony_ci    If OES_element_index_uint is not supported, removed all references
2745bd8deadSopenharmony_ci    to UNSIGNED_INT indices and the associated GL data type uint in
2755bd8deadSopenharmony_ci    the description of DrawElementsOneInstance.
2765bd8deadSopenharmony_ci
2775bd8deadSopenharmony_ciDependencies on NV_draw_instanced
2785bd8deadSopenharmony_ci
2795bd8deadSopenharmony_ci    If NV_draw_instanced is not supported, all references to
2805bd8deadSopenharmony_ci    instanceID should be removed from section 2.8. This extension
2815bd8deadSopenharmony_ci    will introduce the following additional New Procedures and
2825bd8deadSopenharmony_ci    Functions:
2835bd8deadSopenharmony_ci
2845bd8deadSopenharmony_ci        void DrawArraysInstancedNV(enum mode, int first, sizei count,
2855bd8deadSopenharmony_ci                sizei primcount);
2865bd8deadSopenharmony_ci        void DrawElementsInstancedNV(enum mode, sizei count, enum type,
2875bd8deadSopenharmony_ci                const void *indices, sizei primcount);
2885bd8deadSopenharmony_ci
2895bd8deadSopenharmony_ciDependencies on OES_vertex_array_object
2905bd8deadSopenharmony_ci
2915bd8deadSopenharmony_ci    If OES_vertex_array_object is not supported, ignore all edits to
2925bd8deadSopenharmony_ci    section 2.10, "Vertex Array Objects".
2935bd8deadSopenharmony_ci
2945bd8deadSopenharmony_ciErrors
2955bd8deadSopenharmony_ci
2965bd8deadSopenharmony_ci    INVALID_VALUE is generated by VertexAttribDivisorNV if <index>
2975bd8deadSopenharmony_ci    is greater than or equal to MAX_VERTEX_ATTRIBS.
2985bd8deadSopenharmony_ci
2995bd8deadSopenharmony_ci    INVALID_ENUM is generated by DrawElementsInstancedNV if <type> is
3005bd8deadSopenharmony_ci    not one of UNSIGNED_BYTE, UNSIGNED_SHORT or UNSIGNED_INT.
3015bd8deadSopenharmony_ci
3025bd8deadSopenharmony_ci    INVALID_VALUE is generated by DrawArraysInstancedNV if <first>,
3035bd8deadSopenharmony_ci    <count>, or <primcount> is less than zero.
3045bd8deadSopenharmony_ci
3055bd8deadSopenharmony_ci    INVALID_ENUM is generated by DrawArraysInstancedNV or
3065bd8deadSopenharmony_ci    DrawElementsInstancedNV if <mode> is not one of the modes described in
3075bd8deadSopenharmony_ci    section 2.6.1.
3085bd8deadSopenharmony_ci
3095bd8deadSopenharmony_ci    INVALID_VALUE is generated by DrawElementsInstancedNV if <count> or
3105bd8deadSopenharmony_ci    <primcount> is less than zero.
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ciNew State
3135bd8deadSopenharmony_ci
3145bd8deadSopenharmony_ci    Changes to table 6.2 (Vertex Array Data)
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci                                                               Initial
3175bd8deadSopenharmony_ci    Get Value                       Type     Get Command       Value    Description       Sec.  Attribute
3185bd8deadSopenharmony_ci    ---------                       ----    ---------------    -------  -----------       ----  ---------
3195bd8deadSopenharmony_ci    VERTEX_ATTRIB_ARRAY_DIVISOR_NV  8xZ+    GetVertexAttrib    0        Instance Divisor  2.8   vertex-array
3205bd8deadSopenharmony_ci
3215bd8deadSopenharmony_ciIssues
3225bd8deadSopenharmony_ci
3235bd8deadSopenharmony_ci
3245bd8deadSopenharmony_ci    1) Should generic attrib zero be instance-able?
3255bd8deadSopenharmony_ci
3265bd8deadSopenharmony_ci        Resolved: Yes. Attribute zero does not necessarily contain
3275bd8deadSopenharmony_ci        position information.
3285bd8deadSopenharmony_ci
3295bd8deadSopenharmony_ci    2) This extension must elaborate on the definition of functions
3305bd8deadSopenharmony_ci       added by NV_draw_instanced.  How do we do this in a manner such
3315bd8deadSopenharmony_ci       that both extensions may coexist?
3325bd8deadSopenharmony_ci
3335bd8deadSopenharmony_ci        Resolved: This extension is specified so that it applies on
3345bd8deadSopenharmony_ci        top of NV_draw_instanced.  As a result, some portions modified
3355bd8deadSopenharmony_ci        by that extension are replaced in this extension.  In the
3365bd8deadSopenharmony_ci        event that NV_draw_instanced is not supported, this extension
3375bd8deadSopenharmony_ci        reintroduces the draw calls from NV_draw_instanced.
3385bd8deadSopenharmony_ci
3395bd8deadSopenharmony_ci    3) Should current generic attributes be affected by the execution of
3405bd8deadSopenharmony_ci       DrawArraysOneInstance?
3415bd8deadSopenharmony_ci
3425bd8deadSopenharmony_ci       Resolved: No. ANGLE says no. ARB says maybe. Defined behavior is
3435bd8deadSopenharmony_ci       always better. The wishy washy ARB language is likely to permit
3445bd8deadSopenharmony_ci       a software implementation without excessive state resetting. This
3455bd8deadSopenharmony_ci       Is not terribly useful if implemented in software.
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci
3485bd8deadSopenharmony_ci    4) Can all vertex attributes be instanced simultaneously?
3495bd8deadSopenharmony_ci
3505bd8deadSopenharmony_ci       Resolved: No. In rare cases it is possible for no attribute to
3515bd8deadSopenharmony_ci       have a divisor of 0, meaning that all attributes are instanced
3525bd8deadSopenharmony_ci       and none of them are regularly indexed. This in turn means each
3535bd8deadSopenharmony_ci       instance can only have a single position element, and so it only
3545bd8deadSopenharmony_ci       actually renders something when rendering point primitives. This
3555bd8deadSopenharmony_ci       is not a very meaningful way of using instancing (which is likely
3565bd8deadSopenharmony_ci       why D3D restricts stream 0 to be indexed regularly for position
3575bd8deadSopenharmony_ci       data in the first place).
3585bd8deadSopenharmony_ci
3595bd8deadSopenharmony_ciRevision History
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ci    Rev.    Date        Author      Changes
3625bd8deadSopenharmony_ci    ----  ------------- ---------   ----------------------------------------
3635bd8deadSopenharmony_ci     4    28 Aug 2012    groth      Various spelling corrections and minor clarifications
3645bd8deadSopenharmony_ci     3    20 Aug 2012    groth      Add interaction with VAOs
3655bd8deadSopenharmony_ci     2    19 Aug 2012    groth      Correct section number
3665bd8deadSopenharmony_ci     1    12 Aug 2012    groth      Initial GLES2 version from ARB_instanced_arrays
3675bd8deadSopenharmony_ci                                    with inspiration from ANGLE_instanced_arrays
368