]> git.tdb.fi Git - libs/gl.git/blobdiff - source/vertexbuilder.h
Add a utility class for switching renderables
[libs/gl.git] / source / vertexbuilder.h
index 764fef500ab0108eae10a10b815eac5be6a06598..49f0dcf5e38c89d69496bd6473b0027dee63ce8f 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007, 2009-2010  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_GL_VERTEXBUILDER_H_
 #define MSP_GL_VERTEXBUILDER_H_
 
@@ -12,6 +5,7 @@ Distributed under the LGPL
 #include "color.h"
 #include "matrix.h"
 #include "vector.h"
+#include "vertexformat.h"
 
 namespace Msp {
 namespace GL {
@@ -39,6 +33,16 @@ public:
 
        virtual ~VertexBuilder() { }
 
+       void set_matrix(const Matrix &m)
+       { mtx = m; }
+
+       void transform(const Matrix &m)
+       { mtx *= m; }
+
+       const Matrix &get_matrix() const
+       { return mtx.top(); }
+
+       // Deprecated
        MatrixStack &matrix()
        { return mtx; }
 
@@ -51,6 +55,9 @@ public:
        void vertex(float x, float y, float z, float w)
        { vertex(Vector4(x, y, z, w)); }
 
+       void vertex(const Vector3 &v)
+       { vertex(Vector4(v.x, v.y, v.z, 1)); }
+
        void vertex(const Vector4 &v)
        { vertex_(mtx.top()*v); }
 
@@ -67,6 +74,24 @@ public:
                nor = Vector3(tn.x, tn.y, tn.z);
        }
 
+       void tangent(float x, float y, float z)
+       { tangent(Vector3(x, y, z)); }
+
+       void tangent(const Vector3 &t)
+       {
+               Vector4 tt = mtx.top()*Vector4(t.x, t.y, t.z, 0);
+               attrib(get_component_type(TANGENT3), tt);
+       }
+
+       void binormal(float x, float y, float z)
+       { binormal(Vector3(x, y, z)); }
+
+       void binormal(const Vector3 &b)
+       {
+               Vector4 tb = mtx.top()*Vector4(b.x, b.y, b.z, 0);
+               attrib(get_component_type(BINORMAL3), tb);
+       }
+
        void texcoord(float s)
        { texcoord(s, 0, 0, 1); }