void Stage::set_partitioner(AvailablePartitioner partitioner) { switch(partitioner) { case PARTITIONER_NULL: partitioner_ = Partitioner::ptr(new NullPartitioner(*this)); break; case PARTITIONER_OCTREE: partitioner_ = Partitioner::ptr(new OctreePartitioner(*this)); break; default: { throw std::logic_error("Invalid partitioner type specified"); } } assert(partitioner_); //Keep the partitioner updated with new meshes and lights signal_actor_created().connect(std::bind(&Partitioner::add_actor, partitioner_.get(), std::placeholders::_1)); signal_actor_destroyed().connect(std::bind(&Partitioner::remove_actor, partitioner_.get(), std::placeholders::_1)); signal_light_created().connect(std::bind(&Partitioner::add_light, partitioner_.get(), std::placeholders::_1)); signal_light_destroyed().connect(std::bind(&Partitioner::remove_light, partitioner_.get(), std::placeholders::_1)); signal_particle_system_created().connect(std::bind(&Partitioner::add_particle_system, partitioner_.get(), std::placeholders::_1)); signal_particle_system_destroyed().connect(std::bind(&Partitioner::remove_particle_system, partitioner_.get(), std::placeholders::_1)); }
void Stage::set_partitioner(Partitioner::ptr partitioner) { assert(partitioner); partitioner_ = partitioner; assert(partitioner_); //Keep the partitioner updated with new meshes and lights signal_actor_created().connect(sigc::mem_fun(partitioner_.get(), &Partitioner::add_actor)); signal_actor_destroyed().connect(sigc::mem_fun(partitioner_.get(), &Partitioner::remove_actor)); signal_light_created().connect(sigc::mem_fun(partitioner_.get(), &Partitioner::add_light)); signal_light_destroyed().connect(sigc::mem_fun(partitioner_.get(), &Partitioner::remove_light)); }