X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fvertexformat.cpp;fp=source%2Fvertexformat.cpp;h=0000000000000000000000000000000000000000;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=6c2e2933ba0f06f7dc9c483321dc9b7fcf2a4138;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/vertexformat.cpp b/source/vertexformat.cpp deleted file mode 100644 index 6c2e2933..00000000 --- a/source/vertexformat.cpp +++ /dev/null @@ -1,141 +0,0 @@ -#include -#include -#include -#include -#include "error.h" -#include "vertexformat.h" - -using namespace std; - -namespace Msp { -namespace GL { - -VertexFormat::VertexFormat(): - count(0) -{ } - -VertexFormat::VertexFormat(VertexComponent c): - count(1) -{ - components[0] = c; -} - -VertexFormat VertexFormat::operator,(VertexComponent c) const -{ - if(count>=MAX_COMPONENTS) - throw invalid_operation("VertexFormat::operator,"); - - VertexFormat r = *this; - r.components[r.count++] = c; - - return r; -} - -VertexFormat VertexFormat::operator,(unsigned i) const -{ - if(!count) - throw invalid_operation("VertexFormat::operator,"); - - VertexFormat r = *this; - unsigned char *c = &r.components[r.count-1]; - *c = make_indexed_component(static_cast(*c), i); - - return r; -} - -bool VertexFormat::operator==(const VertexFormat &other) const -{ - if(count!=other.count) - return false; - return equal(components, components+count, other.components); -} - -unsigned VertexFormat::stride() const -{ - unsigned s = 0; - for(const unsigned char *i=begin(); i!=end(); ++i) - s += get_component_size(*i); - return s; -} - -int VertexFormat::offset(VertexComponent comp) const -{ - unsigned type = get_component_type(comp); - unsigned size = get_component_size(comp); - unsigned offs = 0; - for(const unsigned char *i=begin(); i!=end(); ++i) - { - if(get_component_type(*i)==type) - { - if(get_component_size(*i)>=size) - return offs; - else - return -1; - } - else - offs += get_component_size(*i); - } - - return -1; -} - -VertexComponent make_indexed_component(VertexComponent comp, unsigned index) -{ - if(comp>=TEXCOORD1 && comp<=TEXCOORD4) - { - if(index>=4) - throw out_of_range("make_indexed_component"); - } - else if(comp>=ATTRIB1 && comp<=ATTRIB4) - { - if(index>=24) - throw out_of_range("make_indexed_component"); - } - else - throw invalid_argument("make_indexed_component"); - return static_cast(comp+index*4); -} - -void operator>>(const LexicalConverter &conv, VertexComponent &c) -{ - const string &str = conv.get(); - if(str.size()==7 && !str.compare(0, 6, "VERTEX") && str[6]>='2' && str[6]<='4') - c = static_cast(VERTEX2+(str[6]-'2')); - else if(str=="NORMAL3") - c = NORMAL3; - else if(str.size()==12 && !str.compare(0, 5, "COLOR") && str[5]>='3' && str[5]<='4' && !str.compare(6, 6, "_FLOAT")) - c = static_cast(COLOR3_FLOAT+(str[5]-'3')); - else if(str=="COLOR4_UBYTE") - c = COLOR4_UBYTE; - else if(str=="TANGENT3") - c = TANGENT3; - else if(str=="BINORMAL3") - c = BINORMAL3; - else if(str.size()>=9 && !str.compare(0, 8, "TEXCOORD") && str[8]>='1' && str[8]<='4') - { - if(str.size()==9) - c = static_cast(TEXCOORD1+(str[8]-'1')); - 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 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]=='_') - { - unsigned n; - try - { - n = lexical_cast(str.substr(8)); - } - catch(const lexical_error &) - { - throw lexical_error(format("conversion of '%s' to VertexComponent", str)); - } - c = static_cast(ATTRIB1+(str[6]-'1')+n*4); - } - else - throw lexical_error(format("conversion of '%s' to VertexComponent", str)); -} - -} // namespace GL -} // namespace Msp