- case 0:
- glVertexPointer(size, GL_FLOAT, stride, base+offset);
- break;
- case 4:
- glNormalPointer(GL_FLOAT, stride, base+offset);
- break;
- case 8:
- glTexCoordPointer(size, GL_FLOAT, stride, base+offset);
- break;
- case 12:
- if(size==1)
- glColorPointer(4, GL_UNSIGNED_BYTE, stride, base+offset);
+ vbuf->data(data.size()*sizeof(float), &data[0]);
+ dirty = false;
+ }
+ }
+
+ const float *base = (vbuf ? 0 : &data[0]);
+ unsigned offset = 0;
+ ArrayMask found;
+ unsigned bpv = stride*sizeof(float);
+ unsigned active_tex = 0;
+ for(const unsigned char *c=format.begin(); c!=format.end(); ++c)
+ {
+ unsigned sz = get_component_size(*c);
+ unsigned t = get_component_type(*c);
+ bool en = enabled_arrays.is_set(t);
+ if(t==get_component_type(VERTEX3))
+ {
+ glVertexPointer(sz, GL_FLOAT, bpv, base+offset);
+ if(!en)
+ glEnableClientState(GL_VERTEX_ARRAY);
+ }
+ else if(t==get_component_type(NORMAL3))
+ {
+ glNormalPointer(GL_FLOAT, bpv, base+offset);
+ if(!en)
+ glEnableClientState(GL_NORMAL_ARRAY);
+ }
+ else if(t==get_component_type(COLOR4_FLOAT))
+ {
+ if(sz==1)
+ glColorPointer(4, GL_UNSIGNED_BYTE, bpv, base+offset);