GLDRAWELEMENTSINSTAN(3G)

✨ GLDRAWELEMENTSINSTAN(3G) ✨

okay bestie, so this is the 3G manpage for glDrawElementsInstanced β€” yes that's the OpenGL one, and yes it's a whole mood πŸ’…


🌸 NAME 🌸

glDrawElementsInstanced β€” draw multiple instances of a set of elements (like, the same elements, over and over, but each one gets its own little instance moment ✨)


πŸŽ€ C SPECIFICATION πŸŽ€

void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type,
                             const void * indices, GLsizei primcount);

πŸ¦‹ PARAMETERS πŸ¦‹

  • mode β€” what kind of primitives you're rendering, bestie. Accepted values are 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_TRIANGLE_STRIP_ADJACENCY, GL_TRIANGLES_ADJACENCY and GL_PATCHES.
  • count β€” the number of elements to be rendered. literally how many.
  • type β€” the type of the values in indices. Has to be one of GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT. no vibes-based types allowed πŸ™ˆ
  • indices β€” a pointer to the location where the indices are stored. it's giving "point me to the data" energy.
  • primcount β€” the number of instances of that specified range of indices to be rendered. yes, the instancing part πŸ’«

πŸ’– DESCRIPTION πŸ’–

glDrawElementsInstanced behaves identically to glDrawElements(), except β€” plot twist β€” primcount instances of the set of elements are executed, and the value of the internal counter instanceID advances for each iteration. instanceID is an internal 32-bit integer counter that may be read by a vertex shader as gl_InstanceID. iconic honestly πŸ‘‘

glDrawElementsInstanced has the same effect as:

if (mode, count, or type is invalid )
    generate appropriate error
else {
    for (int i = 0; i < primcount ; i++) {
        instanceID = i;
        glDrawElements(mode, count, type, indices);
    }
    instanceID = 0;
}

see how it's just looping? a for-loop ate, no cap πŸ”₯


🧚 NOTES 🧚

glDrawElementsInstanced is available only if the GL version is 3.1 or greater.

GL_LINE_STRIP_ADJACENCY, GL_LINES_ADJACENCY, GL_TRIANGLE_STRIP_ADJACENCY and GL_TRIANGLES_ADJACENCY are available only if the GL version is 3.2 or greater. so check your version first, bestie, fr fr 🫢


πŸ’€ ERRORS πŸ’€

  • GL_INVALID_ENUM is generated if mode is not one of GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, or GL_TRIANGLES.
  • GL_INVALID_VALUE is generated if count or primcount are negative. negative?? not the move 😭
  • GL_INVALID_OPERATION is generated if a geometry shader is active and mode is incompatible with the input primitive type of the geometry shader in the currently installed program object.
  • GL_INVALID_OPERATION is generated if a non-zero buffer object name is bound to an enabled array and the buffer object's data store is currently mapped.
⚠️ like, all four of these will absolutely jump out and ruin your day if you're not paying attention. read them twice. i'm serious 🫢

🌈 VERSION SUPPORT 🌈

here's the vibe check on where glDrawElementsInstanced actually exists β€” the columns are OpenGL versions from 2.0 all the way to 4.5 🌟

  • 2.0 β€” - (not today, bestie)
  • 2.1 β€” -
  • 3.0 β€” -
  • 3.1 β€” βœ” ✨
  • 3.2 β€” βœ”
  • 3.3 β€” βœ”
  • 4.0 β€” βœ”
  • 4.1 β€” βœ”
  • 4.2 β€” βœ”
  • 4.3 β€” βœ”
  • 4.4 β€” βœ”
  • 4.5 β€” βœ”

so: nothing until 3.1, then an unbroken slay streak straight through 4.5. periodt πŸ’œ


⭐ SEE ALSO ⭐

  • glDrawElements()
  • glDrawArraysInstanced()

go read those too, iykyk πŸ¦‹


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. http://opencontent.org/openpub/.

Copyright Β© 2010-2014 Khronos Group


and that's the whole page, bestie πŸŽ€ πŸ’… β€” source was [FIXME: source] and the date on this one is 08/09/2021, so yeah, it's been out here slaying since way before you learned what a vertex buffer was 🌸 πŸ’–

πŸ“¦ where this page comes from