X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fobject.h;h=4655695b355583d40598a7186eeab915c497d016;hb=2f09d68a0844d2838d116d93d3ecc69723b52f16;hp=0b53d63c6cb6871a58735668fcfca29418caa87f;hpb=f17794d55923d4fb4f63e9d082d8d84a735a04e8;p=libs%2Fgl.git diff --git a/source/object.h b/source/object.h index 0b53d63c..4655695b 100644 --- a/source/object.h +++ b/source/object.h @@ -31,10 +31,8 @@ similar objects. See class ObjectInstance. class Object: public Renderable { private: - std::vector meshes; - Technique *technique; - bool own_mesh:1; - bool own_technique:1; + std::vector > meshes; + RefPtr technique; public: class Loader: public DataFile::CollectionObjectLoader @@ -46,28 +44,33 @@ public: void init(); private: - void lod_mesh(unsigned, const std::string &); void mesh(); + void mesh(unsigned); void mesh(const std::string &); + void mesh(unsigned, const std::string &); void technique(); + void technique(const std::string &); }; Object(); ~Object(); - const Technique *get_technique() const { return technique; } + void set_mesh(const Mesh *m) { set_mesh(0, m); } + void set_mesh(unsigned, const Mesh *); + void set_technique(const Technique *); + const Technique *get_technique() const { return technique.get(); } /** Renders the object. A tag can be provided to render a non-default pass. */ - virtual void render(const Tag &tag=Tag()) const; + virtual void render(const Tag &tag = Tag()) const; /** Renders the object with an instance. The instance's hook functions are called before and after drawing the mesh. A tag may also be given to render a non-default pass. */ - virtual void render(const ObjectInstance &, const Tag &tag=Tag()) const; + virtual void render(const ObjectInstance &, const Tag &tag = Tag()) const; /** Renders multiple instances of the object in one go. This may improve @@ -76,13 +79,13 @@ public: mesh. */ template - void render(Iter begin, Iter end, const Tag &tag=Tag()) const + void render(Iter begin, Iter end, const Tag &tag = Tag()) const { - const RenderPass *pass=get_pass(tag); + const RenderPass *pass = get_pass(tag); if(!pass) return; - Bind bind(*pass); + Bind bind(pass); for(Iter i=begin; i!=end; ++i) render_instance(**i, tag); }