]> git.tdb.fi Git - libs/gl.git/blobdiff - source/vertexbuilder.h
Move VertexFormat and VertexArrayBuilder to their own files
[libs/gl.git] / source / vertexbuilder.h
diff --git a/source/vertexbuilder.h b/source/vertexbuilder.h
new file mode 100644 (file)
index 0000000..1b2d02d
--- /dev/null
@@ -0,0 +1,54 @@
+/* $Id$
+
+This file is part of libmspgl
+Copyright © 2007  Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+
+#ifndef MSP_GL_VERTEXBUILDER_H_
+#define MSP_GL_VERTEXBUILDER_H_
+
+#include "types.h"
+
+namespace Msp {
+namespace GL {
+
+/**
+Base class for classes that build vertices from a series of function calls.
+The operating model closely follows that of OpenGL immediate mode: vertex
+attributes can be specified at any time, and when a vertex() function is
+called, a vertex is created with the active attribute values.
+
+A derived class must overload the 4-argument vertex_() function to process the
+data.  Attributes can be read from protected member variables.
+*/
+class VertexBuilder
+{
+public:
+       VertexBuilder();
+       virtual ~VertexBuilder() { }
+
+       void vertex(float x, float y)                     { vertex(x, y, 0, 1); }
+       void vertex(float x, float y, float z)            { vertex(x, y, z, 1); }
+       void vertex(float x, float y, float z, float w)   { vertex_(x, y, z, w); }
+       void normal(float x, float y, float z)            { nx=x; ny=y; nz=z; }
+       void texcoord(float s)                            { texcoord(s, 0, 0, 1); }
+       void texcoord(float s, float t)                   { texcoord(s, t, 0, 1); }
+       void texcoord(float s, float t, float r)          { texcoord(s, t, r, 1); }
+       void texcoord(float s, float t, float r, float q) { ts=s; tt=t; tr=r; tq=q; }
+       void color(ubyte r, ubyte g, ubyte b)             { color(r, g, b, 255); }
+       void color(ubyte r, ubyte g, ubyte b, ubyte a)    { color(r/255.f, g/255.f, b/255.f, a/255.f); }
+       void color(float r, float g, float b)             { color(r, g, b, 1); }
+       void color(float r, float g, float b, float a)    { cr=r; cg=g; cb=b; ca=a; }
+protected:
+       float cr, cg, cb, ca;  // Color
+       float ts, tt, tr, tq;  // TexCoord
+       float nx, ny, nz;     // Normal
+
+       virtual void vertex_(float, float, float, float) =0;
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif