X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fvertexformat.h;h=4c343c99e60f2def0d13571213d71da5ddef132b;hb=ccbfdfa0d9d796244b1ecc0fa3faa2c50304811b;hp=fb47484b35940b7e873b6d2586d333df0edda802;hpb=ba5c731b8aa6430bb10e38848d42d8bfb59694a6;p=libs%2Fgl.git diff --git a/source/vertexformat.h b/source/vertexformat.h index fb47484b..4c343c99 100644 --- a/source/vertexformat.h +++ b/source/vertexformat.h @@ -6,20 +6,25 @@ 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 = 6, - COLOR4_UBYTE = 8, - COLOR3_FLOAT = 10, + NORMAL3 = 10, + COLOR4_UBYTE = 12, + COLOR3_FLOAT = 14, COLOR4_FLOAT, - TEXCOORD1 = 12, + TANGENT3 = 18, + BINORMAL3 = 22, + TEXCOORD1 = 32, TEXCOORD2, TEXCOORD3, TEXCOORD4, - ATTRIB1 = 44, + ATTRIB1 = 64, ATTRIB2, ATTRIB3, ATTRIB4 @@ -44,7 +49,7 @@ public: 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, unsigned = 0) const; + int offset(VertexComponent) const; }; inline VertexFormat operator,(VertexComponent c1, VertexComponent c2) @@ -53,6 +58,8 @@ inline VertexFormat operator,(VertexComponent c1, VertexComponent 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; } @@ -63,7 +70,6 @@ inline unsigned get_stride(const VertexFormat &f) { return f.stride(); } void operator>>(const LexicalConverter &, VertexComponent &); -void operator>>(const LexicalConverter &, VertexFormat &); } // namespace GL } // namespace Msp