名称
glDrawElementsInstanced — draw multiple instances of a set of elements
C 规范
void glDrawElementsInstanced( GLenum mode,
GLsizei count,
GLenum type,
const void * indices,
GLsizei primcount);
参数
mode
指定要渲染的原语类型。接受符号常量GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_LINE_STRIP_ADJACENCY,GL_LINES_ADJACENCY,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_TRIANGLES,GL_TRIANGACE_STRIP_ADIP_AD_ACE
count
指定要渲染的元素数。
type
指定索引中值的类型。必须是GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT或GL_UNSIGNED_INT中的一种。
indices
指定绑定到GL_ELEMENT_ARRAY_BUFFER的缓冲区中的字节偏移量(转换为指针类型),以开始从中读取索引。如果没有绑定缓冲区,则指定指向索引存储位置的指针。
primcount
指定要呈现的指定索引范围的实例数。
描述
glDrawElementsInstanced的行为与glDrawElements相同,只是执行了元素集的primcount实例。具有除数N(其中N不为零)(由glVertexAttribDivisor指定)的那些属性每N个实例前进一次。因此,从实例顶点属性传输的元素由下式给出:
实例除数
顶点着色器可以将实例的值读取为gl_InstanceID。
要启用和禁用通用顶点属性数组,请调用glEnableVertexAttribArray和glDisableVertexAttribArray。
如果未启用与顶点着色器所需的通用属性相对应的数组,则将从当前的通用属性状态获取相应的元素。
注意
GL_LINE_STRIP_ADJACENCY,GL_LINES_ADJACENCY,GL_TRIANGLE_STRIP_ADJACENCY,GL_TRIANGLES_ADJACENCY和GL_PATCHES仅在GL ES版本为3.2或更高版本时可用。
错误
如果不是mode,则生成GL_INVALID_ENUM,这不是可接受的值。
如果count或primcount为负,则生成GL_INVALID_VALUE。
如果将非零缓冲区对象名称绑定到已启用的数组,并且当前已映射缓冲区对象的数据存储,则将生成GL_INVALID_OPERATION。
如果当前绑定的帧缓冲区未完成帧缓冲区(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE),则会生成GL_INVALID_FRAMEBUFFER_OPERATION。
如果转换反馈处于活动状态且未暂停,则生成GL_INVALID_OPERATION。
如果几何着色器处于活动状态,并且模式与当前安装的程序对象中的几何着色器的输入基本类型不兼容,则生成GL_INVALID_OPERATION。
API 支持版本
函数名 | 2.0 | 3.0 | 3.1 | 3.2 |
---|---|---|---|---|
glDrawElementsInstanced | - | ✔ | ✔ | ✔ |
另见
glCheckFramebufferStatus, glDisableVertexAttribArray, glDrawElements, glDrawArrays, glDrawArraysInstanced, glDrawRangeElements, glEnableVertexAttribArray, glVertexAttribDivisor
版权
https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawElementsInstanced.xhtml
Copyright © 2010-2015 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.