X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fobject.cpp;fp=source%2Frender%2Fobject.cpp;h=e2e95a9b024d25b610d256ef8c6678d7bb53ff89;hb=e70662d7812464159f2e47f4bebb69d88f89ae93;hp=9a9f759ccf4b53a2c255617b01ade7e12cbc0b42;hpb=28d12c73b197a16f7635badc01e42375728fde85;p=libs%2Fgl.git diff --git a/source/render/object.cpp b/source/render/object.cpp index 9a9f759c..e2e95a9b 100644 --- a/source/render/object.cpp +++ b/source/render/object.cpp @@ -27,7 +27,21 @@ Object::Object(const Mesh *m, const Technique *t): set_technique(t); } -// TODO should have copy-c'tor to set watch on lod0 mesh if necessary +Object::Object(const Object &other): + lods(other.lods), + bounding_sphere(other.bounding_sphere) +{ + if(other.lod0_watched) + watch_lod0(); +} + +Object::Object(Object &&other): + lods(move(other.lods)), + bounding_sphere(move(other.bounding_sphere)) +{ + if(other.lod0_watched) + watch_lod0(); +} Object::~Object() { @@ -59,15 +73,20 @@ void Object::set_mesh(unsigned i, const Mesh *m) lod0_watched = false; if(i==0 && m) - if(ResourceManager *rm = m->get_manager()) - { - rm->observe_resource(*m, *this); - lod0_watched = true; - } + watch_lod0(); update_bounding_sphere(); } +void Object::watch_lod0() +{ + if(ResourceManager *rm = lods[0].mesh->get_manager()) + { + rm->observe_resource(*lods[0].mesh, *this); + lod0_watched = true; + } +} + void Object::update_bounding_sphere() { vector points;