X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fvertexformat.h;h=018d21f00e5176a322b8cbe262da5d355b762bb1;hb=c4fa55619539de9045167250d5b1c13d1827cf7a;hp=53562ef922ba3ccf4bc1cf44ffb5feeef3691f3d;hpb=f1cbab0dca940fd5db6d459f9e91661efe3d6052;p=libs%2Fgl.git diff --git a/source/vertexformat.h b/source/vertexformat.h index 53562ef9..018d21f0 100644 --- a/source/vertexformat.h +++ b/source/vertexformat.h @@ -1,14 +1,7 @@ -/* $Id$ - -This file is part of libmspgl -Copyright © 2007, 2009-2010 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #ifndef MSP_GL_VERTEXFORMAT_H_ #define MSP_GL_VERTEXFORMAT_H_ -#include +#include namespace Msp { namespace GL { @@ -32,30 +25,42 @@ 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; } unsigned stride() const; + int offset(VertexComponent) 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); } +VertexComponent make_indexed_component(VertexComponent, unsigned); + +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(); }