X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuilders%2Fvertexbuilder.h;h=cfb4b31b46ba0d1ec003daac38ac6e57323d2175;hp=55f914a31a24b7400b7efbe9b786d32940fa882c;hb=a3cc9f4469153396c7ad0868f3cbb2d2f698d710;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266 diff --git a/source/builders/vertexbuilder.h b/source/builders/vertexbuilder.h index 55f914a3..cfb4b31b 100644 --- a/source/builders/vertexbuilder.h +++ b/source/builders/vertexbuilder.h @@ -35,13 +35,10 @@ public: protected: Matrix mtx; - Vector3 nor; - Color col; - std::map texc; - std::map attr; + std::vector attr; public: - VertexBuilder(): nor(0, 0, 1) { } + VertexBuilder() { normal(0, 0, 1); } virtual ~VertexBuilder() { } @@ -73,32 +70,24 @@ protected: virtual void vertex_(const Vector4 &) = 0; public: + void attrib(unsigned i, const Vector4 &v) + { + if(i>=attr.size()) + attr.resize(i+1); + attr[i] = v; + } + void normal(float x, float y, float z) { normal(Vector3(x, y, z)); } void normal(const Vector3 &n) - { - Vector4 tn = mtx*Vector4(n.x, n.y, n.z, 0); - nor = Vector3(tn.x, tn.y, tn.z); - } + { attrib(get_attribute_semantic(NORMAL3), mtx*Vector4(n.x, n.y, n.z, 0)); } void tangent(float x, float y, float z) { tangent(Vector3(x, y, z)); } void tangent(const Vector3 &t) - { - Vector4 tt = mtx*Vector4(t.x, t.y, t.z, 0); - attrib(get_component_type(TANGENT3), tt); - } - - void binormal(float x, float y, float z) - { binormal(Vector3(x, y, z)); } - - void binormal(const Vector3 &b) - { - Vector4 tb = mtx*Vector4(b.x, b.y, b.z, 0); - attrib(get_component_type(BINORMAL3), tb); - } + { attrib(get_attribute_semantic(TANGENT3), mtx*Vector4(t.x, t.y, t.z, 0)); } void texcoord(float s) { texcoord(s, 0, 0, 1); } @@ -128,7 +117,7 @@ public: { multitexcoord(i, Vector4(s, t, r, q)); } void multitexcoord(unsigned i, const Vector4 &t) - { texc[i] = t; } + { attrib(get_attribute_semantic(TEXCOORD4)+i, t); } void color(unsigned char r, unsigned char g, unsigned char b) { color(r, g, b, 255); } @@ -143,22 +132,46 @@ public: { color(Color(r, g, b, a)); } void color(const Color &c) - { col = c; } + { attrib(get_attribute_semantic(COLOR4_FLOAT), 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 attrib(unsigned i, float x) - { attrib(i, x, 0, 0, 1); } + void generic(unsigned i, float x) + { generic(i, x, 0, 0, 1); } - void attrib(unsigned i, float x, float y) - { attrib(i, x, y, 0, 1); } + void generic(unsigned i, float x, float y) + { generic(i, x, y, 0, 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) + { generic(i, x, y, z, 1); } - void attrib(unsigned i, float x, float y, float z, float w) - { attrib(i, Vector4(x, y, z, w)); } + void generic(unsigned i, float x, float y, float z, float w) + { generic(i, Vector4(x, y, z, w)); } - void attrib(unsigned i, const Vector4 &a) - { attr[i] = a; } + void generic(unsigned i, const Vector4 &a) + { attrib(get_attribute_semantic(GENERIC4)+i, a); } }; } // namespace GL