+void
+_mesa_array_element(struct gl_context *ctx,
+ struct _glapi_table *disp, GLint elt)
+{
+ const AEcontext *actx = AE_CONTEXT(ctx);
+
+ if (actx->dirty_state)
+ _ae_update_state(ctx);
+
+ /* emit generic attribute elements */
+ for (const AEattrib *at = actx->attribs; at->func; at++) {
+ const GLubyte *src
+ = ADD_POINTERS(at->binding->BufferObj->Mappings[MAP_INTERNAL].Pointer,
+ _mesa_vertex_attrib_address(at->array, at->binding))
+ + elt * at->binding->Stride;
+ at->func(at->index, src);
+ }
+
+ /* emit conventional arrays elements */
+ for (const AEarray *aa = actx->arrays; aa->offset != -1 ; aa++) {
+ const GLubyte *src
+ = ADD_POINTERS(aa->binding->BufferObj->Mappings[MAP_INTERNAL].Pointer,
+ _mesa_vertex_attrib_address(aa->array, aa->binding))
+ + elt * aa->binding->Stride;
+ CALL_by_offset(disp, (array_func), aa->offset, ((const void *) src));
+ }
+}
+
+