+/* $Id$
+
+This file is part of libmspgl
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#include "primitivebuilder.h"
+
+namespace Msp {
+namespace GL {
+
+PrimitiveBuilder::PrimitiveBuilder(VertexArray &a):
+ array(a),
+ in_batch(false)
+{ }
+
+void PrimitiveBuilder::begin(PrimitiveType t)
+{
+ if(in_batch)
+ throw InvalidState("begin() already called");
+
+ type=t;
+ in_batch=true;
+ builder=array.modify();
+
+ begin_();
+}
+
+void PrimitiveBuilder::end()
+{
+ if(in_batch)
+ throw InvalidState("end() called without begin()");
+
+ builder=0;
+ in_batch=false;
+
+ end_();
+}
+
+PrimitiveType PrimitiveBuilder::get_type() const
+{
+ if(!in_batch)
+ throw InvalidState("Not between begin() and end()");
+ return type;
+}
+
+void PrimitiveBuilder::vertex_(float x, float y, float z, float w)
+{
+ if(!in_batch)
+ throw InvalidState("Vertex specification not between begin() and end()");
+
+ builder->texcoord(ts, tt, tr,tq);
+ builder->color(cr, cg, cb, ca);
+ builder->normal(nx, ny, nz);
+ builder->vertex(x, y, z, w);
+}
+
+} // namespace GL
+} // namespace Msp