Mercurial > LightClone
annotate LightClone/Source/ResourceManager.cpp @ 68:c4ece16cf995
Finish cleaning up memory leaks; Starting on screen manager
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Fri, 07 Oct 2011 13:31:52 -0700 |
parents | 1fe27776627e |
children |
rev | line source |
---|---|
8 | 1 /* |
2 * ResourceManager | |
3 */ | |
4 | |
5 #include "ResourceManager.h" | |
6 | |
7 /* | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
8 * CreateTextureHelper |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
9 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
10 ErrorCode CreateTextureHelper(GraphicsDevice* pDevice, const char* pName, IDirect3DTexture9** pTexture) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
11 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
12 const uint32 nSizeX = D3DX_DEFAULT_NONPOW2; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
13 const uint32 nSizeY = D3DX_DEFAULT_NONPOW2; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
14 const uint32 nFilter = D3DX_DEFAULT; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
15 const uint32 nFilterMip = D3DX_DEFAULT; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
16 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
17 return SUCCEEDED(D3DXCreateTextureFromFileExA(*pDevice, pName, nSizeX, nSizeY, 0, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, nFilter, nFilterMip, 0, NULL, NULL, pTexture)) ? Error_Success : Error_Fail; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
18 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
19 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
20 /* |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
21 * CreateEffectHelper |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
22 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
23 ErrorCode CreateEffectHelper(GraphicsDevice* pDevice, const char* pName, ID3DXEffect** pEffect) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
24 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
25 ID3DXBuffer* pBuffer = NULL; |
51 | 26 |
27 HRESULT hResult = D3DXCreateEffectFromFileA(*pDevice, pName, NULL, NULL, 0, NULL, pEffect, &pBuffer); | |
28 if(FAILED(hResult)) | |
29 { | |
30 if(pBuffer) | |
31 { | |
32 TRACE("Failed to load effect %s: %s", pName, (const char*)pBuffer->GetBufferPointer()); | |
33 } | |
34 | |
35 return Error_Fail; | |
36 } | |
37 | |
38 return Error_Success; | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
39 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
40 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
41 /* |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
42 * CreateFontHelper |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
43 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
44 ErrorCode CreateFontHelper(GraphicsDevice* pDevice, const char* pName, uint32 nSize, uint32 nWeight, ID3DXFont** pFont) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
45 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
46 const uint32 nCharset = DEFAULT_CHARSET; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
47 const uint32 nPrecision = OUT_DEFAULT_PRECIS; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
48 const uint32 nQuality = DEFAULT_QUALITY; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
49 const uint32 nPitch = DEFAULT_PITCH | FF_DONTCARE; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
50 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
51 return SUCCEEDED(D3DXCreateFontA(*pDevice, nSize, 0, nWeight, 1, FALSE, nCharset, nPrecision, nQuality, nPitch, pName, pFont)) ? Error_Success : Error_Fail; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
52 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
53 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
54 /* |
8 | 55 * ResourceManager |
56 */ | |
57 ResourceManager::ResourceManager() | |
58 { | |
59 } | |
60 | |
61 /* | |
62 * Initialize | |
63 */ | |
64 ErrorCode ResourceManager::Initialize(GraphicsDevice* pDevice) | |
65 { | |
66 return pGraphicsDevice = pDevice, Error_Success; | |
67 } | |
68 | |
69 /* | |
70 * Terminate | |
71 */ | |
72 void ResourceManager::Terminate() | |
73 { | |
27 | 74 TextureCache::Iterator kTexture = kTextureCache.Begin(); |
75 TextureCache::Iterator kTextureEnd = kTextureCache.End(); | |
76 | |
77 for(; kTexture != kTextureEnd; ++kTexture) | |
78 { | |
79 (*kTexture)->Release(); | |
80 } | |
81 | |
82 EffectCache::Iterator kEffect = kEffectCache.Begin(); | |
83 EffectCache::Iterator kEffectEnd = kEffectCache.End(); | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
84 |
27 | 85 for(; kEffect != kEffectEnd; ++kEffect) |
86 { | |
87 (*kEffect)->Release(); | |
88 } | |
89 | |
90 FontCache::Iterator kFont = kFontCache.Begin(); | |
68
c4ece16cf995
Finish cleaning up memory leaks; Starting on screen manager
koryspansel <koryspansel@bendbroadband.com>
parents:
61
diff
changeset
|
91 FontCache::Iterator kFontEnd = kFontCache.End(); |
27 | 92 |
93 for(; kFont != kFontEnd; ++kFont) | |
94 { | |
95 (*kFont)->Release(); | |
96 } | |
97 | |
98 kTextureCache.Clear(); | |
99 kEffectCache.Clear(); | |
100 kFontCache.Clear(); | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
101 |
8 | 102 pGraphicsDevice = NULL; |
103 } | |
104 | |
105 /* | |
106 * CreateTextureFromFile | |
107 */ | |
108 ErrorCode ResourceManager::CreateTextureFromFile(const char* pName, IDirect3DTexture9** pTexture) | |
109 { | |
110 ErrorCode eCode = Error_Fail; | |
111 | |
112 if(pGraphicsDevice) | |
113 { | |
31
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
27
diff
changeset
|
114 ResourcePath kPath(pName); |
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
27
diff
changeset
|
115 |
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
27
diff
changeset
|
116 IDirect3DTexture9** pInstance = kTextureCache.Find(kPath); |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
117 if(!pInstance) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
118 { |
51 | 119 IDirect3DTexture9* pTextureObject = NULL; |
120 | |
121 eCode = CreateTextureHelper(pGraphicsDevice, pName, &pTextureObject); | |
122 if(eCode == Error_Success) | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
123 { |
51 | 124 if(pTextureObject) |
31
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
27
diff
changeset
|
125 { |
51 | 126 pInstance = kTextureCache.Add(kPath); |
61 | 127 ASSERT(pInstance != NULL); |
51 | 128 |
129 *pInstance = pTextureObject; | |
130 } | |
131 else | |
132 { | |
31
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
27
diff
changeset
|
133 eCode = Error_Fail; |
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
27
diff
changeset
|
134 } |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
135 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
136 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
137 else |
8 | 138 { |
139 eCode = Error_Success; | |
140 } | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
141 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
142 if(eCode == Error_Success) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
143 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
144 if(pTexture) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
145 *pTexture = *pInstance; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
146 } |
8 | 147 } |
148 | |
149 return eCode; | |
150 } | |
151 | |
152 /* | |
153 * CreateEffectFromFile | |
154 */ | |
155 ErrorCode ResourceManager::CreateEffectFromFile(const char* pName, ID3DXEffect** pEffect) | |
156 { | |
157 ErrorCode eCode = Error_Fail; | |
158 | |
159 if(pGraphicsDevice) | |
160 { | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
161 ID3DXEffect** pInstance = kEffectCache.Find(ResourcePath(pName)); |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
162 if(!pInstance) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
163 { |
51 | 164 ID3DXEffect* pEffectObject = NULL; |
165 | |
166 eCode = CreateEffectHelper(pGraphicsDevice, pName, &pEffectObject); | |
167 if(eCode == Error_Success) | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
168 { |
51 | 169 if(pEffectObject) |
170 { | |
171 pInstance = kEffectCache.Add(ResourcePath(pName)); | |
61 | 172 ASSERT(pInstance != NULL); |
51 | 173 |
174 *pInstance = pEffectObject; | |
175 } | |
176 else | |
177 { | |
178 eCode = Error_Fail; | |
179 } | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
180 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
181 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
182 else |
8 | 183 { |
184 eCode = Error_Success; | |
185 } | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
186 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
187 if(eCode == Error_Success) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
188 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
189 if(pEffect) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
190 *pEffect = *pInstance; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
191 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
192 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
193 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
194 return eCode; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
195 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
196 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
197 /* |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
198 * CreateFontFromName |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
199 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
200 ErrorCode ResourceManager::CreateFontFromName(const char* pName, uint32 nSize, uint32 nWeight, ID3DXFont** pFont) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
201 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
202 ErrorCode eCode = Error_Fail; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
203 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
204 if(pGraphicsDevice) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
205 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
206 ID3DXFont** pInstance = kFontCache.Find(ResourcePath(pName)); |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
207 if(!pInstance) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
208 { |
51 | 209 ID3DXFont* pFontObject = NULL; |
210 | |
211 eCode = CreateFontHelper(pGraphicsDevice, pName, nSize, nWeight, &pFontObject); | |
212 if(eCode == Error_Success) | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
213 { |
51 | 214 if(pFontObject) |
215 { | |
216 pInstance = kFontCache.Add(ResourcePath(pName)); | |
61 | 217 ASSERT(pInstance != NULL); |
51 | 218 |
219 *pInstance = pFontObject; | |
220 } | |
221 else | |
222 { | |
223 eCode = Error_Fail; | |
224 } | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
225 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
226 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
227 else |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
228 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
229 eCode = Error_Success; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
230 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
231 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
232 if(eCode == Error_Success) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
233 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
234 if(pFont) |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
235 *pFont = *pInstance; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
236 } |
8 | 237 } |
238 | |
239 return eCode; | |
240 } | |
241 | |
242 /* | |
243 * CreateVertexBuffer | |
244 */ | |
245 ErrorCode ResourceManager::CreateVertexBuffer(uint32 nSize, uint32 nUsage, uint32 nPool, IDirect3DVertexBuffer9** pBuffer) | |
246 { | |
247 ErrorCode eCode = Error_Fail; | |
248 | |
249 if(pGraphicsDevice) | |
250 { | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
8
diff
changeset
|
251 HRESULT hResult = ((IDirect3DDevice9*)*pGraphicsDevice)->CreateVertexBuffer(nSize, nUsage, 0, (D3DPOOL)nPool, pBuffer, NULL); |
8 | 252 if(SUCCEEDED(hResult)) |
253 { | |
254 eCode = Error_Success; | |
255 } | |
256 } | |
257 | |
258 return eCode; | |
259 } |