]> git.tdb.fi Git - libs/gl.git/blobdiff - source/builders/grid.cpp
Use constructor delegation instead of init functions when possible
[libs/gl.git] / source / builders / grid.cpp
index d812a2c2558656212f086cffe96ef11564d2bc25..f452c438fa5f3932281e919ae9e0c615bcf9c788 100644 (file)
@@ -8,62 +8,32 @@ namespace Msp {
 namespace GL {
 
 GridBuilder::GridBuilder(float w, float h, unsigned u, unsigned v):
 namespace GL {
 
 GridBuilder::GridBuilder(float w, float h, unsigned u, unsigned v):
-       origin(-w/2, -h/2, 0),
-       side1(w, 0, 0),
-       side2(0, h, 0),
-       norm(0, 0, 1),
-       binorm(0, 1, 0),
-       u_div(u),
-       v_div(v)
-{
-       init(false);
-}
+       GridBuilder(Vector3(-w/2, -h/2, 0), Vector3(w, 0, 0), Vector3(0, h, 0), u, v)
+{ }
 
 GridBuilder::GridBuilder(const Vector3 &o, const Vector3 &s, unsigned u, unsigned v):
 
 GridBuilder::GridBuilder(const Vector3 &o, const Vector3 &s, unsigned u, unsigned v):
-       origin(o),
-       u_div(u),
-       v_div(v)
-{
-       if(abs(s.z)<abs(s.x) && abs(s.z)<abs(s.y))
-       {
-               side1 = Vector3(s.x, 0, 0);
-               side2 = Vector3(0, s.y, 0);
-       }
-       else if(abs(s.y)<abs(s.x))
-       {
-               side1 = Vector3(0, 0, s.z);
-               side2 = Vector3(s.x, 0, 0);
-       }
-       else
-       {
-               side1 = Vector3(0, s.y, 0);
-               side2 = Vector3(0, 0, s.z);
-       }
-       init(true);
-}
+       GridBuilder(o, get_side(s, 0), get_side(s, 1), u, v)
+{ }
 
 GridBuilder::GridBuilder(const Vector3 &o, const Vector3 &s1, const Vector3 &s2, unsigned u, unsigned v):
        origin(o),
        side1(s1),
        side2(s2),
 
 GridBuilder::GridBuilder(const Vector3 &o, const Vector3 &s1, const Vector3 &s2, unsigned u, unsigned v):
        origin(o),
        side1(s1),
        side2(s2),
-       u_div(u),
-       v_div(v)
+       u_div(max(u, 1U)),
+       v_div(max(v, 1U))
 {
 {
-       init(true);
+       norm = normalize(cross(side1, side2));
+       binorm = normalize(cross(norm, side1));
 }
 
 }
 
-void GridBuilder::init(bool compute_normals)
+Vector3 GridBuilder::get_side(const Vector3 &size, unsigned index)
 {
 {
-       if(u_div<1)
-               u_div = 1;
-       if(v_div<1)
-               v_div = 1;
-
-       if(compute_normals)
-       {
-               norm = normalize(cross(side1, side2));
-               binorm = normalize(cross(norm, side1));
-       }
+       if(!size.x)
+               return Vector3(0, (index==0 ? size.y : 0), (index==1 ? size.z : 0));
+       else if(!size.y)
+               return Vector3((index==0 ? size.x : 0), 0, (index==1 ? size.z : 0));
+       else
+               return Vector3((index==0 ? size.x : 0), (index==1 ? size.z : 0), 0);
 }
 
 void GridBuilder::build(PrimitiveBuilder &builder) const
 }
 
 void GridBuilder::build(PrimitiveBuilder &builder) const