X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Finstancescene.cpp;h=b533bae5fac75e843bf23604004e7169676a0513;hp=7b0979c8f5c0923d523e09a614a5acd977914fc9;hb=e598e9d8dacad73b7ee1688e2be738e94b07b9fa;hpb=db498c7e634fa999cf4b4a8b67c49813009b1790 diff --git a/source/instancescene.cpp b/source/instancescene.cpp index 7b0979c8..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,9 +38,19 @@ void InstanceScene::finish_frame() const void InstanceScene::render(Renderer &renderer, const Tag &tag) const { - 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); + 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