Name ANGLE_base_vertex_base_instance Name Strings GL_ANGLE_base_vertex_base_instance Contributors Shrek Shao, Google Inc. Contributors to the OES_draw_elements_base_vertex specification Contributors to the EXT_draw_elements_base_vertex specification Contributors to the EXT_multi_draw_arrays specification Contributors to the ARB_shader_draw_parameters specification Contact Shrek Shao (shrekshao 'at' google.com) Status Incomplete Version Last Modified Date: August 13, 2019 Author Revision: 1 Number OpenGL ES Extension XX Dependencies OpenGL ES 3.1 is required. This extension is written against the OpenGL ES 3.1 specification, the OpenGL ES 3.2 specification, and the OpenGL ES Shading Language 3.0 specification. GL_ANGLE_multi_draw is required. Overview This extension exposes the *BaseVertex* draw call in OES_draw_elements_base_vertex/EXT_draw_elements_base_vertex together with their newly added *BaseInstance and MultiDraw* variants in addition to the vertex shader builtins and exposed by ARB_shader_draw_parameters for OpenGL. *BaseInstance behaves identically to its counterpart draw calls except that instances of the range of elements are executed and the value of advances for each iteration. Those attributes that have non-zero values for , as specified by VertexAttribDivisor, advance once per instances of the set(s) of vertices being rendered. Additionally, specifies the first element within the instanced vertex attributes. *BaseVertex* is equivalent to its counterpart draw calls except that the value of the base vertex passed into the driver is instead of zero, and that of the set of elements are executed and the value of advances between each set. Additionally, and builtins are added to the shading language. For any *BaseVertex* draw call variant, the of the draw may be read by the vertex shader as . For non *BaseVertex* calls, the value of is 0. For any *BaseInstance draw call variant, the baseInstance of the draw may be read by the vertex shader as . For non *BaseInstance calls, the value of is 0. IP Status No known IP claims. New Procedures and Functions void DrawArraysInstancedBaseInstanceANGLE(enum mode, GLint first, GLsizei count, GLsizei instanceCount, GLuint baseInstance); void DrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instanceCount, GLint baseVertex, GLuint baseInstance); void MultiDrawArraysInstancedBaseInstanceANGLE(enum mode, const GLint* firsts, const GLsizei* counts, const GLsizei* instanceCounts, const GLint* baseInstances, const GLsizei drawcount); void MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(enum mode, const GLint* counts, GLenum type, const GLvoid* const* indices, const GLsizei* instanceCounts, const GLint* baseVertices, const GLint* baseInstances, const GLsizei drawcount); New Tokens None. Additions to Chapter 10 of the OpenGL ES 3.2 Specification Section 10.5 Drawing Commands Using Vertex Arrays: The command void DrawArraysInstancedBaseInstanceANGLE (GLenum mode, GLint first, GLsizei count, GLsizei instanceCount, GLuint baseInstance); Behaves identically to DrawArraysInstanced except that is passed down to DrawArraysOneInstance instead of zero. The base index of the instance may be read by a vertex shader as . The command void MultiDrawArraysInstancedBaseInstanceANGLE(GLenum mode, const GLint* firsts, const GLsizei* counts, const GLsizei* instanceCounts, const GLuint* baseInstances, GLsizei drawcount); Behaves identically to DrawArraysInstancedBaseInstanceANGLE except that a list of arrays is specified instead. The number of lists is specified in the parameter. It has the same effect as: for(i=0; i0) DrawArraysInstancedBaseInstance( mode, *(counts+i), *(instanceCounts+i), *(firsts+i), *(baseInstance+i) ); } The index of the draw ( in the above pseudo-code) may be read by a vertex shader as which is defined in GL_ANGLE_multi_draw. The command void DrawElementsInstancedBaseVertexBaseInstanceANGLE (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount, GLint baseVertex, GLuint baseInstance); Behaves identically to DrawElementsInstanced except that and are passed down to DrawElementsOneInstance instead of zero. The base index of the vertex may be read by a vertex shader as . This value is also added to the . The base index of the instance may be read by a vertex shader as . Note that this value is not added to the . The command void MultiDrawElementsInstancedBaseVertexBaseInstanceANGLE(GLenum mode, const GLsizei* counts, GLenum type, const GLvoid* const* indices, const GLsizei* instanceCounts, const GLint* baseVertices, const GLuint* baseInstances, GLsizei drawcount); Behaves identically to DrawElementsInstancedBaseVertexBaseInstanceANGLE except that a list of arrays is specified instead. The number of lists is specified in the parameter. It has the same effect as: for(i=0; i0) DrawElementsInstancedBaseVertexBaseInstanceANGLE( mode, *(counts+i), type, *(instanceCounts+i), *(indices+i), *(baseVertices+i), *(baseInstances+i) ); } The index of the draw ( in the above pseudo-code) may be read by a vertex shader as which is defined in GL_ANGLE_multi_draw. Errors DrawArraysInstancedBaseInstanceANGLE and DrawElementsInstancedBaseVertexBaseInstanceANGLE generate the same errors as DrawArraysInstanced and DrawElementsInstanced. MultiDrawArraysInstancedBaseInstanceANGLE and MultiDrawElementsInstancedBaseVertexBaseInstanceANGL generate the same errors as DrawArraysInstanced and DrawElementsInstanced, respectively, for any draw where an error is generated. If any call would produce an error, no drawing is performed. The error INVALID_VALUE is generated by the MultiDraw* functions if is less than zero. Modifications to the OpenGL ES Shading Language Specification, Version 3.00 Including the following line in a shader can be used to control the language featured described in this extension: #extension GL_ANGLE_base_vertex_base_instance : where is as specified in section 3.5. A new preprocessor #define is added to the OpenGL ES Shading Language: #define GL_ANGLE_base_vertex_base_instance 1 Dependencies on GL_OES_draw_elements_base_vertex and GL_EXT_draw_elements_base_vertex If the OpenGL ES context version is less than 3.2, this extension is only available when GL_OES_draw_elements_base_vertex or GL_EXT_draw_elements_base_vertex are available. Issues None Revision History Rev. Date Author Changes ---- -------- ---------- -------------------------------------------- 1 08/13/19 Shrek Shao First revision.