15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    OES_draw_elements_base_vertex
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_OES_draw_elements_base_vertex
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Daniel Koch, NVIDIA (dkoch 'at' nvidia.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciContributors
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Shannon Woods, Google
165bd8deadSopenharmony_ci    Dominik Witczak, Mobica
175bd8deadSopenharmony_ci    Contributors to ARB_draw_elements_base_vertex
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciNotice
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Copyright (c) 2009-2014 The Khronos Group Inc. Copyright terms at
225bd8deadSopenharmony_ci        http://www.khronos.org/registry/speccopyright.html
235bd8deadSopenharmony_ci
245bd8deadSopenharmony_ciSpecification Update Policy
255bd8deadSopenharmony_ci
265bd8deadSopenharmony_ci    Khronos-approved extension specifications are updated in response to
275bd8deadSopenharmony_ci    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
285bd8deadSopenharmony_ci    extensions which have been promoted to a core Specification, fixes will
295bd8deadSopenharmony_ci    first appear in the latest version of that core Specification, and will
305bd8deadSopenharmony_ci    eventually be backported to the extension document. This policy is
315bd8deadSopenharmony_ci    described in more detail at
325bd8deadSopenharmony_ci        https://www.khronos.org/registry/OpenGL/docs/update_policy.php
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    Portions Copyright (c) 2014 NVIDIA Corporation.
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ciStatus
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    Approved by the OpenGL ES Working Group on October 8, 2014
395bd8deadSopenharmony_ci    Ratified by the Khronos Board of Promoters on November 21, 2014
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ciVersion
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci    Last Modified Date:  September 30, 2014
445bd8deadSopenharmony_ci    Version:             2
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ciNumber
475bd8deadSopenharmony_ci
485bd8deadSopenharmony_ci    OpenGL ES Extension #219
495bd8deadSopenharmony_ci
505bd8deadSopenharmony_ciDependencies
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ci    This specification is written against the OpenGL ES 3.1 (June 4, 2014)
535bd8deadSopenharmony_ci    Specifications, but can apply to prior specifications.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ci    Requires OpenGL ES 2.0.
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    This extension interacts with OpenGL ES 3.1.
585bd8deadSopenharmony_ci
595bd8deadSopenharmony_ci    This extension interacts with OpenGL ES 3.0.
605bd8deadSopenharmony_ci
615bd8deadSopenharmony_ci    This extension interacts with EXT_draw_instanced.
625bd8deadSopenharmony_ci
635bd8deadSopenharmony_ci    This extension interacts with NV_draw_instanced.
645bd8deadSopenharmony_ci
655bd8deadSopenharmony_ci    This extension interacts with EXT_instanced_arrays.
665bd8deadSopenharmony_ci
675bd8deadSopenharmony_ci    This extension interacts with ANGLE_instanced_arrays.
685bd8deadSopenharmony_ci
695bd8deadSopenharmony_ci    This extension interacts with NV_instanced_arrays.
705bd8deadSopenharmony_ci
715bd8deadSopenharmony_ci    This extension interacts with EXT_multi_draw_arrays.
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ciOverview
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    This extension provides a method to specify a "base vertex offset"
765bd8deadSopenharmony_ci    value which is effectively added to every vertex index that is
775bd8deadSopenharmony_ci    transferred through DrawElements.
785bd8deadSopenharmony_ci
795bd8deadSopenharmony_ci    This mechanism can be used to decouple a set of indices from the
805bd8deadSopenharmony_ci    actual vertex array that it is referencing. This is useful if an
815bd8deadSopenharmony_ci    application stores multiple indexed models in a single vertex array.
825bd8deadSopenharmony_ci    The same index array can be used to draw the model no matter where
835bd8deadSopenharmony_ci    it ends up in a larger vertex array simply by changing the base
845bd8deadSopenharmony_ci    vertex value. Without this functionality, it would be necessary to
855bd8deadSopenharmony_ci    rebind all the vertex attributes every time geometry is switched and
865bd8deadSopenharmony_ci    this can have larger performance penalty.
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ci    For example consider the (very contrived and simple) example of
895bd8deadSopenharmony_ci    drawing two triangles to form a quad. In the typical example you
905bd8deadSopenharmony_ci    have the following setup:
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci          vertices                indices
935bd8deadSopenharmony_ci         ----------                -----
945bd8deadSopenharmony_ci      0 | (-1,  1) |            0 |  0  |
955bd8deadSopenharmony_ci      1 | (-1, -1) |            1 |  1  |
965bd8deadSopenharmony_ci      2 | ( 1, -1) |            2 |  2  |
975bd8deadSopenharmony_ci      3 | ( 1,  1) |            3 |  3  |
985bd8deadSopenharmony_ci         ----------             4 |  0  |
995bd8deadSopenharmony_ci                                5 |  2  |
1005bd8deadSopenharmony_ci                                   -----
1015bd8deadSopenharmony_ci    which is normally rendered with the call
1025bd8deadSopenharmony_ci
1035bd8deadSopenharmony_ci       DrawElements(TRIANGLES, 6, UNSIGNED_BYTE, &indices).
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ci    Now consider the case where the vertices you want to draw are not at
1065bd8deadSopenharmony_ci    the start of a vertex array but are instead located at offset 100
1075bd8deadSopenharmony_ci    into a larger array:
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ci           vertices2             indices2
1105bd8deadSopenharmony_ci           ----------             -----
1115bd8deadSopenharmony_ci              ....             0 | 100 |
1125bd8deadSopenharmony_ci      100 | (-1,  1) |         1 | 101 |
1135bd8deadSopenharmony_ci      101 | (-1, -1) |         2 | 102 |
1145bd8deadSopenharmony_ci      102 | ( 1, -1) |         3 | 103 |
1155bd8deadSopenharmony_ci      103 | ( 1,  1) |         4 | 100 |
1165bd8deadSopenharmony_ci              ....             5 | 102 |
1175bd8deadSopenharmony_ci           ----------             -----
1185bd8deadSopenharmony_ci
1195bd8deadSopenharmony_ci    The typical choices for rendering this are to rebind your vertex
1205bd8deadSopenharmony_ci    attributes with an additional offset of 100*stride, or to create an
1215bd8deadSopenharmony_ci    new array of indices (as indices2 in the example). However both
1225bd8deadSopenharmony_ci    rebinding vertex attributes and rebuilding index arrays can be quite
1235bd8deadSopenharmony_ci    costly activities.
1245bd8deadSopenharmony_ci
1255bd8deadSopenharmony_ci    With the new drawing commands introduced by this extension you can
1265bd8deadSopenharmony_ci    instead draw using vertices2 and the new draw call:
1275bd8deadSopenharmony_ci
1285bd8deadSopenharmony_ci       DrawElementsBaseVertexOES(TRIANGLES, 6, UNSIGNED_BYTE, &indices, 100)
1295bd8deadSopenharmony_ci
1305bd8deadSopenharmony_ciNew Procedures and Functions
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci    void DrawElementsBaseVertexOES(enum mode, sizei count, enum type,
1335bd8deadSopenharmony_ci                                   const void *indices, int basevertex);
1345bd8deadSopenharmony_ci
1355bd8deadSopenharmony_ci    [[ If OpenGL ES 3.0 is supported: ]]
1365bd8deadSopenharmony_ci
1375bd8deadSopenharmony_ci    void DrawRangeElementsBaseVertexOES(enum mode, uint start, uint end,
1385bd8deadSopenharmony_ci                                        sizei count, enum type,
1395bd8deadSopenharmony_ci                                        const void *indices, int basevertex);
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci    void DrawElementsInstancedBaseVertexOES(enum mode, sizei count,
1425bd8deadSopenharmony_ci                                            enum type, const void *indices,
1435bd8deadSopenharmony_ci                                            sizei instancecount,
1445bd8deadSopenharmony_ci                                            int basevertex);
1455bd8deadSopenharmony_ci
1465bd8deadSopenharmony_ci    [[ If EXT_multi_draw_arrays is supported: ]]
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ci    void MultiDrawElementsBaseVertexEXT(enum mode,
1495bd8deadSopenharmony_ci                                        const sizei *count,
1505bd8deadSopenharmony_ci                                        enum type,
1515bd8deadSopenharmony_ci                                        const void * const *indices,
1525bd8deadSopenharmony_ci                                        sizei primcount,
1535bd8deadSopenharmony_ci                                        const int *basevertex);
1545bd8deadSopenharmony_ci
1555bd8deadSopenharmony_ciNew Tokens
1565bd8deadSopenharmony_ci
1575bd8deadSopenharmony_ci    None
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ciAdditions to Chapter 10 of the OpenGL ES 3.1 Specification (Vertex
1605bd8deadSopenharmony_ciSpecification and Drawing Commands)
1615bd8deadSopenharmony_ci
1625bd8deadSopenharmony_ci    Modify section 10.3.7 "Array Indices in Buffer Objects" p. 244,
1635bd8deadSopenharmony_ci    adding the following to the end of the third paragraph (beginning
1645bd8deadSopenharmony_ci    with "While a non-zero buffer object name..."
1655bd8deadSopenharmony_ci
1665bd8deadSopenharmony_ci    "DrawElementsBaseVertexOES, DrawRangeElementsBaseVertexOES, and
1675bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexOES also source their indices from that
1685bd8deadSopenharmony_ci    buffer object, adding the <basevertex> offset to the appropriate vertex
1695bd8deadSopenharmony_ci    index as a final step before indexing into the vertex buffer; this does
1705bd8deadSopenharmony_ci    not affect the calculation of the base pointer for the index array."
1715bd8deadSopenharmony_ci
1725bd8deadSopenharmony_ci    [[ If EXT_multi_draw_arrays is supported: ]]
1735bd8deadSopenharmony_ci
1745bd8deadSopenharmony_ci    "Finally, MultiDrawElementsEXT and MultiDrawElementsBaseVertexEXT also
1755bd8deadSopenharmony_ci    source their indices from that buffer object, using its <indices>
1765bd8deadSopenharmony_ci    parameter as a pointer to an array of pointers that represent
1775bd8deadSopenharmony_ci    offsets into the buffer object."
1785bd8deadSopenharmony_ci
1795bd8deadSopenharmony_ci
1805bd8deadSopenharmony_ci    Modify section 10.5 "Drawing Commands Using Vertex Arrays" as follows:
1815bd8deadSopenharmony_ci
1825bd8deadSopenharmony_ci    Replace the definition and paragraph describing
1835bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertex, bottom of p. 252 with the following:
1845bd8deadSopenharmony_ci
1855bd8deadSopenharmony_ci    "The commands
1865bd8deadSopenharmony_ci      void DrawElementsBaseVertexOES(enum mode, sizei count, enum type,
1875bd8deadSopenharmony_ci                                    const void *indices, int basevertex);
1885bd8deadSopenharmony_ci
1895bd8deadSopenharmony_ci      void DrawRangeElementsBaseVertexOES(enum mode, uint start, uint end,
1905bd8deadSopenharmony_ci                                          sizei count, enum type,
1915bd8deadSopenharmony_ci                                          const void *indices, int basevertex);
1925bd8deadSopenharmony_ci
1935bd8deadSopenharmony_ci      void DrawElementsInstancedBaseVertexOES(enum mode, sizei count,
1945bd8deadSopenharmony_ci                                              enum type, const void *indices,
1955bd8deadSopenharmony_ci                                              sizei instancecount,
1965bd8deadSopenharmony_ci                                              int basevertex);
1975bd8deadSopenharmony_ci
1985bd8deadSopenharmony_ci    are equivalent to the commands with the same base name (without the
1995bd8deadSopenharmony_ci    "BaseVertexOES" suffix) except that the <i>th element transferred by
2005bd8deadSopenharmony_ci    the corresponding draw call will be taken from element
2015bd8deadSopenharmony_ci       <indices>[<i>] + <basevertex>
2025bd8deadSopenharmony_ci    of each enabled array. If the resulting value is larger than the maximum
2035bd8deadSopenharmony_ci    value representable by <type> it should behave as if the calculation were
2045bd8deadSopenharmony_ci    upconverted to 32-bit unsigned integers (with wrapping on overflow
2055bd8deadSopenharmony_ci    conditions). The operation is undefined if the sum would be negative and
2065bd8deadSopenharmony_ci    should be handled as described in Section 6.4. For
2075bd8deadSopenharmony_ci    DrawRangeElementsBaseVertexOES, the index values must lie between <start>
2085bd8deadSopenharmony_ci    and <end> inclusive, prior to adding the <basevertex> offset. Index values
2095bd8deadSopenharmony_ci    lying outside the range [<start>,<end>] are treated in the same way as
2105bd8deadSopenharmony_ci    DrawRangeElements."
2115bd8deadSopenharmony_ci
2125bd8deadSopenharmony_ci    [[ If EXT_multi_draw_arrays is supported: ]]
2135bd8deadSopenharmony_ci
2145bd8deadSopenharmony_ci    "The command
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ci      void MultiDrawElementsBaseVertexEXT(enum mode,
2175bd8deadSopenharmony_ci                                          const sizei *count,
2185bd8deadSopenharmony_ci                                          enum type,
2195bd8deadSopenharmony_ci                                          const void *const *indices,
2205bd8deadSopenharmony_ci                                          sizei drawcount,
2215bd8deadSopenharmony_ci                                          const int *basevertex);
2225bd8deadSopenharmony_ci
2235bd8deadSopenharmony_ci    behaves identically to DrawElementsBaseVertexOES except that
2245bd8deadSopenharmony_ci    <drawcount> separate lists of elements are specified instead. It has
2255bd8deadSopenharmony_ci    the same effect as:
2265bd8deadSopenharmony_ci
2275bd8deadSopenharmony_ci      if (<mode> or <drawcount> is invalid)
2285bd8deadSopenharmony_ci          generate appropriate error
2295bd8deadSopenharmony_ci      else {
2305bd8deadSopenharmony_ci          for (i = 0; i < <drawcount>; i++)
2315bd8deadSopenharmony_ci              if (<count>[i] > 0)
2325bd8deadSopenharmony_ci                  DrawElementsBaseVertexOES(<mode>, <count>[i], <type>,
2335bd8deadSopenharmony_ci                                            <indices>[i], <basevertex>[i]);
2345bd8deadSopenharmony_ci      }"
2355bd8deadSopenharmony_ci
2365bd8deadSopenharmony_ciAdditions to the EGL/AGL/GLX/WGL Specifications
2375bd8deadSopenharmony_ci
2385bd8deadSopenharmony_ci    None
2395bd8deadSopenharmony_ci
2405bd8deadSopenharmony_ciDependencies on OpenGL ES 3.1
2415bd8deadSopenharmony_ci
2425bd8deadSopenharmony_ci    If OpenGL ES 3.1 is not supported apply the following modifications to the
2435bd8deadSopenharmony_ci    OpenGL ES 3.0.3 specification:
2445bd8deadSopenharmony_ci
2455bd8deadSopenharmony_ci    Add the following to the end of Section 2.8.1 "Transferring Array Elements"
2465bd8deadSopenharmony_ci
2475bd8deadSopenharmony_ci    "When one of the *BaseVertex drawing commands specified in section
2485bd8deadSopenharmony_ci    2.8.3 is used, the primitive restart comparison occurs before the
2495bd8deadSopenharmony_ci    <basevertex> offset is added to the array index."
2505bd8deadSopenharmony_ci
2515bd8deadSopenharmony_ci    Replace the following references relative to the ES 3.1 specification
2525bd8deadSopenharmony_ci    with the following references to the ES 3.0.3 specification:
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    Edits to section 10.3.7 "Array Indices in Buffer Objects" in ES 3.1 become
2555bd8deadSopenharmony_ci    edits to section 2.9.7 "Array Indices in Buffer Objects" in ES 3.0.3.
2565bd8deadSopenharmony_ci
2575bd8deadSopenharmony_ci    Edits to section 10.5 "Draw Command using Vertex Arrays" in ES 3.1 become
2585bd8deadSopenharmony_ci    edits to section 2.8.3 "Drawing Commands" in ES 3.0.3.
2595bd8deadSopenharmony_ci
2605bd8deadSopenharmony_ci    Replace references to section 6.4 in ES 3.1 with references to section
2615bd8deadSopenharmony_ci    2.9.4 in ES 3.0.3.
2625bd8deadSopenharmony_ci
2635bd8deadSopenharmony_ciDependencies on OpenGL ES 3.0
2645bd8deadSopenharmony_ci
2655bd8deadSopenharmony_ci    If OpenGL ES 3.0 is not supported, ignore all references to
2665bd8deadSopenharmony_ci    DrawElementsInstanced and DrawElementsInstancedBaseVertexOES (unless one
2675bd8deadSopenharmony_ci    of the instanced_array or draw_instanced extensions is present).
2685bd8deadSopenharmony_ci
2695bd8deadSopenharmony_ci    If OpenGL ES 3.0 is not supported, ignore all references to
2705bd8deadSopenharmony_ci    DrawRangeElements and DrawRangeElementsBaseVertexOES.
2715bd8deadSopenharmony_ci
2725bd8deadSopenharmony_ci    If OpenGL ES 3.0 is not supported, ignore all references to primitive
2735bd8deadSopenharmony_ci    restart index.
2745bd8deadSopenharmony_ci
2755bd8deadSopenharmony_ciDependencies on the EXT_draw_instanced extension
2765bd8deadSopenharmony_ci
2775bd8deadSopenharmony_ci    If EXT_draw_instanced is supported, the functionality provided by
2785bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexOES can also be described in terms of
2795bd8deadSopenharmony_ci    DrawElementsInstancedEXT instead of DrawElementsInstanced.
2805bd8deadSopenharmony_ci
2815bd8deadSopenharmony_ciDependencies on the NV_draw_instanced extension
2825bd8deadSopenharmony_ci
2835bd8deadSopenharmony_ci    If NV_draw_instanced is supported, the functionality provided by
2845bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexOES can also be described in terms of
2855bd8deadSopenharmony_ci    DrawElementsInstancedNV instead of DrawElementsInstanced.
2865bd8deadSopenharmony_ci
2875bd8deadSopenharmony_ciDependencies on the EXT_instanced_arrays extension
2885bd8deadSopenharmony_ci
2895bd8deadSopenharmony_ci    If EXT_instanced_arrays is supported, the functionality provided by
2905bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexOES can also be described in
2915bd8deadSopenharmony_ci    terms of DrawElementsInstancedEXT instead of DrawElementsInstanced.
2925bd8deadSopenharmony_ci
2935bd8deadSopenharmony_ciDependencies on the ANGLE_instanced_arrays extension
2945bd8deadSopenharmony_ci
2955bd8deadSopenharmony_ci    If ANGLE_instanced_arrays is supported, the functionality provided by
2965bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexOES can also be described in
2975bd8deadSopenharmony_ci    terms of DrawElementsInstancedANGLE instead of DrawElementsInstanced.
2985bd8deadSopenharmony_ci
2995bd8deadSopenharmony_ciDependencies on the NV_instanced_arrays extension
3005bd8deadSopenharmony_ci
3015bd8deadSopenharmony_ci    If ARB_instanced_arrays is supported, the functionality provided by
3025bd8deadSopenharmony_ci    DrawElementsInstancedBaseVertexOES can also be described in
3035bd8deadSopenharmony_ci    terms of DrawElementsInstancedNV instead of DrawElementsInstanced.
3045bd8deadSopenharmony_ci
3055bd8deadSopenharmony_ciErrors
3065bd8deadSopenharmony_ci
3075bd8deadSopenharmony_ci    The *BaseVertexOES commands have identical error conditions to the
3085bd8deadSopenharmony_ci    non-*BaseVertexOES functions, and all values of <basevertex> are legal
3095bd8deadSopenharmony_ci    (with the exception of ones which cause accesses outside of vertex
3105bd8deadSopenharmony_ci    arrays or bound buffers as described in Section 6.4).
3115bd8deadSopenharmony_ci
3125bd8deadSopenharmony_ciNew State
3135bd8deadSopenharmony_ci
3145bd8deadSopenharmony_ci    None
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ciNew Implementation Dependent State
3175bd8deadSopenharmony_ci
3185bd8deadSopenharmony_ci    None
3195bd8deadSopenharmony_ci
3205bd8deadSopenharmony_ciIssues
3215bd8deadSopenharmony_ci
3225bd8deadSopenharmony_ci    Note: These issues apply specifically to the definition of the
3235bd8deadSopenharmony_ci    OES_draw_elements_base_vertex specification, which is based on the OpenGL
3245bd8deadSopenharmony_ci    extension ARB_draw_elements_base_vertex as updated in OpenGL 4.4.
3255bd8deadSopenharmony_ci    ARB_draw_elements_base_vertex can be found in the OpenGL Registry.
3265bd8deadSopenharmony_ci
3275bd8deadSopenharmony_ci    (0) This extension is based on ARB_draw_elements_base_vertex.  What are
3285bd8deadSopenharmony_ci    the major differences?
3295bd8deadSopenharmony_ci
3305bd8deadSopenharmony_ci        - rebased on OpenGL ES 3.1
3315bd8deadSopenharmony_ci        - renamed the "primcount" parameter to "instancecount" per GL4
3325bd8deadSopenharmony_ci        - MultiDrawElementsBaseVertexEXT is only available if
3335bd8deadSopenharmony_ci          GL_EXT_multi_draw_arrays is supported.
3345bd8deadSopenharmony_ci
3355bd8deadSopenharmony_ci    (1) Should we include MultiDrawElementsBaseVertexEXT in this extension?
3365bd8deadSopenharmony_ci
3375bd8deadSopenharmony_ci    RESOLVED: Yes, but only if EXT_multi_draw_arrays is supported, since
3385bd8deadSopenharmony_ci    multi draw calls are not available in unextended OpenGL ES 2 or 3.
3395bd8deadSopenharmony_ci
3405bd8deadSopenharmony_ci    (2) Should we allow client memory to be used for vertex attributes and
3415bd8deadSopenharmony_ci    for the <indices> in the *BaseVertexOES commands?
3425bd8deadSopenharmony_ci
3435bd8deadSopenharmony_ci    RESOLVED: Yes. Since these are defined in terms of the non-BaseVertex
3445bd8deadSopenharmony_ci    commands which already supports client memory for vertex attributes and
3455bd8deadSopenharmony_ci    indices it makes sense to include support for these new commands as well.
3465bd8deadSopenharmony_ci
3475bd8deadSopenharmony_ci    (3) Which commands are supported on OpenGL ES 2.0 implementations that
3485bd8deadSopenharmony_ci    support this extension?
3495bd8deadSopenharmony_ci
3505bd8deadSopenharmony_ci    RESOLVED: Only DrawElementsBaseVertexOES, unless one of the instancing
3515bd8deadSopenharmony_ci    extensions is supported in which case DrawElementsInstancedBaseVertexOES
3525bd8deadSopenharmony_ci    is also supported. DrawRangeElementsBaseVertexOES is not supported because
3535bd8deadSopenharmony_ci    OpenGL ES 2.0 doesn't include DrawRangeElements.
3545bd8deadSopenharmony_ci
3555bd8deadSopenharmony_ci    (4) Which commands are supported on OpenGL ES 3.0 implementations?
3565bd8deadSopenharmony_ci
3575bd8deadSopenharmony_ci    RESOLVED: All of the new drawing commands are applicable to OpenGL ES 3.0
3585bd8deadSopenharmony_ci    implementations.
3595bd8deadSopenharmony_ci
3605bd8deadSopenharmony_ci    (5) Does the value of gl_VertexID in the shading language include the
3615bd8deadSopenharmony_ci    the value of the <basevertex> offset?
3625bd8deadSopenharmony_ci
3635bd8deadSopenharmony_ci    RESOLVED: Yes. This is as clarified by Khronos bugs 12202 and 12756
3645bd8deadSopenharmony_ci    and is consistent with the overview of ARB_shader_draw_parameters.
3655bd8deadSopenharmony_ci    Essentially, the value of gl_VertexID should be the index of the
3665bd8deadSopenharmony_ci    vertex that is being passed to the shader.
3675bd8deadSopenharmony_ci     - DrawArrays: first + i
3685bd8deadSopenharmony_ci     - DrawElements: indices[i]
3695bd8deadSopenharmony_ci     - DrawElementsBaseVertex: indices[i] + basevertex
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ciRevision History
3725bd8deadSopenharmony_ci
3735bd8deadSopenharmony_ci    Rev.    Date    Author     Changes
3745bd8deadSopenharmony_ci    ----  -------- ---------  ----------------------------------------
3755bd8deadSopenharmony_ci     2    09/30/14  dkoch     Resolve issues 1, 2 as proposed.
3765bd8deadSopenharmony_ci                              Add Issue 5.
3775bd8deadSopenharmony_ci
3785bd8deadSopenharmony_ci     1    09/24/14  dkoch     Initial OES version based on EXT.
3795bd8deadSopenharmony_ci                              No functional changes.
380