namespace Msp {
namespace GL {
+Matrix Object::identity_matrix;
+
Object::Object():
lods(1),
lod0_watched(false)
set_technique(t);
}
+// TODO should have copy-c'tor to set watch on lod0 mesh if necessary
+
Object::~Object()
{
if(lods[0].mesh && lod0_watched)
if(ResourceManager *rm = lods[0].mesh->get_manager())
- rm->unwatch_resource(*lods[0].mesh, *this);
+ rm->unobserve_resource(*lods[0].mesh, *this);
}
Object::LevelOfDetail &Object::get_lod(unsigned i, const char *caller)
RefPtr<const Mesh> &ptr = get_lod(i, "Object::set_mesh").mesh;
if(i==0 && ptr && lod0_watched)
if(ResourceManager *rm = ptr->get_manager())
- rm->unwatch_resource(*ptr, *this);
+ rm->unobserve_resource(*ptr, *this);
ptr = m;
ptr.keep();
lod0_watched = false;
if(i==0 && m)
if(ResourceManager *rm = m->get_manager())
{
- rm->watch_resource(*m, *this);
+ rm->observe_resource(*m, *this);
lod0_watched = true;
}
if(!pass)
return;
+ const Mesh *mesh = lods.front().mesh.get();
+ if (!mesh)
+ throw logic_error("no mesh");
+
Renderer::Push push(renderer);
pass->apply(renderer);
setup_render(renderer, tag);
- lods.front().mesh->draw(renderer);
+ mesh->draw(renderer);
finish_render(renderer, tag);
}
if(!pass)
return;
+ const Mesh *mesh = lods[lod].mesh.get();
+ if (!mesh)
+ throw logic_error("no mesh");
+
Renderer::Push push(renderer);
pass->apply(renderer);
setup_render(renderer, tag);
inst.setup_render(renderer, tag);
- lods[lod].mesh->draw(renderer);
+ mesh->draw(renderer);
inst.finish_render(renderer, tag);
finish_render(renderer, tag);
}
const Technique *tech = lods[lod].technique.get();
if(!tech)
throw logic_error("no technique");
- if(!tech->has_pass(tag))
- return 0;
- return &tech->get_pass(tag);
+ return tech->find_pass(tag);
}
void Object::resource_loaded(Resource &res)