+ unsigned char arr = (i<arrays.size() ? arrays[i] : 0);
+ unsigned char old_arr = (old && i<old->arrays.size() ? old->arrays[i] : 0);
+ if(!arr && !old_arr)
+ continue;
+
+ unsigned char comp = (arr ? arr : old_arr);
+ unsigned sz = get_component_size(comp);
+ unsigned t = get_component_type(comp);
+ GLenum array_type = 0;
+ if(t==get_component_type(VERTEX3))
+ {
+ if(arr)
+ glVertexPointer(sz, GL_FLOAT, stride_bytes, base+offset);
+ array_type = GL_VERTEX_ARRAY;
+ }
+ else if(t==get_component_type(NORMAL3))
+ {
+ if(arr)
+ glNormalPointer(GL_FLOAT, stride_bytes, base+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+offset);
+ else
+ glColorPointer(sz, GL_FLOAT, stride_bytes, base+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+offset);
+ array_type = GL_TEXTURE_COORD_ARRAY;
+ }
+ else