You.i Engine
YiAssetManager.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_ASSET_MANAGER_H_
3 #define _YI_ASSET_MANAGER_H_
4 
5 #include "asset/YiAsset.h"
9 #include "renderer/YiGPUObject.h"
11 #include "utility/YiString.h"
13 
15 struct CYIEmbeddedShader;
16 
17 #ifndef YI_USE_CASE_INSENSITIVE_ASSET_LOCATING
18 
23  #define YI_USE_CASE_INSENSITIVE_ASSET_LOCATING YI_UWP && YI_XBOX_ONE
24 #endif //YI_USE_CASE_INSENSITIVE_ASSET_LOCATING
25 
44 {
45 public:
49  static const CYIString YI_VSHADER_3D;
99  friend class CYIAsset;
100 
101  CYIAssetManager();
102  virtual ~CYIAssetManager();
103 
107  void AddCacheStrategy(std::unique_ptr<CYIAssetCacheStrategy> pStrategy);
108 
116  bool AddAsset(const std::shared_ptr<CYIAsset> &pAsset);
117 
121  void ExecuteCacheStrategies();
122 
126  void DumpAssetList() const;
127 
131  std::vector<std::shared_ptr<CYIAsset>> GetAssets() const;
132 
137  std::shared_ptr<CYIAsset> GetAsset(const CYIString &name);
138 
143  std::shared_ptr<CYIAsset> GetAssetFromPath(const CYIString &path);
144 
152  std::shared_ptr<CYIRemoteAssetCatalog> GetRemoteAssetCatalog(uint64_t uCatalogID) const;
153 
159  std::vector<std::shared_ptr<CYIRemoteAssetCatalog>> GetRemoteAssetCatalogs() const;
160 
166 
170  void LoadShaders();
171 
175  void RemoveAllAssets();
176 
180  void RemoveAsset(const std::shared_ptr<CYIAsset> &pAsset);
181 
185  void RemoveAssetsOfType(const CYIRuntimeTypeInfo &assetType);
186 
191  std::unique_ptr<CYIAssetCacheStrategy> RemoveCacheStrategy(const CYIAssetCacheStrategy *pStrategy);
192 
197  void RestoreHardwareAssets();
198 
202  bool IsSystemAsset(const std::shared_ptr<const CYIAsset> &pAsset);
203 
204 private:
205  typedef std::map<ssize_t, std::weak_ptr<CYIAsset>> AssetMap;
206  typedef AssetMap::iterator AssetMapIterator;
207  typedef AssetMap::const_iterator AssetMapConstIterator;
208 
209  typedef std::map<ssize_t, std::shared_ptr<CYIAsset>> SystemAssetMap;
210  typedef SystemAssetMap::iterator SystemAssetMapIterator;
211  typedef SystemAssetMap::const_iterator SystemAssetMapConstIterator;
212 
213 #if YI_USE_CASE_INSENSITIVE_ASSET_LOCATING
214  typedef std::map<CYIString, std::weak_ptr<CYIAsset>, CYICaseInsensitiveLessThanComparator> AssetStringMap;
215 #else
216  typedef std::map<CYIString, std::weak_ptr<CYIAsset>> AssetStringMap;
217 #endif
218 
219  typedef AssetStringMap::iterator AssetStringMapIterator;
220  typedef AssetStringMap::const_iterator AssetStringMapConstIterator;
221 
222  ssize_t GenerateNewID();
223 
224  bool RenameAssetInNamedAssetsMap(const CYIString &oldName, const CYIString &newName, ssize_t nID);
225 
226  void AddAssetToMap(const std::shared_ptr<CYIAsset> &pAsset);
227 
228  // utility functions for shader program assets created during AssetManager construction
229  std::shared_ptr<CYIAssetShaderProgram> AddAssetShaderProgram(const CYIString &shaderProgramName,
230  const CYIString &vertexShaderName,
231  const CYIEmbeddedShader &vertexShaderSource,
232  const CYIString &fragmentShaderName,
233  const CYIEmbeddedShader &fragmentShaderSource);
234 
235  std::shared_ptr<CYIAssetShaderObject> AddAssetShaderObject(CYIAssetShaderObject::SHADER_TYPE shaderType,
236  const CYIString &shaderName,
237  const CYIEmbeddedShader &shaderSource);
238 
239  void AddBuiltInTextureAssets();
240  void AddAssetTexturesFromRawImages();
241 
242  mutable CYIRecursiveMutex m_Mutex;
243  AssetMap m_Assets;
244  SystemAssetMap m_SystemAssets;
245  AssetStringMap m_NamedAssets;
246  AssetStringMap m_AssetLocations;
247  std::list<std::unique_ptr<CYIAssetCacheStrategy>> m_CacheStrategyList;
248  std::map<uint64_t, std::weak_ptr<CYIRemoteAssetCatalog>> m_AssetCatalogs;
249  ssize_t m_NextID;
250 
252 };
253 
258 #endif // _YI_ASSET_MANAGER_H_
static const CYIString YI_PROGRAM_3D_BGR
Definition: YiAssetManager.h:51
static const CYIString YI_VSHADER_2D_NANOVG
Definition: YiAssetManager.h:95
static const CYIString YI_PROGRAM_3D_EFFECT_TINT_FLIP_COPY
Definition: YiAssetManager.h:91
static const CYIString YI_PROGRAM_3D_TEXT
Definition: YiAssetManager.h:65
An asset representing remote asset catalogs.
Definition: YiRemoteAssetCatalog.h:30
void RemoveAsset(const std::shared_ptr< CYIAsset > &pAsset)
#define YI_DISALLOW_COPY_AND_ASSIGN(TypeName)
Delete the copy constructor and assignment operator (and consequently the move constructor as well) ...
Definition: YiPredef.h:114
static const CYIString YI_VSHADER_3D_EFFECT_BLUR_V
Definition: YiAssetManager.h:80
std::shared_ptr< CYIRemoteAssetCatalog > GetRemoteAssetCatalog(uint64_t uCatalogID) const
void ExecuteCacheStrategies()
bool IsSystemAsset(const std::shared_ptr< const CYIAsset > &pAsset)
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
static const CYIString YI_PROGRAM_VERTEX_COLOR
Definition: YiAssetManager.h:74
static const CYIString YI_FSHADER_VERTEX_COLOR
Definition: YiAssetManager.h:73
static const CYIString YI_FSHADER_3D_EFFECT_BLUR_V
Definition: YiAssetManager.h:81
bool AddAsset(const std::shared_ptr< CYIAsset > &pAsset)
static const CYIString YI_SMALL_CROSSHAIR_TEXTURE
Definition: YiAssetManager.h:76
Definition: YiStringUtilities.h:35
static const CYIString YI_FSHADER_3D_EFFECT_FLIP_COPY
Definition: YiAssetManager.h:84
static const CYIString YI_FSHADER_2D_GEOMETRY_BATCH
Definition: YiAssetManager.h:93
static const CYIString YI_FSHADER_3D_EFFECT_TINT
Definition: YiAssetManager.h:87
Definition: YiRecursiveMutex.h:15
static const CYIString YI_PROGRAM_3D_RGB
Definition: YiAssetManager.h:53
static const CYIString YI_FSHADER_SDF_TEXT
Definition: YiAssetManager.h:67
std::shared_ptr< CYIAsset > GetAssetFromPath(const CYIString &path)
static const CYIString YI_VSHADER_3D_EFFECT_TINT_FLIP_COPY
Definition: YiAssetManager.h:89
static const CYIString YI_NORMALIZED_QUAD_VBO
Definition: YiAssetManager.h:46
static const CYIString YI_VSHADER_3D
Definition: YiAssetManager.h:49
static const CYIString YI_FSHADER_3D_YUV
Definition: YiAssetManager.h:55
static const CYIString YI_VSHADER_3D_EFFECT_TINT
Definition: YiAssetManager.h:86
static const CYIString YI_PROGRAM_3D_EFFECT_BLUR_H
Definition: YiAssetManager.h:79
static const CYIString YI_PROGRAM_3D_EFFECT_FLIP_COPY
Definition: YiAssetManager.h:85
std::vector< std::shared_ptr< CYIRemoteAssetCatalog > > GetRemoteAssetCatalogs() const
Base class for an asset caching strategy. Specializations of this class could apply one of more algor...
Definition: YiAssetCacheStrategy.h:18
static const CYIString YI_VSHADER_3D_TEXT
Definition: YiAssetManager.h:63
SHADER_TYPE
Definition: YiAssetShaderObject.h:25
void RestoreHardwareAssets()
static const CYIString YI_CHECKERBOARD_TEXTURE
Definition: YiAssetManager.h:60
static const CYIString YI_PROGRAM_3D_YUV_SEPARATE
Definition: YiAssetManager.h:59
static const CYIString YI_VSHADER_VERTEX_COLOR
Definition: YiAssetManager.h:72
static const CYIString YI_PROGRAM_SDF_APPROX_TEXT
Definition: YiAssetManager.h:71
void RemoveAllAssets()
static const CYIString YI_PROGRAM_3D_EFFECT_TINT
Definition: YiAssetManager.h:88
std::unique_ptr< CYIAssetCacheStrategy > RemoveCacheStrategy(const CYIAssetCacheStrategy *pStrategy)
void AddCacheStrategy(std::unique_ptr< CYIAssetCacheStrategy > pStrategy)
static const CYIString YI_FSHADER_2D_NANOVG
Definition: YiAssetManager.h:96
static const CYIString YI_FSHADER_3D_BGR
Definition: YiAssetManager.h:50
The abstract runtime representation of a C++ type.
Definition: YiRtti.h:48
static const CYIString YI_VSHADER_2D_GEOMETRY_BATCH
Definition: YiAssetManager.h:92
static const CYIString YI_PROGRAM_3D_SOLID
Definition: YiAssetManager.h:62
static const CYIString YI_VSHADER_SDF_TEXT
Definition: YiAssetManager.h:66
static const CYIString YI_VSHADER_SDF_APPROX_TEXT
Definition: YiAssetManager.h:69
void RemoveAssetsOfType(const CYIRuntimeTypeInfo &assetType)
This class provides a cache that users can use to store various types of assets.
Definition: YiAssetManager.h:43
static const CYIString YI_FSHADER_3D_YUV_SEPARATE
Definition: YiAssetManager.h:58
static const CYIString YI_PROGRAM_3D_YUV
Definition: YiAssetManager.h:56
static const CYIString YI_PROGRAM_3D_EFFECT_BLUR_V
Definition: YiAssetManager.h:82
static const CYIString YI_PROGRAM_2D_NANOVG
Definition: YiAssetManager.h:97
std::vector< std::shared_ptr< CYIAsset > > GetAssets() const
std::shared_ptr< CYIAsset > GetAsset(const CYIString &name)
virtual ~CYIAssetManager()
int ssize_t
Definition: YiPredefWin32.h:133
Base class for any asset. An asset provides functions for dynamically loading and unloading itself an...
Definition: YiAsset.h:33
void DumpAssetList() const
static const CYIString YI_FSHADER_3D_EFFECT_TINT_FLIP_COPY
Definition: YiAssetManager.h:90
static const CYIString YI_CROSSHAIR_TEXTURE
Definition: YiAssetManager.h:75
static const CYIString YI_TEXT_ATLAS_IBO
Definition: YiAssetManager.h:48
void InvalidateHardwareAssets()
static const CYIString YI_PROGRAM_SDF_TEXT
Definition: YiAssetManager.h:68
static const CYIString YI_NORMALIZED_QUAD_YFLIP_VBO
Definition: YiAssetManager.h:47
static const CYIString YI_FSHADER_3D_TEXT
Definition: YiAssetManager.h:64
static const CYIString YI_FSHADER_3D_EFFECT_BLUR_H
Definition: YiAssetManager.h:78
static const CYIString YI_VSHADER_3D_EFFECT_BLUR_H
Definition: YiAssetManager.h:77
static const CYIString YI_FSHADER_3D_RGB
Definition: YiAssetManager.h:52
static const CYIString YI_VSHADER_3D_YUV
Definition: YiAssetManager.h:54
static const CYIString YI_PROGRAM_2D_GEOMETRY_BATCH
Definition: YiAssetManager.h:94
static const CYIString YI_FSHADER_SDF_APPROX_TEXT
Definition: YiAssetManager.h:70
static const CYIString YI_VSHADER_3D_YUV_SEPARATE
Definition: YiAssetManager.h:57
static const CYIString YI_FSHADER_3D_SOLID
Definition: YiAssetManager.h:61
static const CYIString YI_VSHADER_3D_EFFECT_FLIP_COPY
Definition: YiAssetManager.h:83