]> git.tdb.fi Git - libs/gl.git/blobdiff - source/builders/vertexbuilder.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / builders / vertexbuilder.h
index 6c36057239f0a7f9d402d1bdf3fa48a7e5aa1e41..7fdc15bcab1212624ef1f9bd9885b94b23ed3606 100644 (file)
@@ -40,7 +40,7 @@ protected:
 public:
        VertexBuilder() { normal(0, 0, 1); }
 
-       virtual ~VertexBuilder() { }
+       virtual ~VertexBuilder() = default;
 
        void set_matrix(const Matrix &m)
        { mtx = m; }
@@ -61,7 +61,7 @@ public:
        { vertex(Vector4(x, y, z, w)); }
 
        void vertex(const Vector3 &v)
-       { vertex(Vector4(v.x, v.y, v.z, 1)); }
+       { vertex(compose(v, 1.0f)); }
 
        void vertex(const Vector4 &v)
        { vertex_(mtx*v); }
@@ -81,19 +81,13 @@ public:
        { normal(Vector3(x, y, z)); }
 
        void normal(const Vector3 &n)
-       { attrib(get_attribute_semantic(NORMAL3), mtx*Vector4(n.x, n.y, n.z, 0)); }
+       { attrib(get_attribute_semantic(NORMAL3), mtx*compose(n, 0.0f)); }
 
        void tangent(float x, float y, float z)
        { tangent(Vector3(x, y, z)); }
 
        void tangent(const Vector3 &t)
-       { attrib(get_attribute_semantic(TANGENT3), mtx*Vector4(t.x, t.y, t.z, 0)); }
-
-       void binormal(float x, float y, float z)
-       { binormal(Vector3(x, y, z)); }
-
-       void binormal(const Vector3 &b)
-       { attrib(get_attribute_semantic(BINORMAL3), mtx*Vector4(b.x, b.y, b.z, 0)); }
+       { attrib(get_attribute_semantic(TANGENT3), mtx*compose(t, 0.0f)); }
 
        void texcoord(float s)
        { texcoord(s, 0, 0, 1); }
@@ -138,19 +132,46 @@ public:
        { color(Color(r, g, b, a)); }
 
        void color(const Color &c)
-       { attrib(get_attribute_semantic(COLOR4_FLOAT), Vector4(c.r, c.g, c.b, c.a)); }
+       { attrib(get_attribute_semantic(COLOR4), Vector4(c.r, c.g, c.b, c.a)); }
+
+       void group(int g0)
+       { group(g0, 0, 0, 0); }
+
+       void group(int g0, int g1)
+       { group(g0, g1, 0, 0); }
+
+       void group(int g0, int g1, int g2)
+       { group(g0, g1, g2, 0); }
+
+       void group(int g0, int g1, int g2, int g3)
+       { attrib(get_attribute_semantic(GROUP4), Vector4(g0, g1, g2, g3)); }
+
+       void weight(float w0)
+       { weight(w0, 0, 0, 0); }
+
+       void weight(float w0, float w1)
+       { weight(w0, w1, 0, 0); }
+
+       void weight(float w0, float w1, float w2)
+       { weight(w0, w1, w2, 0); }
+
+       void weight(float w0, float w1, float w2, float w3)
+       { attrib(get_attribute_semantic(WEIGHT4), Vector4(w0, w1, w2, w3)); }
+
+       void generic(unsigned i, float x)
+       { generic(i, x, 0, 0, 1); }
 
-       void attrib(unsigned i, float x)
-       { attrib(i, x, 0, 0, 1); }
+       void generic(unsigned i, float x, float y)
+       { generic(i, x, y, 0, 1); }
 
-       void attrib(unsigned i, float x, float y)
-       { attrib(i, x, y, 0, 1); }
+       void generic(unsigned i, float x, float y, float z)
+       { generic(i, x, y, z, 1); }
 
-       void attrib(unsigned i, float x, float y, float z)
-       { attrib(i, x, y, z, 1); }
+       void generic(unsigned i, float x, float y, float z, float w)
+       { generic(i, Vector4(x, y, z, w)); }
 
-       void attrib(unsigned i, float x, float y, float z, float w)
-       { attrib(i, Vector4(x, y, z, w)); }
+       void generic(unsigned i, const Vector4 &a)
+       { attrib(get_attribute_semantic(GENERIC4)+i, a); }
 };
 
 } // namespace GL