]> git.tdb.fi Git - r2c2.git/blobdiff - source/3d/layout.cpp
Use GL::Renderables and a Pipeline for rendering
[r2c2.git] / source / 3d / layout.cpp
index 633baa1957668a6fc77af6a6f39c0f2fb55f072c..1b54e4be7509dd487d519d31a14d827557bfb801 100644 (file)
@@ -29,8 +29,8 @@ Layout3D::Layout3D(Layout &l):
 
 Layout3D::~Layout3D()
 {
-       for(list<Track3D *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
-               delete *i;
+       while(!tracks.empty())
+               delete tracks.front();
 }
 
 void Layout3D::set_quality(unsigned q)
@@ -38,21 +38,16 @@ void Layout3D::set_quality(unsigned q)
        quality = q;
 }
 
-void Layout3D::render(bool endpoints) const
+void Layout3D::add_track(Track3D &t)
 {
-       GL::Texture::unbind();
-       glEnable(GL_DEPTH_TEST);
+       tracks.push_back(&t);
+}
 
-       for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
-               (*i)->render();
-
-       if(endpoints)
-       {
-               glDepthMask(false);
-               for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
-                       (*i)->render_endpoints();
-               glDepthMask(true);
-       }
+void Layout3D::remove_track(Track3D &t)
+{
+       list<Track3D *>::iterator i = find(tracks.begin(), tracks.end(), &t);
+       if(i!=tracks.end())
+               tracks.erase(i);
 }
 
 Track3D &Layout3D::get_track(const Track &t) const
@@ -60,7 +55,7 @@ Track3D &Layout3D::get_track(const Track &t) const
        for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
                if(&(*i)->get_track()==&t)
                        return **i;
-       
+
        throw KeyError("Unknown track");
 }
 
@@ -99,7 +94,7 @@ Track3D *Layout3D::pick_track(float x, float y, float size) const
 
        glPopMatrix();
 
-       render();
+       scene.render(0);
 
        glDisable(GL_CLIP_PLANE0);
        glDisable(GL_CLIP_PLANE1);
@@ -121,7 +116,7 @@ Track3D *Layout3D::pick_track(float x, float y, float size) const
 
 void Layout3D::track_added(Track &t)
 {
-       tracks.push_back(new Track3D(*this, t));
+       new Track3D(*this, t);
 }
 
 void Layout3D::track_removed(Track &t)
@@ -130,7 +125,6 @@ void Layout3D::track_removed(Track &t)
                if(&(*i)->get_track()==&t)
                {
                        delete *i;
-                       tracks.erase(i);
                        return;
                }
 }