- comma=str.find(',', start);
- if(str.compare(start, comma-start, "VERTEX2"))
- f=f,VERTEX2;
- else if(str.compare(start, comma-start, "VERTEX3"))
- f=f,VERTEX3;
- else if(str.compare(start, comma-start, "VERTEX4"))
- f=f,VERTEX4;
- else if(str.compare(start, comma-start, "NORMAL3"))
- f=f,NORMAL3;
- else if(str.compare(start, comma-start, "TEXCOORD1"))
- f=f,TEXCOORD1;
- else if(str.compare(start, comma-start, "TEXCOORD2"))
- f=f,TEXCOORD2;
- else if(str.compare(start, comma-start, "TEXCOORD3"))
- f=f,TEXCOORD3;
- else if(str.compare(start, comma-start, "TEXCOORD4"))
- f=f,TEXCOORD4;
- else if(str.compare(start, comma-start, "COLOR4_UBYTE"))
- f=f,COLOR4_UBYTE;
- else if(str.compare(start, comma-start, "COLOR3_FLOAT"))
- f=f,COLOR3_FLOAT;
- else if(str.compare(start, comma-start, "COLOR4_FLOAT"))
- f=f,COLOR4_FLOAT;
+ string::size_type underscore = str.find('_', start);
+ bool fail = false;
+ if(!str.compare(start, underscore-start, "VERTEX2"))
+ f = (f,VERTEX2);
+ else if(!str.compare(start, underscore-start, "VERTEX3"))
+ f = (f,VERTEX3);
+ else if(!str.compare(start, underscore-start, "VERTEX4"))
+ f = (f,VERTEX4);
+ else if(!str.compare(start, underscore-start, "NORMAL3"))
+ f = (f,NORMAL3);
+ else if(!str.compare(start, underscore-start, "TEXCOORD1"))
+ f = (f,TEXCOORD1);
+ else if(!str.compare(start, underscore-start, "TEXCOORD2"))
+ f = (f,TEXCOORD2);
+ else if(!str.compare(start, underscore-start, "TEXCOORD3"))
+ f = (f,TEXCOORD3);
+ else if(!str.compare(start, underscore-start, "TEXCOORD4"))
+ f = (f,TEXCOORD4);
+ else if(!str.compare(start, underscore-start, "COLOR4UB"))
+ f = (f,COLOR4_UBYTE);
+ else if(!str.compare(start, underscore-start, "COLOR3F"))
+ f = (f,COLOR3_FLOAT);
+ else if(!str.compare(start, underscore-start, "COLOR4F"))
+ f = (f,COLOR4_FLOAT);
+ else if(underscore>=start+8 && !str.compare(start, 6, "ATTRIB"))
+ {
+ try
+ {
+ char n = str[start+6];
+ unsigned i = lexical_cast<unsigned>(str.substr(start+7, underscore-start-7));
+ if(n=='1')
+ f = (f,ATTRIB1,i);
+ else if(n=='2')
+ f = (f,ATTRIB2,i);
+ else if(n=='3')
+ f = (f,ATTRIB3,i);
+ else if(n=='4')
+ f = (f,ATTRIB4,i);
+ else
+ fail = true;
+ }
+ catch(const LexicalError &)
+ {
+ fail = true;
+ }
+ }