X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fobject.cpp;h=b63434742b7ef8a7305a2bbcaed7e3e85a9ba98b;hb=c0b7d6ee4a7478f5aecb1504429ec1fc846d64ed;hp=067686d205cee62f8b117ce429c75f58c2e1b21a;hpb=d493917dbc215cd6ba3f8773a52a289d9f14380d;p=libs%2Fgl.git diff --git a/source/render/object.cpp b/source/render/object.cpp index 067686d2..b6343474 100644 --- a/source/render/object.cpp +++ b/source/render/object.cpp @@ -2,12 +2,9 @@ #include #include #include "error.h" -#include "material.h" #include "mesh.h" #include "object.h" #include "objectinstance.h" -#include "program.h" -#include "programdata.h" #include "renderer.h" #include "resourcemanager.h" #include "technique.h" @@ -17,7 +14,7 @@ using namespace std; namespace Msp { namespace GL { -Matrix Object::identity_matrix; +const Matrix Object::identity_matrix; Object::Object(): lods(1), @@ -76,12 +73,12 @@ void Object::set_mesh(unsigned i, const Mesh *m) void Object::update_bounding_sphere() { vector points; - for(vector::const_iterator i=lods.begin(); i!=lods.end(); ++i) + for(const LevelOfDetail &l: lods) { - if(!i->mesh || !i->mesh->is_loaded()) + if(!l.mesh || !l.mesh->is_loaded()) continue; - const VertexArray &vertices = i->mesh->get_vertices(); + const VertexArray &vertices = l.mesh->get_vertices(); int offset = vertices.get_format().offset(VERTEX3); bool three = true; @@ -133,8 +130,8 @@ const Technique *Object::get_technique(unsigned i) const void Object::render(Renderer &renderer, Tag tag) const { - const RenderPass *pass = get_pass(tag, 0); - if(!pass) + const RenderMethod *method = get_method(tag, 0); + if(!method) return; const Mesh *mesh = lods.front().mesh; @@ -142,7 +139,7 @@ void Object::render(Renderer &renderer, Tag tag) const throw logic_error("no mesh"); Renderer::Push push(renderer); - pass->apply(renderer); + method->apply(renderer); setup_render(renderer, tag); mesh->draw(renderer); @@ -152,8 +149,8 @@ void Object::render(Renderer &renderer, Tag tag) const void Object::render(Renderer &renderer, const ObjectInstance &inst, Tag tag) const { unsigned lod = min(inst.get_level_of_detail(renderer), lods.size()-1); - const RenderPass *pass = get_pass(tag, lod); - if(!pass) + const RenderMethod *method = get_method(tag, lod); + if(!method) return; const Mesh *mesh = lods[lod].mesh; @@ -161,7 +158,7 @@ void Object::render(Renderer &renderer, const ObjectInstance &inst, Tag tag) con throw logic_error("no mesh"); Renderer::Push push(renderer); - pass->apply(renderer); + method->apply(renderer); setup_render(renderer, tag); inst.setup_render(renderer, tag); @@ -170,12 +167,12 @@ void Object::render(Renderer &renderer, const ObjectInstance &inst, Tag tag) con finish_render(renderer, tag); } -const RenderPass *Object::get_pass(Tag tag, unsigned lod) const +const RenderMethod *Object::get_method(Tag tag, unsigned lod) const { const Technique *tech = lods[lod].technique; if(!tech) throw logic_error("no technique"); - return tech->find_pass(tag); + return tech->find_method(tag); } void Object::resource_loaded(Resource &res) @@ -191,19 +188,8 @@ void Object::resource_removed(Resource &res) } -Object::Loader::Loader(Object &o): - LodLoader(o, 0, 0) -{ - init(); -} - -Object::Loader::Loader(Object &o, Collection &c): - LodLoader(o, 0, &c) -{ - init(); -} - -void Object::Loader::init() +Object::Loader::Loader(Object &o, Collection *c): + LodLoader(o, 0, c) { add("bounding_sphere_hint", &Loader::bounding_sphere_hint); add("level_of_detail", &Loader::level_of_detail);