Instancing

// Slow for large N
for(int k=0; k<N; ++k)
   someOperator(k)
   draw(shape) // ... glDrawElements(...)
assets/opengl_performance.jpg
In the C++ code
// 1 unique call, N is a parameter
drawInstanced(shape, N) // ... glDrawElementsInstanced(...,N)
// No more explicit loop
In the Shader:
// ...
someOperator(gl_InstanceID)
// ...