-
Notifications
You must be signed in to change notification settings - Fork 0
/
ResourceManager.cpp
69 lines (54 loc) · 1.34 KB
/
ResourceManager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "ResourceManager.h"
void ResourceManager::Destroy()
{
for(ResDB::iterator it = m_ResDB.begin(); it != m_ResDB.end(); it++) {
delete (*it).second;
(*it).second = NULL;
}
m_ResDB.clear();
}
void* ResourceManager::LoadResource(RES_TYPE type, const std::string& name)
{
// La ressource est déja chargée, on ne la recharge pas :
if(m_ResDB.find(name) != m_ResDB.end())
return m_ResDB.find(name)->second;
// on charge la ressource
ResourceBase* ptr = NULL;
switch(type) {
case TEXTURE2D: {
ptr = new Texture2D();
break;}
case TEXTURECUBEMAP: {
ptr = new TextureCubemap();
break;}
case SHADER: {
ptr = new Shader();
break;}
case MESH: {
ptr = new Mesh();
break;}
}
ptr->Load(name);
if(!ptr) return NULL;
m_ResDB[name] = ptr;
return ptr;
}
void* ResourceManager::NewResource(ResourceBase* data, const std::string& name)
{
if(!data) return NULL;
// La ressource est déja chargée, on ne la recharge pas :
if(m_ResDB.find(name) != m_ResDB.end())
return m_ResDB.find(name)->second;
m_ResDB[name] = data;
return data;
}
void ResourceManager::Reload()
{
for(ResDB::iterator it = m_ResDB.begin(); it != m_ResDB.end(); it++) {
if((*it).second->DoesSupportReloading())
{
(*it).second->Destroy();
(*it).second->Load((*it).first);
}
}
}