throw invalid_operation("VertexFormat::operator,");
VertexFormat r = *this;
- UInt16 &a = r.attributes[r.count-1];
+ uint16_t &a = r.attributes[r.count-1];
a = make_typed_attribute(static_cast<VertexAttribute>(a), t);
return r;
throw invalid_operation("VertexFormat::operator,");
VertexFormat r = *this;
- UInt16 &a = r.attributes[r.count-1];
+ uint16_t &a = r.attributes[r.count-1];
a = make_indexed_attribute(static_cast<VertexAttribute>(a), i);
return r;
unsigned VertexFormat::stride() const
{
unsigned s = 0;
- for(const UInt16 *i=begin(); i!=end(); ++i)
+ for(const uint16_t *i=begin(); i!=end(); ++i)
s += get_attribute_size(*i);
return s;
}
{
unsigned sem = get_attribute_semantic(attr);
unsigned offs = 0;
- for(const UInt16 *i=begin(); i!=end(); ++i)
+ for(const uint16_t *i=begin(); i!=end(); ++i)
{
if(get_attribute_semantic(*i)==sem)
{
{
if(is_matrix(type) || is_vector(type) || is_image(type))
throw invalid_argument("make_typed_attribute");
+ if(is_integer_attribute(attr) && is_float(type))
+ throw invalid_argument("make_typed_attribute");
return static_cast<VertexAttribute>((attr&0xFC0F) | (type&0x0F)<<4 | (type&0x300)>>1);
}
bool convert_attribute_type(string::const_iterator &i, string::const_iterator end, const char *name, VertexAttribute &attr, DataType type)
{
- string::const_iterator j = i;
+ auto j = i;
for(; (j!=end && *j!='_' && *name); ++name, ++j)
if(*j!=*name)
return false;
bool convert_attribute(const string &str, const char *name, int min_size, int max_size, VertexAttribute &attr, VertexAttribute base_attr)
{
- string::const_iterator i = str.begin();
+ auto i = str.begin();
for(; *name; ++name, ++i)
if(*i!=*name)
return false;
+
+ VertexAttribute result = base_attr;
+
+ if(i!=str.end() && *i=='_')
+ {
+ if(*(++i)++!='I')
+ return false;
+ result = static_cast<VertexAttribute>(result|8);
+ }
+
if(i==str.end() || *i<'0'+min_size || *i>'0'+max_size)
return false;
- VertexAttribute result = static_cast<VertexAttribute>(base_attr+(*i++-'0'-min_size));
+ result = static_cast<VertexAttribute>(result+(*i++-'0'-min_size));
while(i!=str.end())
{