X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fvertexbuilder.h;fp=source%2Fvertexbuilder.h;h=1b2d02d17726d60b4f6e023bf304aa2b74d98363;hp=0000000000000000000000000000000000000000;hb=85facfb688035b5bbc9a3a87d080582fbf34930b;hpb=fd1b14ee491dfd62881876afe007ac63301b422a diff --git a/source/vertexbuilder.h b/source/vertexbuilder.h new file mode 100644 index 00000000..1b2d02d1 --- /dev/null +++ b/source/vertexbuilder.h @@ -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