X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fobject.cpp;h=1852f91b50222ead401dfa177605c31d9d1ee21b;hp=2423fcdab3fa353c47639484953e07cef1a68a5f;hb=HEAD;hpb=745b3030d7fa32c1f6be29548f978af640eb4021 diff --git a/source/object.cpp b/source/object.cpp deleted file mode 100644 index 2423fcda..00000000 --- a/source/object.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* $Id$ - -This file is part of libmspgl -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - -#include -#include -#include "except.h" -#include "material.h" -#include "mesh.h" -#include "object.h" -#include "objectinstance.h" -#include "program.h" -#include "programdata.h" -#include "technique.h" -#include "texture.h" -#include "texunit.h" - -using namespace std; - -namespace Msp { -namespace GL { - -Object::Object(): - meshes(1), - technique(0), - own_mesh(false), - own_technique(false) -{ } - -Object::~Object() -{ - if(own_technique) - delete technique; - if(own_mesh) - delete meshes[0]; -} - -void Object::render(const Tag &tag) const -{ - const RenderPass *pass=get_pass(tag); - if(!pass) - return; - - Bind bind(*pass); - meshes[0]->draw(); -} - -void Object::render(const ObjectInstance &inst, const Tag &tag) const -{ - const RenderPass *pass=get_pass(tag); - if(!pass) - return; - - Bind bind(*pass); - render_instance(inst, tag); - meshes[0]->draw(); -} - -const RenderPass *Object::get_pass(const Tag &tag) const -{ - if(!technique->has_pass(tag)) - return 0; - return &technique->get_pass(tag); -} - -void Object::render_instance(const ObjectInstance &inst, const Tag &tag) const -{ - inst.setup_render(tag); - unsigned lod=min(inst.get_level_of_detail(), meshes.size()-1); - meshes[lod]->draw(); - inst.finish_render(tag); -} - - -Object::Loader::Loader(Object &o): - DataFile::CollectionObjectLoader(o, 0) -{ - init(); -} - -Object::Loader::Loader(Object &o, Collection &c): - DataFile::CollectionObjectLoader(o, &c) -{ - init(); -} - -void Object::Loader::init() -{ - allow_pointer_reload=false; - - add("lod_mesh", &Loader::lod_mesh); - add("mesh", static_cast(&Loader::mesh)); - add("mesh", static_cast(&Loader::mesh)); - add("technique", &Loader::technique); - add("technique", &Object::technique); -} - -void Object::Loader::lod_mesh(unsigned l, const string &n) -{ - obj.meshes.resize(l+1, 0); - obj.meshes[l]=get_collection().get(n); -} - -void Object::Loader::mesh() -{ - if(obj.meshes[0]) - throw InvalidState("A mesh is already loaded"); - - RefPtr msh=new Mesh; - load_sub(*msh); - obj.meshes[0]=msh.release(); - obj.own_mesh=true; -} - -void Object::Loader::mesh(const std::string &n) -{ - if(obj.meshes[0]) - throw InvalidState("A mesh is already loaded"); - - obj.meshes[0]=get_collection().get(n); -} - -void Object::Loader::technique() -{ - RefPtr tech=new Technique; - if(coll) - load_sub(*tech, get_collection()); - else - load_sub(*tech); - obj.technique=tech.release(); - obj.own_technique=true; -} - -} // namespace GL -} // namespace Msp