X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Foccludedscene.cpp;h=644e380d15ab10a25917571fd29d61522040a99f;hp=bfe17349fd13ee836234c9297ec5476e6039d9f7;hb=HEAD;hpb=84e0e55710123e54617d342df852007f8b60af24 diff --git a/source/render/occludedscene.cpp b/source/render/occludedscene.cpp index bfe17349..cb37a60e 100644 --- a/source/render/occludedscene.cpp +++ b/source/render/occludedscene.cpp @@ -21,20 +21,20 @@ OccludedScene::OccludedScene(): void OccludedScene::add(Renderable &r) { - auto i = lower_bound(renderables, &r); - if(i==renderables.end() || *i!=&r) + auto i = lower_bound(content, &r); + if(i==content.end() || *i!=&r) { - renderables.insert(i, &r); + content.insert(i, &r); cache_dirty = true; } } void OccludedScene::remove(Renderable &r) { - auto i = lower_bound(renderables, &r); - if(i!=renderables.end() && *i==&r) + auto i = lower_bound(content, &r); + if(i!=content.end() && *i==&r) { - renderables.erase(i); + content.erase(i); cache_dirty = true; } } @@ -44,13 +44,13 @@ void OccludedScene::populate_cache() const if(!cache_dirty) return; - if(queries.get_size()renderable = r; for(; j!=occluded_cache.end(); ++j) { @@ -76,7 +76,7 @@ void OccludedScene::finish_frame() void OccludedScene::render(Renderer &renderer, Tag tag) const { - if(renderables.empty()) + if(content.empty()) return; populate_cache(); @@ -95,10 +95,9 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const float frustum_h = tan(camera->get_field_of_view()/2.0f)*2.0f; // Perform frustum culling and render any major occluders - bool use_frustum = setup_frustum(renderer); for(auto i=occluded_cache.begin(); (i!=occluded_cache.end() && i->renderable); ++i) { - i->in_frustum = (!use_frustum || !frustum_cull(*i->renderable)); + i->in_frustum = camera->is_in_frustum(*i->renderable); if(!i->in_frustum) continue; @@ -119,7 +118,7 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const } // Move all objects within the frustum to the beginning of the array - for(auto i=occluded_cache.begin(), j=i+renderables.size()-1; i!=j; ) + for(auto i=occluded_cache.begin(), j=i+content.size()-1; i!=j; ) { if(i->in_frustum) ++i; @@ -143,7 +142,7 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const { QueryPool::Activate activate_query(renderer, queries, i-occluded_cache.begin()); Renderer::Push push2(renderer); - renderer.transform(Matrix(*i->renderable->get_matrix()) + renderer.set_matrix(Matrix(*i->renderable->get_matrix()) .translate(i->bounding_sphere->get_center()) .scale(i->bounding_sphere->get_radius())); bounding_mesh.draw(renderer);