+++ /dev/null
-#ifndef MSP_GL_VERTEXFORMAT_H_
-#define MSP_GL_VERTEXFORMAT_H_
-
-#include <msp/strings/lexicalcast.h>
-
-namespace Msp {
-namespace GL {
-
-/** A single vertex component. Nvidia drivers have aliasing between the
-fixed-functions and generic vertex attributes, despite the standard not
-allowing it. We use the same attribute indices here to avoid problems. */
-enum VertexComponent
-{
- VERTEX2 = 1,
- VERTEX3,
- VERTEX4,
- NORMAL3 = 10,
- COLOR4_UBYTE = 12,
- COLOR3_FLOAT = 14,
- COLOR4_FLOAT,
- TANGENT3 = 18,
- BINORMAL3 = 22,
- TEXCOORD1 = 32,
- TEXCOORD2,
- TEXCOORD3,
- TEXCOORD4,
- ATTRIB1 = 64,
- ATTRIB2,
- ATTRIB3,
- ATTRIB4
-};
-
-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;
-};
-
-inline VertexFormat operator,(VertexComponent c1, VertexComponent c2)
-{ return (VertexFormat(c1), c2); }
-
-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(); }
-
-void operator>>(const LexicalConverter &, VertexComponent &);
-
-} // namespace GL
-} // namespace Msp
-
-#endif