reference(FURTHEST)
{ }
-void ZSortedScene::add(const Renderable &r)
+void ZSortedScene::add(Renderable &r)
{
if(renderables.insert(&r).second && !sorted_cache.empty())
sorted_cache.push_back(&r);
}
-void ZSortedScene::remove(const Renderable &r)
+void ZSortedScene::remove(Renderable &r)
{
renderables.erase(&r);
sorted_cache.clear();
for(SortedArray::iterator i=sorted_cache.begin(); i!=sorted_cache.end(); ++i)
{
i->in_frustum = (!use_frustum || !frustum_cull(*i->renderable));
- if(i->in_frustum)
+ if(!i->in_frustum)
+ continue;
+
+ if(const Matrix *matrix = i->renderable->get_matrix())
{
- if(const Matrix *model_matrix = i->renderable->get_matrix())
- {
- if(const Geometry::BoundingSphere<float, 3> *bsphere = i->renderable->get_bounding_sphere())
- i->depth = dot(*model_matrix*bsphere->get_center()-camera_pos, look_dir)+bsphere->get_radius()*radius_factor;
- else
- i->depth = dot(*model_matrix*Vector3()-camera_pos, look_dir);
- i->depth *= sign;
- }
+ if(const Geometry::BoundingSphere<float, 3> *bsphere = i->renderable->get_bounding_sphere())
+ i->depth = dot(*matrix*bsphere->get_center()-camera_pos, look_dir)+bsphere->get_radius()*radius_factor;
else
- i->depth = 0;
+ i->depth = dot(*matrix*Vector3()-camera_pos, look_dir);
+ i->depth *= sign;
}
+ else
+ i->depth = 0;
}
for(SortedArray::iterator i=sorted_cache.begin(), j=i; i!=sorted_cache.end(); ++i)
}
-ZSortedScene::SortedRenderable::SortedRenderable(const Renderable *r):
+ZSortedScene::SortedRenderable::SortedRenderable(Renderable *r):
+ renderable(r),
in_frustum(false),
- depth(0.0f),
- renderable(r)
+ depth(0.0f)
{ }
} // namespace GL