16 SCNLOAD_STAGE_IO = 0x4000,
17 SCNLOAD_STAGE_GL = 0x8000
30 // meshes objects and nodes are owned by Scene
31 std::vector<Mesh*> meshes;
32 std::vector<Object*> objects;
37 TextureSet *texset; // only owned by Scene if own_texset is true
40 explicit Scene(TextureSet *tset = 0);
43 Scene(const Scene &rhs) = delete;
44 Scene &operator =(const Scene &rhs) = delete;
48 bool load(const char *fname, unsigned int flags = 0);
50 // merge scn into this scene, leaving scn empty and safe to destroy
51 bool merge(Scene *scn);
53 void add_object(Object *obj);
54 bool remove_object(Object *obj);
55 bool have_object(Object *obj) const;
57 void add_mesh(Mesh *m);
58 bool remove_mesh(Mesh *m);
59 bool have_mesh(Mesh *m) const;
61 void add_node(SceneNode *n);
62 bool remove_node(SceneNode *n);
63 bool have_node(SceneNode *n) const;
65 /* find and remove all nodes whose names match the regexp
66 * XXX at the moment this has the effect of flattening the hierarchy in the
67 * result scene. If we ever need verbatim extraction of whole subtrees we'll
68 * need to change the algorithm.
70 Scene *extract_nodes(const char *qstr);
72 /* bake all node transformations to their respective meshes and make the
73 * node transformations identity.
74 * XXX this assumes no mesh is shared by two nodes.
78 void update(float dt);
82 class SceneSet : public DataSet<Scene*> {
84 static Scene *create_scene();
85 static bool load_scene(Scene *scn, const char *fname);
86 static bool done_scene(Scene *scn);
87 static void free_scene(Scene *scn);