protected:
Matrix mtx;
- Vector3 nor;
- Color col;
- std::map<unsigned, Vector4> texc;
- std::map<unsigned, Vector4> attr;
+ std::vector<Vector4> attr;
public:
- VertexBuilder(): nor(0, 0, 1) { }
+ VertexBuilder() { normal(0, 0, 1); }
virtual ~VertexBuilder() { }
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_component_type(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);
- }
+ { attrib(get_component_type(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)
- {
- Vector4 tb = mtx*Vector4(b.x, b.y, b.z, 0);
- attrib(get_component_type(BINORMAL3), tb);
- }
+ { attrib(get_component_type(BINORMAL3), mtx*Vector4(b.x, b.y, b.z, 0)); }
void texcoord(float s)
{ texcoord(s, 0, 0, 1); }
{ multitexcoord(i, Vector4(s, t, r, q)); }
void multitexcoord(unsigned i, const Vector4 &t)
- { texc[i] = t; }
+ { attrib(get_component_type(TEXCOORD4)+i, t); }
void color(unsigned char r, unsigned char g, unsigned char b)
{ color(r, g, b, 255); }
{ color(Color(r, g, b, a)); }
void color(const Color &c)
- { col = c; }
+ { attrib(get_component_type(COLOR4_FLOAT), Vector4(c.r, c.g, c.b, c.a)); }
void attrib(unsigned i, float x)
{ attrib(i, x, 0, 0, 1); }
void attrib(unsigned i, float x, float y, float z, float w)
{ attrib(i, Vector4(x, y, z, w)); }
-
- void attrib(unsigned i, const Vector4 &a)
- { attr[i] = a; }
};
} // namespace GL