namespace Msp {
namespace GL {
-thread_local Scene::ContentMap *Scene::named_content = nullptr;
-
Scene::GenericLoader::TypeRegistry &Scene::get_scene_registry()
{
static Scene::GenericLoader::TypeRegistry registry;
return registry;
}
+Scene::ContentMap *&Scene::get_named_content_ptr()
+{
+ static thread_local ContentMap *named_content = nullptr;
+ return named_content;
+}
+
Scene::Loader::Loader(Scene &s, Collection &c, ContentMap *m):
DataFile::CollectionObjectLoader<Scene>(s, &c),
void Scene::GenericLoader::prepare()
{
- saved_content = named_content;
- named_content = content;
+ saved_content = get_named_content_ptr();
+ get_named_content_ptr() = content;
}
void Scene::GenericLoader::finish(bool)
{
- named_content = saved_content;
+ get_named_content_ptr() = saved_content;
}
} // namespace GL
unsigned inline_counter = 0;
public:
- Loader(Scene &s, Collection &c): Loader(s, c, named_content) { }
+ Loader(Scene &s, Collection &c): Loader(s, c, get_named_content_ptr()) { }
Loader(Scene &s, Collection &c, ContentMap &m) : Loader(s, c, &m) { }
private:
Loader(Scene &, Collection &, ContentMap *);
};
public:
- class GenericLoader: public DataFile::DynamicObjectLoader<Scene>
+ class MSPGL_API GenericLoader: public DataFile::DynamicObjectLoader<Scene>
{
friend class Scene;
ContentMap *saved_content = nullptr;
public:
- GenericLoader(DataFile::Collection &c): DynamicObjectLoader(&c), content(named_content) { }
+ GenericLoader(DataFile::Collection &c): DynamicObjectLoader(&c), content(get_named_content_ptr()) { }
GenericLoader(DataFile::Collection &c, ContentMap &m): DynamicObjectLoader(&c), content(&m) { }
protected:
void finish(bool) override;
};
-private:
- static thread_local ContentMap *named_content;
-
protected:
Scene() = default;
public:
static void register_type(const std::string &);
private:
static GenericLoader::TypeRegistry &get_scene_registry();
+ static ContentMap *&get_named_content_ptr();
};
template<typename T>