- for(RenderableSet::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
- if(!use_frustum || !frustum_cull(**i))
+ 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)
+ continue;
+
+ if(const Matrix *matrix = i->renderable->get_matrix())
+ {
+ 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 = 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)
+ if(i->in_frustum)