Na aber gerne
|
C-/C++-Quelltext
|
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
|
typedef unsigned int IdString;
struct ResourceEntry {
IdString hash;
sf::Texture* tex;
}
IdString murmur_hash(const char* text) {
....
}
class ResourceManager {
public:
ResourceManager() : m_Index(0) {}
~ResourceManager() {
for ( int i = 0; i < m_Index; ++i ) {
ResourceEntry* entry = &m_Entries[i];
// some cleanup here I guess
}
}
sf::Texture* getTexture(const char* fileName);
private:
int m_Index;
sf::Texture* find(const char* fileName);
ResourceEntry m_Entries[32];
}
sf::Texture* ResourceManager::getTexture(const char* fileNmae) {
sf::Texture* tex = find(fileName);
if ( tex == 0 ) {
ResourceEntry* re = &m_Entries[m_Index];
re->hash = murmur_hash(fileName);
re->tex = .... load texture ....
++m_Index;
return re->tex;
}
return tex;
}
sf::Texture* ResourceManager::find(const char* fileName) {
IdString hash = murmur_hash(fileName);
for ( int i = 0; i < 32; ++i ) {
if ( m_Entries[i].hash == hash ) {
return m_Entries[i].tex;
}
}
return 0;
}
|
Das habe ich mal schnell runtergeschrieben, also vielleicht compiliert es gar nicht.
Murmur_hash habe ich weggelassen, findet man aber bei Google und ich habe den Code gerade nicht zur Hand.
Soll ja keiner sagen, ich würde nur meckern.
Das ist meine persönliche Sichtweise. Man mag das hier für oversized halten.