X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Finstancescene.cpp;h=b533bae5fac75e843bf23604004e7169676a0513;hp=fef3e9697e602051248bfe35f827078eac8a4117;hb=bb162b9edd4b8c0e9faeed75da4148f5b9735450;hpb=802832425b02be7b3ccb7d585fe63f4b68b5275f diff --git a/source/instancescene.cpp b/source/instancescene.cpp index fef3e969..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,14 +22,14 @@ void InstanceScene::remove(const Renderable &r) } } -void InstanceScene::setup_frame() 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)->setup_frame(); + (*j)->setup_frame(renderer); } -void InstanceScene::finish_frame() const +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) @@ -38,11 +38,19 @@ void InstanceScene::finish_frame() const void InstanceScene::render(Renderer &renderer, const Tag &tag) const { - 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(renderer, **j)) + 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