X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Finstancescene.cpp;h=b533bae5fac75e843bf23604004e7169676a0513;hp=ffbfa558f42e4bf2ad35f799579c2b438544e91d;hb=9d1fa012a23693768bbe287371e97751c03acc50;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8 diff --git a/source/instancescene.cpp b/source/instancescene.cpp index ffbfa558..b533bae5 100644 --- a/source/instancescene.cpp +++ b/source/instancescene.cpp @@ -6,12 +6,12 @@ namespace Msp { namespace GL { -void InstanceScene::add(const Renderable &r) +void InstanceScene::add(Renderable &r) { renderables[r.get_instance_key()].insert(&r); } -void InstanceScene::remove(const Renderable &r) +void InstanceScene::remove(Renderable &r) { InstanceMap::iterator i = renderables.find(r.get_instance_key()); if(i!=renderables.end()) @@ -22,11 +22,35 @@ void InstanceScene::remove(const Renderable &r) } } -void InstanceScene::render(Renderer &renderer, const Tag &tag) const +void InstanceScene::setup_frame(Renderer &renderer) { for(InstanceMap::const_iterator i=renderables.begin(); i!=renderables.end(); ++i) for(RenderableSet::const_iterator j=i->second.begin(); j!=i->second.end(); ++j) - (*j)->render(renderer, tag); + (*j)->setup_frame(renderer); +} + +void InstanceScene::finish_frame() +{ + for(InstanceMap::const_iterator i=renderables.begin(); i!=renderables.end(); ++i) + for(RenderableSet::const_iterator j=i->second.begin(); j!=i->second.end(); ++j) + (*j)->finish_frame(); +} + +void InstanceScene::render(Renderer &renderer, const Tag &tag) const +{ + if(setup_frustum(renderer)) + { + for(InstanceMap::const_iterator i=renderables.begin(); i!=renderables.end(); ++i) + for(RenderableSet::const_iterator j=i->second.begin(); j!=i->second.end(); ++j) + if(!frustum_cull(**j)) + renderer.render(**j, tag); + } + else + { + for(InstanceMap::const_iterator i=renderables.begin(); i!=renderables.end(); ++i) + for(RenderableSet::const_iterator j=i->second.begin(); j!=i->second.end(); ++j) + renderer.render(**j, tag); + } } } // namespace GL