namespace Msp {
namespace GL {
-OccludedScene::OccludedScene(Resources &resources):
- bounding_mesh(resources.get<Mesh>("_occluder.mesh")),
- bounding_shader(resources.get<Program>("_occluder.glsl.shader")),
+OccludedScene::OccludedScene():
+ bounding_mesh(Resources::get_global().get<Mesh>("_occluder.mesh")),
+ bounding_shader(Resources::get_global().get<Program>("_occluder.glsl.shader")),
occluder_min_size(0.25f),
cache_dirty(false)
{
{
vector<unsigned> queries;
queries.reserve(occluded_cache.size());
- for(OccludedArray::iterator i=occluded_cache.begin(); i!=occluded_cache.end(); ++i)
- queries.push_back(i->query);
+ for(OccludedRenderable &o: occluded_cache)
+ queries.push_back(o.query);
glDeleteQueries(queries.size(), &queries[0]);
}
occluded_cache[old_size+i].query = new_queries[i];
}
- OccludedArray::iterator j = occluded_cache.begin();
- for(RenderableSet::iterator i=renderables.begin(); i!=renderables.end(); ++i, ++j)
- j->renderable = *i;
+ auto j = occluded_cache.begin();
+ for(Renderable *r: renderables)
+ j++->renderable = r;
for(; j!=occluded_cache.end(); ++j)
{
j->renderable = 0;
void OccludedScene::setup_frame(Renderer &renderer)
{
populate_cache();
- for(OccludedArray::const_iterator i=occluded_cache.begin(); i!=occluded_cache.end(); ++i)
- i->renderable->setup_frame(renderer);
+ for(const OccludedRenderable &o: occluded_cache)
+ o.renderable->setup_frame(renderer);
}
void OccludedScene::finish_frame()
{
- for(OccludedArray::const_iterator i=occluded_cache.begin(); i!=occluded_cache.end(); ++i)
- i->renderable->finish_frame();
+ for(const OccludedRenderable &o: occluded_cache)
+ o.renderable->finish_frame();
}
void OccludedScene::render(Renderer &renderer, Tag tag) const
const Camera *camera = renderer.get_camera();
if(!camera)
{
- for(OccludedArray::const_iterator i=occluded_cache.begin(); i!=occluded_cache.end(); ++i)
- renderer.render(*i->renderable, tag);
+ for(const OccludedRenderable &o: occluded_cache)
+ renderer.render(*o.renderable, tag);
return;
}
// Perform frustum culling and render any major occluders
bool use_frustum = setup_frustum(renderer);
- for(OccludedArray::iterator i=occluded_cache.begin(); (i!=occluded_cache.end() && i->renderable); ++i)
+ for(auto i=occluded_cache.begin(); (i!=occluded_cache.end() && i->renderable); ++i)
{
i->in_frustum = (!use_frustum || !frustum_cull(*i->renderable));
if(!i->in_frustum)
}
// Move all objects within the frustum to the beginning of the array
- for(OccludedArray::iterator i=occluded_cache.begin(), j=i+renderables.size()-1; i!=j; )
+ for(auto i=occluded_cache.begin(), j=i+renderables.size()-1; i!=j; )
{
if(i->in_frustum)
++i;
glDepthMask(false);
// Fire off the occlusion queries
- for(OccludedArray::const_iterator i=occluded_cache.begin(); (i!=occluded_cache.end() && i->in_frustum); ++i)
+ for(auto i=occluded_cache.begin(); (i!=occluded_cache.end() && i->in_frustum); ++i)
if(!i->occluder)
{
glBeginQuery(GL_ANY_SAMPLES_PASSED, i->query);
}
// Render anything that has a chance of being visible
- for(OccludedArray::const_iterator i=occluded_cache.begin(); (i!=occluded_cache.end() && i->in_frustum); ++i)
+ for(auto i=occluded_cache.begin(); (i!=occluded_cache.end() && i->in_frustum); ++i)
if(!i->occluder)
{
unsigned any_passed = 0;