render(get_pass(tag), &inst);
}
-void Object::render(const list<const ObjectInstance *> &insts, const Tag &tag) const
-{
- render(get_pass(tag), insts);
-}
-
void Object::setup_render(const ObjectPass &pass) const
{
if(!meshes[0])
{
setup_render(pass);
- unsigned lod=0;
- if(inst)
- {
- inst->setup_render(pass);
- lod=min(inst->get_level_of_detail(), meshes.size()-1);
- }
-
- meshes[lod]->draw();
-
if(inst)
- inst->finish_render(pass);
+ render_instance(pass, *inst);
+ else
+ meshes[0]->draw();
finish_render(pass);
}
-void Object::render(const ObjectPass &pass, const list<const ObjectInstance *> &insts) const
+void Object::render_instance(const ObjectPass &pass, const ObjectInstance &inst) const
{
- setup_render(pass);
-
- for(list<const ObjectInstance *>::const_iterator i=insts.begin(); i!=insts.end(); ++i)
- {
- (*i)->setup_render(pass);
-
- unsigned lod=min((*i)->get_level_of_detail(), meshes.size()-1);
- meshes[lod]->draw();
-
- (*i)->finish_render(pass);
- }
-
- finish_render(pass);
+ inst.setup_render(pass);
+ unsigned lod=min(inst.get_level_of_detail(), meshes.size()-1);
+ meshes[lod]->draw();
+ inst.finish_render(pass);
}