X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fvertexformat.h;h=fb47484b35940b7e873b6d2586d333df0edda802;hb=ba5c731b8aa6430bb10e38848d42d8bfb59694a6;hp=833b942ee82f2097bd004228879a43957fcd615d;hpb=3d6188a7f48566398e7ad7548dbd47a68bc73bdc;p=libs%2Fgl.git diff --git a/source/vertexformat.h b/source/vertexformat.h index 833b942e..fb47484b 100644 --- a/source/vertexformat.h +++ b/source/vertexformat.h @@ -1,7 +1,7 @@ #ifndef MSP_GL_VERTEXFORMAT_H_ #define MSP_GL_VERTEXFORMAT_H_ -#include +#include namespace Msp { namespace GL { @@ -25,16 +25,21 @@ enum VertexComponent ATTRIB4 }; -struct VertexFormat +class VertexFormat { +private: unsigned char *data; +public: VertexFormat(); VertexFormat(VertexComponent); VertexFormat(const VertexFormat &); VertexFormat &operator=(const VertexFormat &); ~VertexFormat(); + VertexFormat operator,(VertexComponent c) const; + VertexFormat operator,(unsigned i) const; + bool empty() const { return !data || !data[0]; } const unsigned char *begin() const { return data ? data+1 : 0; } const unsigned char *end() const { return data ? data+1+data[0] : 0; } @@ -42,14 +47,18 @@ struct VertexFormat int offset(VertexComponent, unsigned = 0) const; }; -VertexFormat operator,(const VertexFormat &f, VertexComponent c); inline VertexFormat operator,(VertexComponent c1, VertexComponent c2) { return (VertexFormat(c1), c2); } -VertexFormat operator,(const VertexFormat &f, unsigned i); inline VertexFormat operator,(VertexComponent c, unsigned i) { return (VertexFormat(c), i); } +inline unsigned get_component_type(unsigned char c) +{ return c>>2; } + +inline unsigned get_component_size(unsigned char c) +{ return (c&3)+1; } + inline unsigned get_stride(const VertexFormat &f) { return f.stride(); }