X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fvertexformat.h;h=c7a2fcf166ef28d468289891db3ca9a82ab31e9b;hp=3561292245fc640deb2859629cbf8f39c1776e5b;hb=86721a55699193e63c76e8a0a7b0ced0416c1cce;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266 diff --git a/source/core/vertexformat.h b/source/core/vertexformat.h index 35612922..c7a2fcf1 100644 --- a/source/core/vertexformat.h +++ b/source/core/vertexformat.h @@ -1,77 +1,106 @@ #ifndef MSP_GL_VERTEXFORMAT_H_ #define MSP_GL_VERTEXFORMAT_H_ +#include #include namespace Msp { namespace GL { -/** A single vertex component. Symbolic names are provided for commonly used -attributes. These are aliased with with generic attributes, so be careful when -picking your attribute indices. */ -enum VertexComponent +/** A single vertex attribute. Commonly used attributes are named by their +semantical meaning in the standard shaders. Texture coordinates and generic +attributes can additionally be given an index. There are four texture +coordinate attributes available. The number of available generic attributes +depends on implementation limits, but is at least five. + +RAW_ATTRIB is handled in a special way; creating an indexed attribute based on +it uses the index as raw attribute number. Only use it if you know what you +are doing. */ +enum VertexAttribute { VERTEX2 = 1, VERTEX3, VERTEX4, - NORMAL3 = 10, - COLOR4_UBYTE = 12, - COLOR3_FLOAT = 14, + COLOR4_UBYTE = 8, + COLOR3_FLOAT = 10, COLOR4_FLOAT, - TANGENT3 = 18, - BINORMAL3 = 22, - TEXCOORD1 = 32, + NORMAL3 = 18, + TANGENT3 = 26, + GROUP1 = 32, + GROUP2, + GROUP3, + GROUP4, + WEIGHT1 = 40, + WEIGHT2, + WEIGHT3, + WEIGHT4, + TEXCOORD1 = 48, TEXCOORD2, TEXCOORD3, TEXCOORD4, - ATTRIB1 = 64, - ATTRIB2, - ATTRIB3, - ATTRIB4 + GENERIC1 = 80, + GENERIC2, + GENERIC3, + GENERIC4, + RAW_ATTRIB1 = 248, + RAW_ATTRIB2, + RAW_ATTRIB3, + RAW_ATTRIB4 }; +DEPRECATED typedef VertexAttribute VertexComponent; + class VertexFormat { private: - enum { MAX_COMPONENTS = 15 }; + enum { MAX_ATTRIBUTES = 15 }; unsigned char count; - unsigned char components[MAX_COMPONENTS]; + unsigned char attributes[MAX_ATTRIBUTES]; public: VertexFormat(); - VertexFormat(VertexComponent); + VertexFormat(VertexAttribute); - VertexFormat operator,(VertexComponent c) const; - VertexFormat operator,(unsigned i) const; + VertexFormat operator,(VertexAttribute) const; + VertexFormat operator,(unsigned) const; bool operator==(const VertexFormat &) const; bool operator!=(const VertexFormat &other) const { return !(*this==other); } bool empty() const { return !count; } - const unsigned char *begin() const { return components; } - const unsigned char *end() const { return components+count; } + const unsigned char *begin() const { return attributes; } + const unsigned char *end() const { return attributes+count; } unsigned stride() const; - int offset(VertexComponent) const; + int offset(VertexAttribute) const; }; -inline VertexFormat operator,(VertexComponent c1, VertexComponent c2) -{ return (VertexFormat(c1), c2); } +inline VertexFormat operator,(VertexAttribute a1, VertexAttribute a2) +{ return (VertexFormat(a1), a2); } + +inline VertexFormat operator,(VertexAttribute a, unsigned i) +{ return (VertexFormat(a), i); } + +VertexAttribute make_indexed_attribute(VertexAttribute, unsigned); + +DEPRECATED inline VertexAttribute make_indexed_component(VertexAttribute a, unsigned i) +{ return make_indexed_attribute(a, i); } -inline VertexFormat operator,(VertexComponent c, unsigned i) -{ return (VertexFormat(c), i); } +inline unsigned get_attribute_semantic(unsigned char a) +{ return a>>3; } -VertexComponent make_indexed_component(VertexComponent, unsigned); +inline unsigned get_attribute_size(unsigned char a) +{ return (a&3)+1; } -inline unsigned get_component_type(unsigned char c) -{ return c>>2; } +DEPRECATED inline unsigned get_component_type(unsigned char c) +{ return get_attribute_semantic(c); } -inline unsigned get_component_size(unsigned char c) -{ return (c&3)+1; } +DEPRECATED inline unsigned get_component_size(unsigned char c) +{ return get_attribute_size(c); } -inline unsigned get_stride(const VertexFormat &f) +DEPRECATED inline unsigned get_stride(const VertexFormat &f) { return f.stride(); } -void operator>>(const LexicalConverter &, VertexComponent &); +void operator>>(const LexicalConverter &, VertexAttribute &); } // namespace GL } // namespace Msp