GLMULTIDRAWELEMENTSI(3G)
π GLMULTIDRAWELEMENTSI(3G) β glMultiDrawElementsIndirectCount
okay bestie, sit down, because this one is a baddie. this is the 3G manual page for glMultiDrawElementsIndirectCount, and it is literally the "draw a whole bunch of indexed stuff with basically one function call" icon that we all deserve. β¨
It renders indexed primitives from array data, and it takes its parameters and its count straight from memory. no cap. π
β¨ C SPECIFICATION β¨
look at her. she's gorgeous. she takes six whole arguments and does not apologize for it:
void glMultiDrawElementsIndirectCount(GLenum mode, GLenum type,
const void *indirect,
GLintptr drawcount,
GLsizei maxdrawcount,
GLsizei stride);
π¦ PARAMETERS π¦
every single one, and yes we're doing all of them:
modeβ tells the GPU what kind of primitives we're rendering, bestie. accepted values areGL_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_TRIANGLE_STRIP_ADJACENCY,GL_TRIANGLES_ADJACENCY, andGL_PATCHES. that's the whole list, don't come at me with anything else πtypeβ the type of the data living in the buffer bound to theGL_ELEMENT_ARRAY_BUFFERbinding. must be one ofGL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT, orGL_UNSIGNED_INT. those three, pick one. πindirectβ the address of a structure that holds an array of draw parameters. like, the whole little pile of them. πdrawcountβ an offset, in bytes, into the buffer object bound to theGL_PARAMETER_BUFFERbinding point, and at that offset there's a singlesizeityped value chillin'. it must be a multiple of four. yes, must. π«Άmaxdrawcountβ the maximum number of draws that are expected to be stored in the buffer. and if the value stored atdrawcountin the buffer is greater thanmaxdrawcount, the implementation just stops processing draws aftermaxdrawcountparameter sets. it simply stops. no drama, it's in the spec. βοΈstrideβ the distance, in basic machine units, between elements of the draw parameter array. that's the spacing between your little parameter sets. π
πΈ DESCRIPTION πΈ
so glMultiDrawElementsIndirectCount specifies multiple geometric primitives with very few subroutine calls β main character energy honestly, she does so much with so little.
she behaves similarly to glMultiDrawElementsIndirect(), with the one glow-up that the drawcount parameter is stored in the buffer bound to the GL_PARAMETER_BUFFER binding at the offset specified by drawcount. the count lives in the buffer, not in your hand. iykyk. π
the parameters addressed by indirect are packed into a structure that takes this form, in C, and i'm copying it exactly so don't @ me:
typedef struct {
uint count;
uint instanceCount;
uint firstIndex;
int baseVertex;
uint baseInstance;
} DrawElementsIndirectCommand;
if a buffer is bound to the GL_DRAW_INDIRECT_BUFFER binding at the time of a call to glMultiDrawElementsIndirectCount, then indirect is interpreted as an offset β in basic machine units β into that buffer, and the parameter data gets read from the buffer instead of from client memory. it's giving "read the room, read the buffer". π
π¨ not me having to say this, but: indices stored in client memory are not supported. if no buffer is bound to the GL_ELEMENT_ARRAY_BUFFER binding, an error will be generated. periodt.
the results of the operation are undefined if the reservedMustBeZero member of the parameter structure is non-zero. and likeβ¦ no error is generated in that case either. it's just vibes and chaos. you've been warned, bestie π
vertex attributes that are modified by glMultiDrawElementsIndirectCount have an unspecified value after glMultiDrawElementsIndirectCount returns. attributes that aren't modified remain well defined. that's the deal. π«
π₯ ERRORS π₯
here's the full receipt, every single one, no skipping:
GL_INVALID_ENUMis generated ifmodeis not an accepted value. πGL_INVALID_VALUEis generated ifstrideis not a multiple of four.GL_INVALID_VALUEis generated ifdrawcountis negative.GL_INVALID_OPERATIONis generated if no buffer is bound to theGL_ELEMENT_ARRAY_BUFFERbinding, or if such a buffer's data store is currently mapped.GL_INVALID_OPERATIONis generated if a non-zero buffer object name is bound to an enabled array or to theGL_DRAW_INDIRECT_BUFFERbinding and the buffer object's data store is currently mapped.GL_INVALID_OPERATIONis generated if a geometry shader is active andmodeis incompatible with the input primitive type of the geometry shader in the currently installed program object.GL_INVALID_OPERATIONis generated ifmodeisGL_PATCHESand no tessellation control shader is active.GL_INVALID_OPERATIONerror is generated if no buffer is bound to theGL_PARAMETER_BUFFERbinding point.GL_INVALID_OPERATIONerror is generated ifdrawcountis not a multiple of four.GL_INVALID_OPERATIONerror is generated if reading asizeityped value from the buffer bound to theGL_PARAMETER_BUFFERtarget at the offset specified bydrawcountwould result in an out-of-bounds access. π§
π VERSION SUPPORT π
the original ships a whole grid here, and since we don't do tables in this house, here's the tea in words β it's the same tea, i promise:
Function / Feature Name: glMultiDrawElementsIndirectCount
OpenGL Version: 2.0, 2.1, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6
Support: every single version from 2.0 all the way through 4.5 gets a - (nope, not her), and 4.6 gets the one and only β. she showed up late and she showed up iconic. β
π SEE ALSO π
go read these next, bestie, they're all connected:
glDrawArrays()glDrawArraysInstanced()glDrawArraysIndirect()glDrawElements()glDrawRangeElements()glDrawElementsIndirect()glMultiDrawArraysIndirect()glMultiDrawArraysIndirectCount()glMultiDrawElementsIndirect()
π COPYRIGHT π
Copyright Β© 2010-2014 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. https://opencontent.org/openpub/.
and again, because the original says it twice and we keep every detail:
Copyright Β© 2010-2014 Khronos Group.
mwah π that's the whole page. source:[FIXME: source], dated10/07/2026, from theGLMULTIDRAWELEMENTSI(3G)era. go draw something beautiful, bestie β and remember,drawcountis a multiple of four. π«Άβ¨
π¦ where this page comes from
- arch rolling: opengl-man-pages 20261006-1 Β· SGI-B-2.0 AND OPL-1.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms