X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fvertexbuilder.h;h=55f914a31a24b7400b7efbe9b786d32940fa882c;hb=a40fc85277dba5c34402a0e703d038efd30cc57b;hp=49f0dcf5e38c89d69496bd6473b0027dee63ce8f;hpb=2fa1bb084e54af7134b44d3ee7512056e28de67e;p=libs%2Fgl.git diff --git a/source/vertexbuilder.h b/source/vertexbuilder.h index 49f0dcf5..55f914a3 100644 --- a/source/vertexbuilder.h +++ b/source/vertexbuilder.h @@ -21,8 +21,20 @@ data. Attributes can be read from protected member variables. */ class VertexBuilder { +public: + class PushMatrix + { + private: + VertexBuilder &bld; + Matrix mtx; + + public: + PushMatrix(VertexBuilder &b): bld(b), mtx(bld.mtx) { } + ~PushMatrix() { bld.mtx = mtx; } + }; + protected: - MatrixStack mtx; + Matrix mtx; Vector3 nor; Color col; std::map texc; @@ -40,10 +52,6 @@ public: { mtx *= m; } const Matrix &get_matrix() const - { return mtx.top(); } - - // Deprecated - MatrixStack &matrix() { return mtx; } void vertex(float x, float y) @@ -59,7 +67,7 @@ public: { vertex(Vector4(v.x, v.y, v.z, 1)); } void vertex(const Vector4 &v) - { vertex_(mtx.top()*v); } + { vertex_(mtx*v); } protected: virtual void vertex_(const Vector4 &) = 0; @@ -70,7 +78,7 @@ public: void normal(const Vector3 &n) { - Vector4 tn = mtx.top()*Vector4(n.x, n.y, n.z, 0); + Vector4 tn = mtx*Vector4(n.x, n.y, n.z, 0); nor = Vector3(tn.x, tn.y, tn.z); } @@ -79,7 +87,7 @@ public: void tangent(const Vector3 &t) { - Vector4 tt = mtx.top()*Vector4(t.x, t.y, t.z, 0); + Vector4 tt = mtx*Vector4(t.x, t.y, t.z, 0); attrib(get_component_type(TANGENT3), tt); } @@ -88,7 +96,7 @@ public: void binormal(const Vector3 &b) { - Vector4 tb = mtx.top()*Vector4(b.x, b.y, b.z, 0); + Vector4 tb = mtx*Vector4(b.x, b.y, b.z, 0); attrib(get_component_type(BINORMAL3), tb); }