X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fvertexformat.cpp;h=02410857bff6e8873570055499b4be71800a6c02;hb=e06ee659c66c92065dbd767475ac9bf9f0f14846;hp=f5e175714187a9eb5a853abc9ba84aa3728864a9;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;p=libs%2Fgl.git diff --git a/source/vertexformat.cpp b/source/vertexformat.cpp index f5e17571..02410857 100644 --- a/source/vertexformat.cpp +++ b/source/vertexformat.cpp @@ -1,7 +1,8 @@ #include +#include #include #include -#include "except.h" +#include "error.h" #include "vertexformat.h" using namespace std; @@ -53,29 +54,29 @@ unsigned VertexFormat::stride() const { unsigned s = 0; for(const unsigned char *i=begin(); i!=end(); ++i) - s += (*i&3)+1; + s += get_component_size(*i); return s; } int VertexFormat::offset(VertexComponent comp, unsigned index) const { if((comp0) || (comp=8) || index>=53) - throw InvalidParameterValue("Vertex component index out of range"); + throw out_of_range("VertexFormat::offset"); - unsigned type = (comp>>2)+index; - unsigned size = comp&3; + unsigned type = get_component_type(comp)+index; + unsigned size = get_component_size(comp); unsigned offs = 0; for(const unsigned char *i=begin(); i!=end(); ++i) { - if(static_cast(*i>>2)==type) + if(get_component_type(*i)==type) { - if((*i&3)>=size) + if(get_component_size(*i)>=size) return offs; else return -1; } else - offs += (*i&3)+1; + offs += get_component_size(*i); } return -1; @@ -109,11 +110,11 @@ VertexFormat operator,(const VertexFormat &f, VertexComponent c) VertexFormat operator,(const VertexFormat &f, unsigned i) { if(!f.data) - throw InvalidState("VertexFormat has no components"); + throw invalid_operation("VertexFormat::operator,"); VertexFormat r = f; unsigned char *c = r.data+r.data[0]; if((*c0) || (*c=8) || i>=53) - throw InvalidParameterValue("Vertex component index out of range"); + throw invalid_argument("VertexFormat::operator,"); *c += i*4; return r; @@ -137,7 +138,7 @@ void operator>>(const LexicalConverter &conv, VertexComponent &c) else if(str.size()==11 && str[9]=='_' && str[10]>='0' && str[10]<='7') c = static_cast(TEXCOORD1+(str[8]-'1')+(str[10]-'0')*4); else - throw LexicalError("Invalid texture unit in VertexComponent conversion"); + throw lexical_error(format("conversion of '%s' to VertexComponent", str)); } else if(str.size()>=9 && !str.compare(0, 6, "ATTRIB") && str[6]>='1' && str[6]<='4' && str[7]=='_') { @@ -146,14 +147,14 @@ void operator>>(const LexicalConverter &conv, VertexComponent &c) { n = lexical_cast(str.substr(8)); } - catch(const LexicalError &) + catch(const lexical_error &) { - throw LexicalError("Invalid attribute in VertexComponent conversion"); + throw lexical_error(format("conversion of '%s' to VertexComponent", str)); } c = static_cast(ATTRIB1+(str[6]-'1')+n*4); } else - throw LexicalError("Invalid input in VertexComponent conversion"); + throw lexical_error(format("conversion of '%s' to VertexComponent", str)); } // XXX This will go away eventually