- union { unsigned char c[4]; float f; } u;
- u.c[0] = static_cast<unsigned char>(attr[t].x*255);
- u.c[1] = static_cast<unsigned char>(attr[t].y*255);
- u.c[2] = static_cast<unsigned char>(attr[t].z*255);
- u.c[3] = static_cast<unsigned char>(attr[t].w*255);
- *ptr++ = u.f;
+ const Vector4 &value = (sem==0 ? vtx : attr[sem]);
+ if(type==UNSIGNED_BYTE)
+ store_attribute<UInt8>(ptr, value, !integer, cc);
+ else if(type==BYTE)
+ store_attribute<Int8>(ptr, value, !integer, cc);
+ else if(type==UNSIGNED_SHORT)
+ store_attribute<UInt16>(ptr, value, !integer, cc);
+ else if(type==SHORT)
+ store_attribute<Int16>(ptr, value, !integer, cc);
+ else if(type==UNSIGNED_INT)
+ store_attribute<UInt32>(ptr, value, !integer, cc);
+ else if(type==INT)
+ store_attribute<Int32>(ptr, value, !integer, cc);
+ else if(type==FLOAT)
+ store_attribute<float>(ptr, value, false, cc);