- const float *ptr = array[i];
- IO::print("\n\t");
- for(unsigned j=0; j<stride; ++j)
- IO::print("%g, ", ptr[j]);
+ unsigned offset = 0;
+ for(const unsigned char *i=fmt.begin(); i!=fmt.end(); ++i)
+ {
+ unsigned kind = (*i)>>2;
+ unsigned size = ((*i)&3)+1;
+ string name;
+ switch(kind)
+ {
+ case 0:
+ name = "vertex";
+ break;
+ case 1:
+ name = "normal";
+ break;
+ case 2:
+ name = "color";
+ break;
+ case 3:
+ name = "texcoord";
+ break;
+ default:
+ if(kind<11)
+ name = format("texcoord%d", kind-3);
+ else
+ name = format("attrib%d", kind-11);
+ break;
+ }
+
+ IO::print("float %s%s_data[] =\n{", prefix, name);
+ for(unsigned j=0; j<array.size(); ++j)
+ {
+ const float *ptr = array[j]+offset;
+ IO::print("\n\t");
+ for(unsigned k=0; k<size; ++k)
+ IO::print("%g, ", ptr[k]);
+ }
+ IO::print("\n};\n\n");
+
+ offset += size;
+ }
+ }
+ else
+ {
+ IO::print("float %svertex_data[] =\n{", prefix);
+ for(unsigned i=0; i<array.size(); ++i)
+ {
+ const float *ptr = array[i];
+ IO::print("\n\t");
+ for(unsigned j=0; j<stride; ++j)
+ IO::print("%g, ", ptr[j]);
+ }
+ IO::print("\n};\n\n");