Sceneview
 All Classes Functions Variables Enumerations Enumerator Groups Pages
resource_manager.hpp
1 // Copyright [2015] Albert Huang
2 
3 #ifndef SCENEVIEW_RESOURCE_MANAGER_HPP__
4 #define SCENEVIEW_RESOURCE_MANAGER_HPP__
5 
6 #include <cstdint>
7 #include <map>
8 
9 #include <sceneview/font_resource.hpp>
10 #include <sceneview/geometry_resource.hpp>
11 #include <sceneview/material_resource.hpp>
12 #include <sceneview/shader_resource.hpp>
13 #include <sceneview/scene.hpp>
14 
15 namespace sv {
16 
17 class Scene;
18 
37  public:
38  typedef std::shared_ptr<ResourceManager> Ptr;
39 
40  static const QString kAutoName;
41 
42  public:
43  static Ptr Create();
44 
53  MaterialResource::Ptr MakeMaterial(const ShaderResource::Ptr& shader,
54  const QString& name = kAutoName);
55 
62  ShaderResource::Ptr MakeShader(const QString& name = kAutoName);
63 
70  GeometryResource::Ptr MakeGeometry(const QString& name = kAutoName);
71 
78  Scene::Ptr MakeScene(const QString& name = kAutoName);
79 
83  FontResource::Ptr Font(const QFont& qfont);
84 
90  MaterialResource::Ptr GetMaterial(const QString& name);
91 
97  ShaderResource::Ptr GetShader(const QString& name);
98 
104  GeometryResource::Ptr GetGeometry(const QString& name);
105 
109  void PrintStats();
110 
111  private:
112  typedef std::weak_ptr<MaterialResource> MaterialResourceWeakPtr;
113  typedef std::weak_ptr<ShaderResource> ShaderResourceWeakPtr;
114  typedef std::weak_ptr<GeometryResource> GeometryResourceWeakPtr;
115  typedef std::weak_ptr<Scene> SceneWeakPtr;
116  typedef std::weak_ptr<FontResource> FontResourceWeakPtr;
117 
118  ResourceManager();
119 
120  void Cleanup();
121 
122  QString AutogenerateName();
123  QString PickName(const QString& name);
124  bool NameExists(const QString& name);
125 
126  std::map<QString, MaterialResourceWeakPtr> materials_;
127  std::map<QString, ShaderResourceWeakPtr> shaders_;
128  std::map<QString, GeometryResourceWeakPtr> geometries_;
129  std::map<QString, SceneWeakPtr> scenes_;
130  std::map<QString, FontResourceWeakPtr> fonts_;
131 
132  int64_t name_counter_;
133 };
134 
135 } // namespace sv
136 
137 #endif // SCENEVIEW_RESOURCE_MANAGER_HPP__
ShaderResource::Ptr GetShader(const QString &name)
Retrieve the specified shader.
GeometryResource::Ptr GetGeometry(const QString &name)
Retrieve the specified geometry.
MaterialResource::Ptr MakeMaterial(const ShaderResource::Ptr &shader, const QString &name=kAutoName)
Create a new material.
GeometryResource::Ptr MakeGeometry(const QString &name=kAutoName)
Create a new geometry.
ShaderResource::Ptr MakeShader(const QString &name=kAutoName)
Create a new shader.
void PrintStats()
Debugging.
Central repository for resources.
Definition: resource_manager.hpp:36
MaterialResource::Ptr GetMaterial(const QString &name)
Retrieve the specified material.
Scene::Ptr MakeScene(const QString &name=kAutoName)
Create a new scene graph.
FontResource::Ptr Font(const QFont &qfont)
Retrieves a FontResource, creating one if needed.