+ const Array *arr = ((arrays && i<arrays->size() && (*arrays)[i].component) ? &(*arrays)[i] : 0);
+ const Array *old_arr = ((old_arrays && i<old_arrays->size() && (*old_arrays)[i].component) ? &(*old_arrays)[i] : 0);
+ if(!arr && !old_arr)
+ continue;
+
+ unsigned char comp = (arr ? arr->component : old_arr->component);
+ unsigned sz = get_component_size(comp);
+ unsigned t = get_component_type(comp);
+ if(use_legacy)
+ {
+ GLenum array_type = 0;
+ if(t==get_component_type(VERTEX3))
+ {
+ if(arr)
+ glVertexPointer(sz, GL_FLOAT, stride_bytes, base+arr->offset);
+ array_type = GL_VERTEX_ARRAY;
+ }
+ else if(t==get_component_type(NORMAL3))
+ {
+ if(arr)
+ glNormalPointer(GL_FLOAT, stride_bytes, base+arr->offset);
+ array_type = GL_NORMAL_ARRAY;
+ }
+ else if(t==get_component_type(COLOR4_FLOAT))
+ {
+ if(arr)
+ {
+ if(sz==1)
+ glColorPointer(4, GL_UNSIGNED_BYTE, stride_bytes, base+arr->offset);
+ else
+ glColorPointer(sz, GL_FLOAT, stride_bytes, base+arr->offset);
+ }
+ array_type = GL_COLOR_ARRAY;
+ }
+ else if(comp>=TEXCOORD1 && comp<=TEXCOORD4+12)
+ {
+ t -= get_component_type(TEXCOORD1);
+ if(t>0 || active_tex)
+ {
+ glClientActiveTexture(GL_TEXTURE0+t);
+ active_tex = t;
+ }
+ if(arr)
+ glTexCoordPointer(sz, GL_FLOAT, stride_bytes, base+arr->offset);
+ array_type = GL_TEXTURE_COORD_ARRAY;
+ }
+
+ if(array_type)
+ {
+ // Only change enable state if needed
+ if(arr && !old_arr)
+ glEnableClientState(array_type);
+ else if(old_arr && !arr)
+ glDisableClientState(array_type);
+
+ continue;
+ }
+ }
+
+ if(t>=get_component_type(ATTRIB1))
+ t -= get_component_type(ATTRIB1);
+ if(arr)