]> git.tdb.fi Git - libs/gl.git/blobdiff - source/primitivebuilder.cpp
Make the use of DevIL optional
[libs/gl.git] / source / primitivebuilder.cpp
diff --git a/source/primitivebuilder.cpp b/source/primitivebuilder.cpp
new file mode 100644 (file)
index 0000000..ca8f4f3
--- /dev/null
@@ -0,0 +1,60 @@
+/* $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