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