15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci EXT_base_instance 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_EXT_base_instance 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Daniel Koch, NVIDIA (dkoch 'at' nvidia.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciContributors 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Dominik Witczak, Mobica 165bd8deadSopenharmony_ci Jonas Gustavsson, Sony Mobile 175bd8deadSopenharmony_ci Slawomir Grajewski, Intel 185bd8deadSopenharmony_ci Contributors to ARB_base_instance 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ciNotice 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ci Copyright (c) 2011-2014 The Khronos Group Inc. Copyright terms at 235bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 245bd8deadSopenharmony_ci 255bd8deadSopenharmony_ci Portions Copyright (c) 2014 NVIDIA Corporation. 265bd8deadSopenharmony_ci 275bd8deadSopenharmony_ciStatus 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ci Complete 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ciVersion 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ci Last Modified Date: October 24, 2014 345bd8deadSopenharmony_ci Author Revision: 4 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ciNumber 375bd8deadSopenharmony_ci 385bd8deadSopenharmony_ci OpenGL ES Extension #203 395bd8deadSopenharmony_ci 405bd8deadSopenharmony_ciDependencies 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci This specification is written against the OpenGL ES 3.1 (June 4, 2014) 435bd8deadSopenharmony_ci Specification, although it can apply to previous versions. 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci OpenGL ES 3.0 is required. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci EXT_draw_elements_base_vertex is required. 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ci This extension interacts with EXT_multi_draw_indirect. 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ciOverview 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci This extension allows the offset within buffer objects used for instanced 545bd8deadSopenharmony_ci rendering to be specified. This is congruent with the <first> parameter 555bd8deadSopenharmony_ci in glDrawArrays and the <basevertex> parameter in glDrawElements. When 565bd8deadSopenharmony_ci instanced rendering is performed (for example, through 575bd8deadSopenharmony_ci glDrawArraysInstanced), instanced vertex attributes whose vertex attribute 585bd8deadSopenharmony_ci divisors are non-zero are fetched from enabled vertex arrays per-instance 595bd8deadSopenharmony_ci rather than per-vertex. However, in unextended OpenGL ES, there is no way 605bd8deadSopenharmony_ci to define the offset into those arrays from which the attributes are 615bd8deadSopenharmony_ci fetched. This extension adds that offset in the form of a <baseinstance> 625bd8deadSopenharmony_ci parameter to several new procedures. 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci The <baseinstance> parameter is added to the index of the array element, 655bd8deadSopenharmony_ci after division by the vertex attribute divisor. This allows several sets of 665bd8deadSopenharmony_ci instanced vertex attribute data to be stored in a single vertex array, and 675bd8deadSopenharmony_ci the base offset of that data to be specified for each draw. Further, this 685bd8deadSopenharmony_ci extension exposes the <baseinstance> parameter as the final and previously 695bd8deadSopenharmony_ci undefined structure member of the draw-indirect data structure. 705bd8deadSopenharmony_ci 715bd8deadSopenharmony_ciIP Status 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ci None. 745bd8deadSopenharmony_ci 755bd8deadSopenharmony_ciNew Procedures and Functions 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ci void DrawArraysInstancedBaseInstanceEXT(enum mode, 785bd8deadSopenharmony_ci int first, 795bd8deadSopenharmony_ci sizei count, 805bd8deadSopenharmony_ci sizei instancecount, 815bd8deadSopenharmony_ci uint baseinstance); 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ci void DrawElementsInstancedBaseInstanceEXT(enum mode, 845bd8deadSopenharmony_ci sizei count, 855bd8deadSopenharmony_ci enum type, 865bd8deadSopenharmony_ci const void *indices, 875bd8deadSopenharmony_ci sizei instancecount, 885bd8deadSopenharmony_ci uint baseinstance); 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci void DrawElementsInstancedBaseVertexBaseInstanceEXT(enum mode, 915bd8deadSopenharmony_ci sizei count, 925bd8deadSopenharmony_ci enum type, 935bd8deadSopenharmony_ci const void *indices, 945bd8deadSopenharmony_ci sizei instancecount, 955bd8deadSopenharmony_ci int basevertex, 965bd8deadSopenharmony_ci uint baseinstance); 975bd8deadSopenharmony_ci 985bd8deadSopenharmony_ciNew Tokens 995bd8deadSopenharmony_ci 1005bd8deadSopenharmony_ci None. 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ciModifications to Chapter 10 of the OpenGL ES 3.1 Specification (Vertex 1035bd8deadSopenharmony_ciSpecification and Drawing Commands) 1045bd8deadSopenharmony_ci 1055bd8deadSopenharmony_ci Modification to Section 10.5, "Drawing Commands using Vertex Arrays" 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci (Modify the definition of DrawArraysOneInstance, to define the 1085bd8deadSopenharmony_ci behaviour of the <baseinstance> parameter. Modify the 3rd paragraph 1095bd8deadSopenharmony_ci of the definition of the command, p.247, as follows) 1105bd8deadSopenharmony_ci 1115bd8deadSopenharmony_ci "If an enabled vertex attribute array is instanced (it has a non-zero 1125bd8deadSopenharmony_ci <divisor> as specified by VertexAttribDivisor), the element index that 1135bd8deadSopenharmony_ci is transferred to the GL, for all vertices, is given by 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ci floor(<instance> / <divisor>) + <baseinstance>" 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci 1185bd8deadSopenharmony_ci (Replace the description of DrawArraysInstanced, p.248, with the 1195bd8deadSopenharmony_ci following) 1205bd8deadSopenharmony_ci 1215bd8deadSopenharmony_ci "The command 1225bd8deadSopenharmony_ci 1235bd8deadSopenharmony_ci void DrawArraysInstancedBaseInstanceEXT(enum mode, 1245bd8deadSopenharmony_ci int first, 1255bd8deadSopenharmony_ci sizei count, 1265bd8deadSopenharmony_ci sizei instancecount, 1275bd8deadSopenharmony_ci uint baseinstance); 1285bd8deadSopenharmony_ci 1295bd8deadSopenharmony_ci behaves identically to DrawArrays, except that <instancecount> instances of 1305bd8deadSopenharmony_ci the range of elements are executed and the value of <instance> advances for 1315bd8deadSopenharmony_ci each iteration. Those attributes that have non-zero values for <divisor>, 1325bd8deadSopenharmony_ci as specified by VertexAttribDivisor, advance once every <divisor> 1335bd8deadSopenharmony_ci instances. Additionally, the first element within those instanced vertex 1345bd8deadSopenharmony_ci attributes is specified in <baseinstance>. 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci DrawArraysInstancedBaseInstanceEXT is equivalent to 1375bd8deadSopenharmony_ci 1385bd8deadSopenharmony_ci if (<mode>, <count>, or <instancecount> is invalid) 1395bd8deadSopenharmony_ci generate appropriate error 1405bd8deadSopenharmony_ci else { 1415bd8deadSopenharmony_ci for (i = 0; i < <instancecount>; i++) { 1425bd8deadSopenharmony_ci DrawArraysOneInstance(<mode>, <first>, <count>, i, 1435bd8deadSopenharmony_ci <baseinstance>); 1445bd8deadSopenharmony_ci } 1455bd8deadSopenharmony_ci } 1465bd8deadSopenharmony_ci 1475bd8deadSopenharmony_ci The command 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci void DrawArraysInstanced(enum mode, 1505bd8deadSopenharmony_ci int first, 1515bd8deadSopenharmony_ci sizei count, 1525bd8deadSopenharmony_ci sizei primcount); 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci is equivalent to 1555bd8deadSopenharmony_ci 1565bd8deadSopenharmony_ci DrawArraysInstancedBaseInstanceEXT(<mode>, <first>, <count>, 1575bd8deadSopenharmony_ci <instancecount>, 0);" 1585bd8deadSopenharmony_ci 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ci 1615bd8deadSopenharmony_ci (Update the definition of DrawArraysIndirect on p.248 as follows) 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci "The command 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci void DrawArraysIndirect(enum mode, const void *indirect); 1665bd8deadSopenharmony_ci 1675bd8deadSopenharmony_ci is equivalent to 1685bd8deadSopenharmony_ci 1695bd8deadSopenharmony_ci typedef struct { 1705bd8deadSopenharmony_ci uint count; 1715bd8deadSopenharmony_ci uint instanceCount; 1725bd8deadSopenharmony_ci uint first; 1735bd8deadSopenharmony_ci uint baseInstance; 1745bd8deadSopenharmony_ci } DrawArraysIndirectCommand; 1755bd8deadSopenharmony_ci 1765bd8deadSopenharmony_ci DrawArraysIndirectCommand *cmd = 1775bd8deadSopenharmony_ci (DrawArraysIndirectCommand *)indirect; 1785bd8deadSopenharmony_ci 1795bd8deadSopenharmony_ci DrawArraysInstancedBaseInstanceEXT(mode, 1805bd8deadSopenharmony_ci cmd->first, 1815bd8deadSopenharmony_ci cmd->count, 1825bd8deadSopenharmony_ci cmd->instanceCount, 1835bd8deadSopenharmony_ci cmd->baseInstance);" 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ci (Retain the remainder the description of DrawArraysIndirect, but 1865bd8deadSopenharmony_ci delete the sentence "Results are undefined if <reservedMustBeZero> is 1875bd8deadSopenharmony_ci non-zero, but may not result in program termination." from the Errors 1885bd8deadSopenharmony_ci section.) 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ci 1915bd8deadSopenharmony_ci (Modify the definition of DrawElementsOneInstance, to define the 1925bd8deadSopenharmony_ci behaviour of the <baseinstance> parameter. Modify the 3rd paragraph 1935bd8deadSopenharmony_ci of the definition of the command, p.249, as follows) 1945bd8deadSopenharmony_ci 1955bd8deadSopenharmony_ci "If an enabled vertex attribute array is instanced (it has a non-zero 1965bd8deadSopenharmony_ci attribute divisor as specified by VertexAttribDivisor), the element that 1975bd8deadSopenharmony_ci is transferred to the GL is given by: 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ci floor(<instance> / <divisor>) + <baseinstance>" 2005bd8deadSopenharmony_ci 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci (Update the text describing DrawElements, p.250, to mention the 2035bd8deadSopenharmony_ci <baseinstance> parameter) 2045bd8deadSopenharmony_ci 2055bd8deadSopenharmony_ci "The command 2065bd8deadSopenharmony_ci 2075bd8deadSopenharmony_ci void DrawElements(enum mode, 2085bd8deadSopenharmony_ci sizei count, 2095bd8deadSopenharmony_ci enum type, 2105bd8deadSopenharmony_ci const void *indices); 2115bd8deadSopenharmony_ci 2125bd8deadSopenharmony_ci behaves identically to DrawElementsOneInstance with the <instance> and 2135bd8deadSopenharmony_ci <baseinstance> parameters set to zero; the effect of calling ..." 2145bd8deadSopenharmony_ci 2155bd8deadSopenharmony_ci 2165bd8deadSopenharmony_ci (Replace the description of DrawElementsInstanced, p.251, with the 2175bd8deadSopenharmony_ci following) 2185bd8deadSopenharmony_ci 2195bd8deadSopenharmony_ci "The command 2205bd8deadSopenharmony_ci 2215bd8deadSopenharmony_ci void DrawElementsInstancedBaseInstanceEXT(enum mode, 2225bd8deadSopenharmony_ci sizei count, 2235bd8deadSopenharmony_ci enum type, 2245bd8deadSopenharmony_ci const void *indices, 2255bd8deadSopenharmony_ci sizei instancecount, 2265bd8deadSopenharmony_ci uint baseinstance); 2275bd8deadSopenharmony_ci 2285bd8deadSopenharmony_ci behaves identically to DrawElements except that <instancecount> instances 2295bd8deadSopenharmony_ci of the set of elements are executed, the value of <instance> advances 2305bd8deadSopenharmony_ci between each set. Instanced attributes are advanced as they do during 2315bd8deadSopenharmony_ci execution of DrawArraysInstancedBaseInstaceEXT, and <baseinstance> has 2325bd8deadSopenharmony_ci the same effect. It is equivalent to: 2335bd8deadSopenharmony_ci 2345bd8deadSopenharmony_ci if (<mode>, <count>, <type> or <instancecount> is invalid) 2355bd8deadSopenharmony_ci generate appropriate error 2365bd8deadSopenharmony_ci else { 2375bd8deadSopenharmony_ci for (int i = 0; i < <instancecount>; i++) { 2385bd8deadSopenharmony_ci DrawElementsOneInstance(<mode>, <count>, <type>, <indices>, 2395bd8deadSopenharmony_ci i, <baseinstance>); 2405bd8deadSopenharmony_ci } 2415bd8deadSopenharmony_ci } 2425bd8deadSopenharmony_ci 2435bd8deadSopenharmony_ci The command 2445bd8deadSopenharmony_ci 2455bd8deadSopenharmony_ci void DrawElementsInstanced(enum mode, sizei count, enum type, 2465bd8deadSopenharmony_ci const void *indices, sizei instancecount); 2475bd8deadSopenharmony_ci 2485bd8deadSopenharmony_ci behaves identically to DrawElementsInstancedBaseInstanceEXT except that 2495bd8deadSopenharmony_ci <baseinstance> is zero. It is equivalent to 2505bd8deadSopenharmony_ci 2515bd8deadSopenharmony_ci DrawElementsInstancedBaseInstanceEXT(<mode>, <count>, <type>, 2525bd8deadSopenharmony_ci <indices>, <instancecount>, 0);" 2535bd8deadSopenharmony_ci 2545bd8deadSopenharmony_ci 2555bd8deadSopenharmony_ci (Add to the list of functions which include DrawElementsBaseVertexEXT, 2565bd8deadSopenharmony_ci DrawRangeElementsBaseVertexEXT, and DrawElementsInstancedBaseVertexEXT 2575bd8deadSopenharmony_ci (as added by EXT_draw_elements_base_vertex)) 2585bd8deadSopenharmony_ci 2595bd8deadSopenharmony_ci void DrawElementsInstancedBaseVertexBaseInstanceEXT(enum mode, 2605bd8deadSopenharmony_ci sizei count, 2615bd8deadSopenharmony_ci enum type, 2625bd8deadSopenharmony_ci const void *indices, 2635bd8deadSopenharmony_ci sizei instancecount, 2645bd8deadSopenharmony_ci int basevertex, 2655bd8deadSopenharmony_ci uint baseinstance); 2665bd8deadSopenharmony_ci 2675bd8deadSopenharmony_ci (Append a new paragraph after the description of DrawElementsBaseVertexEXT, 2685bd8deadSopenharmony_ci DrawRangeElementsBaseVertexEXT, and DrawElementsInstancedBaseVertexEXT 2695bd8deadSopenharmony_ci (as added by EXT_draw_elements_base_vertex)) 2705bd8deadSopenharmony_ci 2715bd8deadSopenharmony_ci "For DrawElementsInstancedBaseVertexBaseInstanceEXT, <baseinstance> is 2725bd8deadSopenharmony_ci used to offset the element from which instanced vertex attributes (those 2735bd8deadSopenharmony_ci with a non-zero divisor as specified by VertexAttribDivisor) are taken." 2745bd8deadSopenharmony_ci 2755bd8deadSopenharmony_ci 2765bd8deadSopenharmony_ci (Update the definition of DrawElementsIndirect on p.252 as follows) 2775bd8deadSopenharmony_ci 2785bd8deadSopenharmony_ci "The command 2795bd8deadSopenharmony_ci 2805bd8deadSopenharmony_ci void DrawElementsIndirect(enum mode, 2815bd8deadSopenharmony_ci enum type, 2825bd8deadSopenharmony_ci const void *indirect ); 2835bd8deadSopenharmony_ci 2845bd8deadSopenharmony_ci is equivalent to: 2855bd8deadSopenharmony_ci 2865bd8deadSopenharmony_ci typedef struct { 2875bd8deadSopenharmony_ci uint count; 2885bd8deadSopenharmony_ci uint instanceCount; 2895bd8deadSopenharmony_ci uint firstIndex; 2905bd8deadSopenharmony_ci int baseVertex; 2915bd8deadSopenharmony_ci uint baseInstance; 2925bd8deadSopenharmony_ci } DrawElementsIndirectCommand; 2935bd8deadSopenharmony_ci 2945bd8deadSopenharmony_ci if (no element array buffer is bound) { 2955bd8deadSopenharmony_ci generate appropriate error 2965bd8deadSopenharmony_ci } else { 2975bd8deadSopenharmony_ci DrawElementsIndirectCommand *cmd = 2985bd8deadSopenharmony_ci (DrawElementsIndirectCommand *)indirect; 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci DrawElementsInstancedBaseVertexBaseInstanceEXT( 3015bd8deadSopenharmony_ci mode, 3025bd8deadSopenharmony_ci cmd->count, 3035bd8deadSopenharmony_ci type, 3045bd8deadSopenharmony_ci cmd->firstIndex * size-of-type, 3055bd8deadSopenharmony_ci cmd->instanceCount, 3065bd8deadSopenharmony_ci cmd->baseVertex, 3075bd8deadSopenharmony_ci cmd->baseInstance); 3085bd8deadSopenharmony_ci }" 3095bd8deadSopenharmony_ci 3105bd8deadSopenharmony_ci (Retain the remainder of the description of DrawElementsIndirect, but 3115bd8deadSopenharmony_ci delete the sentence "Results are undefined if <reservedMustBeZero> is 3125bd8deadSopenharmony_ci non-zero, but may not result in program termination." from the Errors 3135bd8deadSopenharmony_ci section.) 3145bd8deadSopenharmony_ci 3155bd8deadSopenharmony_ciAdditions to the EGL/AGL/GLX/WGL Specifications 3165bd8deadSopenharmony_ci 3175bd8deadSopenharmony_ci None. 3185bd8deadSopenharmony_ci 3195bd8deadSopenharmony_ciDependencies on EXT_multi_draw_indirect. 3205bd8deadSopenharmony_ci 3215bd8deadSopenharmony_ci If EXT_multi_draw_indirect is supported, this extension adds <baseInstance> 3225bd8deadSopenharmony_ci support for the MultiDraw*Indirect commands as well, because they share 3235bd8deadSopenharmony_ci the same command structures. 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ciErrors 3265bd8deadSopenharmony_ci 3275bd8deadSopenharmony_ci The errors for DrawArraysInstancedBaseInstanceEXT are equivalent to the 3285bd8deadSopenharmony_ci errors for DrawArraysInstanced, but are repeated here for clarity: 3295bd8deadSopenharmony_ci 3305bd8deadSopenharmony_ci - An INVALID_ENUM error is generated if <mode> is not one of the primitive 3315bd8deadSopenharmony_ci types defined in section 10.1. 3325bd8deadSopenharmony_ci - Specifying <first> < 0 results in undefined behavior. Generating an 3335bd8deadSopenharmony_ci INVALID_VALUE error is recommended in this case. 3345bd8deadSopenharmony_ci - An INVALID_VALUE error is generated if <count> is negative. 3355bd8deadSopenharmony_ci 3365bd8deadSopenharmony_ci The errors for DrawElementsInstancedBaseInstanceEXT and 3375bd8deadSopenharmony_ci DrawElementsInstancedBaseVertexBaseInstanceEXT are equivalent to the 3385bd8deadSopenharmony_ci errors for DrawElementsInstanced, but are repeated here for clarity: 3395bd8deadSopenharmony_ci 3405bd8deadSopenharmony_ci - An INVALID_ENUM error is generated if <mode> is not one of the primitive 3415bd8deadSopenharmony_ci types defined in section 10.1. 3425bd8deadSopenharmony_ci - An INVALID_ENUM error is generated if <type> is not UNSIGNED_BYTE, 3435bd8deadSopenharmony_ci UNSIGNED_SHORT, or UNSIGNED_INT. 3445bd8deadSopenharmony_ci - Using an index value greater than MAX_ELEMENT_INDEX will result in 3455bd8deadSopenharmony_ci undefined implementation-dependent behavior, unless primitive restart is 3465bd8deadSopenharmony_ci enabled (see section 10.3.4) and the index value is 2^32 − 1. 3475bd8deadSopenharmony_ci 3485bd8deadSopenharmony_ciNew State 3495bd8deadSopenharmony_ci 3505bd8deadSopenharmony_ci None. 3515bd8deadSopenharmony_ci 3525bd8deadSopenharmony_ciNew Implementation Dependent State 3535bd8deadSopenharmony_ci 3545bd8deadSopenharmony_ci None. 3555bd8deadSopenharmony_ci 3565bd8deadSopenharmony_ciConformance Testing 3575bd8deadSopenharmony_ci 3585bd8deadSopenharmony_ci TBD. 3595bd8deadSopenharmony_ci 3605bd8deadSopenharmony_ciIssues 3615bd8deadSopenharmony_ci 3625bd8deadSopenharmony_ci Note: These issues apply specifically to the definition of the 3635bd8deadSopenharmony_ci EXT_base_instance specification, which is based on the OpenGL 3645bd8deadSopenharmony_ci extension ARB_base_instance as updated in OpenGL 4.4. 3655bd8deadSopenharmony_ci ARB_base_instance can be found in the OpenGL Registry. 3665bd8deadSopenharmony_ci 3675bd8deadSopenharmony_ci (1) What functionality was removed from ARB_base_instance? 3685bd8deadSopenharmony_ci 3695bd8deadSopenharmony_ci Nothing. Although there is less language here because ES 3.1 already 3705bd8deadSopenharmony_ci includes some of the reorganizing that the original extension added. 3715bd8deadSopenharmony_ci 3725bd8deadSopenharmony_ci (2) What functionality was changed and added relative to 3735bd8deadSopenharmony_ci ARB_base_instance? 3745bd8deadSopenharmony_ci 3755bd8deadSopenharmony_ci - EXT_base_instance more closely matches the language of OpenGL 4.4 3765bd8deadSopenharmony_ci - the <primCount> parameter was renamed to <instanceCount> 3775bd8deadSopenharmony_ci 3785bd8deadSopenharmony_ci (3) Do these new draw calls require a vertex array object to be bound? 3795bd8deadSopenharmony_ci 3805bd8deadSopenharmony_ci RESOLVED: No. The DrawArrays and DrawArraysInstanced commands do not 3815bd8deadSopenharmony_ci require a vertex array object to be bound in ES 3.1 and since these are 3825bd8deadSopenharmony_ci specializations of DrawArraysInstancedBaseInstanceEXT, it also does not 3835bd8deadSopenharmony_ci require one to be bound. Similarly the DrawElements and 3845bd8deadSopenharmony_ci DrawElementsInstanced commands do not require a vertex array object to be 3855bd8deadSopenharmony_ci bound in ES 3.1, and since these commands are specializations of 3865bd8deadSopenharmony_ci DrawElementsInstancedBaseInstanceEXT and 3875bd8deadSopenharmony_ci DrawElementsInstancedBaseVertexBaseInstanceEXT, these commands also do not 3885bd8deadSopenharmony_ci require one to be bound. 3895bd8deadSopenharmony_ci 3905bd8deadSopenharmony_ci (4) Do these new draw calls support client memory arrays? 3915bd8deadSopenharmony_ci 3925bd8deadSopenharmony_ci RESOLVED: Yes. There are no restrictions on using client-side memory for 3935bd8deadSopenharmony_ci the other direct drawing commands in ES 3.1, so these command support 3945bd8deadSopenharmony_ci them as well. As per issue (3), the old commands are specializations of 3955bd8deadSopenharmony_ci the new commands, so we keep a comparable feature set. 3965bd8deadSopenharmony_ci 3975bd8deadSopenharmony_ci 3985bd8deadSopenharmony_ciRevision History 3995bd8deadSopenharmony_ci 4005bd8deadSopenharmony_ci Rev. Date Author Changes 4015bd8deadSopenharmony_ci ---- ---------- -------- ----------------------------------------- 4025bd8deadSopenharmony_ci 4 10/24/2014 dkoch Mark complete and issues resolved. 4035bd8deadSopenharmony_ci 4045bd8deadSopenharmony_ci 3 06/24/2014 dkoch Fix typographical issues noted by Dominik. 4055bd8deadSopenharmony_ci 4065bd8deadSopenharmony_ci 2 06/20/2014 dkoch Add interaction with EXT_multi_draw_indirect. 4075bd8deadSopenharmony_ci 4085bd8deadSopenharmony_ci 1 06/13/2014 dkoch Initial version for ES based on v6 of 4095bd8deadSopenharmony_ci ARB_base_instance. 410