X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fvertexformat.h;h=2432d7b60d54aec2fbf8e478cdfec5ff8971f90f;hp=3a0eb718f5a5937b1dcca4e5b786f241bdf8ff45;hb=b8fef9be469eb16e54068bac7e275ea225efc71c;hpb=2316272b57cf9bea26d2c35b9451910c169efafa diff --git a/source/vertexformat.h b/source/vertexformat.h index 3a0eb718..2432d7b6 100644 --- a/source/vertexformat.h +++ b/source/vertexformat.h @@ -14,9 +14,8 @@ Distributed under the LGPL namespace Msp { namespace GL { -enum VertexFormat +enum VertexComponent { - NODATA=0, VERTEX2=1, VERTEX3, VERTEX4, @@ -28,10 +27,36 @@ enum VertexFormat COLOR4_UBYTE=12, COLOR3_FLOAT=14, COLOR4_FLOAT, + ATTRIB1=16, + ATTRIB2, + ATTRIB3, + ATTRIB4 }; -inline VertexFormat operator,(VertexFormat a, VertexFormat b) { return VertexFormat(a<<4 | b); } -uint get_stride(VertexFormat); +struct VertexFormat +{ + unsigned char *data; + + VertexFormat(); + VertexFormat(VertexComponent); + VertexFormat(const VertexFormat &); + VertexFormat &operator=(const VertexFormat &); + ~VertexFormat(); + + 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; } +}; + +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); } + +uint get_stride(const VertexFormat &); std::istream &operator>>(std::istream &, VertexFormat &); } // namespace GL