X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Fscene.h;h=e55de1a84323529dfe4300c6ebec210d52c8664e;hp=6fb45d6102b9fc422f71ba360da33b2e5a87c926;hb=9813f8711628a0fbe786406e974dc33546dc9cee;hpb=ae45c0397e2cb8f0a01f2f31d01c95ff3870271e diff --git a/source/render/scene.h b/source/render/scene.h index 6fb45d61..e55de1a8 100644 --- a/source/render/scene.h +++ b/source/render/scene.h @@ -2,7 +2,7 @@ #define MSP_GL_SCENE_H_ #include -#include +#include #include #include "matrix.h" #include "renderable.h" @@ -39,37 +39,17 @@ protected: }; public: - class GenericLoader: public DataFile::Loader + class GenericLoader: public DataFile::DynamicObjectLoader { - private: - template - struct CreateScene - { - void operator()(const std::string &, GenericLoader &) const; - }; - - DataFile::Collection &coll; - Scene *scene; - Loader *scene_loader; - - static ActionMap shared_actions; + friend class Scene; public: - GenericLoader(DataFile::Collection &); - ~GenericLoader(); + GenericLoader(DataFile::Collection &c): DynamicObjectLoader(&c) { } - Scene *get_object() { Scene *s = scene; scene = 0; return s; } - private: - virtual void init_actions(); - - void type(const DataFile::Symbol &); - - friend class Scene; + protected: + virtual const TypeRegistry &get_type_registry() const { return get_scene_registry(); } }; -private: - typedef TypeRegistry SceneRegistry; - protected: mutable Matrix culling_matrix; mutable Vector4 frustum_edges[6]; @@ -92,7 +72,7 @@ public: template static void register_type(const std::string &); private: - static SceneRegistry &get_scene_registry(); + static GenericLoader::TypeRegistry &get_scene_registry(); }; template @@ -101,18 +81,6 @@ void Scene::register_type(const std::string &kw) get_scene_registry().register_type(kw); } -template -void Scene::GenericLoader::CreateScene::operator()(const std::string &, GenericLoader &ldr) const -{ - if(ldr.scene) - throw std::logic_error("Scene type was already specified"); - - T *scene = new T; - ldr.scene = scene; - ldr.scene_loader = new typename T::Loader(*scene, ldr.coll); - ldr.add_auxiliary_loader(*ldr.scene_loader); -} - } // namespace GL } // namespace Msp