glArrayElement commands are used within glBegin/glEnd
pairs to specify vertex and attribute data for point, line, and polygon
primitives. If GL_VERTEX_ARRAY is enabled when glArrayElement is called,
a single vertex is drawn, using vertex and attribute data taken from location
i of the enabled arrays. If GL_VERTEX_ARRAY is not enabled, no drawing occurs
but the attributes corresponding to the enabled arrays are modified.

Use
glArrayElement to construct primitives by indexing vertex data, rather
than by streaming through arrays of data in first-to-last order. Because each
call specifies only a single vertex, it is possible to explicitly specify
per-primitive attributes such as a single normal per individual triangle.

Changes made to array data between the execution of glBegin and the corresponding
execution of glEnd may affect calls to glArrayElement that are made within
the same glBegin/glEnd period in non-sequential ways. That is, a call to
glArrayElement that precedes a change to array data may access the changed
data, and a call that follows a change to array data may access original
data.

glArrayElement is included in display lists. If glArrayElement is entered
into a display list, the necessary array data (determined by the array
pointers and enables) is also entered into the display list. Because the
array pointers and enables are client-side state, their values affect display
lists when the lists are created, not when the lists are executed.