diff options
author | Justin Clark-Casey (justincc) | 2012-01-04 22:22:46 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-01-04 22:22:46 +0000 |
commit | 0634c3850563fc38a4026f70a7bfd64a05198fa3 (patch) | |
tree | 394ef0de94c3f38a0b22ba3b4a50a7310fa2b178 /OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC_OLD-0634c3850563fc38a4026f70a7bfd64a05198fa3.zip opensim-SC_OLD-0634c3850563fc38a4026f70a7bfd64a05198fa3.tar.gz opensim-SC_OLD-0634c3850563fc38a4026f70a7bfd64a05198fa3.tar.bz2 opensim-SC_OLD-0634c3850563fc38a4026f70a7bfd64a05198fa3.tar.xz |
Separate out rebake request code from cache validation code AvatarFactoryModule.
This allows some logic simplification and allows an external caller to manually request rebakes even if textures are uploaded (future command).
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index e8aee3e..d64a0c1 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |||
@@ -156,7 +156,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
156 | changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; | 156 | changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; |
157 | 157 | ||
158 | // WriteBakedTexturesReport(sp, m_log.DebugFormat); | 158 | // WriteBakedTexturesReport(sp, m_log.DebugFormat); |
159 | ValidateBakedTextureCache(sp, false); | 159 | if (!ValidateBakedTextureCache(sp)) |
160 | RequestRebake(sp, true); | ||
160 | 161 | ||
161 | // This appears to be set only in the final stage of the appearance | 162 | // This appears to be set only in the final stage of the appearance |
162 | // update transaction. In theory, we should be able to do an immediate | 163 | // update transaction. In theory, we should be able to do an immediate |
@@ -251,15 +252,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
251 | } | 252 | } |
252 | 253 | ||
253 | /// <summary> | 254 | /// <summary> |
254 | /// Check for the existence of the baked texture assets. | ||
255 | /// </summary> | ||
256 | /// <param name="sp"></param> | ||
257 | public bool ValidateBakedTextureCache(IScenePresence sp) | ||
258 | { | ||
259 | return ValidateBakedTextureCache(sp, true); | ||
260 | } | ||
261 | |||
262 | /// <summary> | ||
263 | /// Queue up a request to send appearance. | 255 | /// Queue up a request to send appearance. |
264 | /// </summary> | 256 | /// </summary> |
265 | /// <remarks> | 257 | /// <remarks> |
@@ -292,17 +284,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
292 | } | 284 | } |
293 | } | 285 | } |
294 | 286 | ||
295 | #endregion | 287 | public bool ValidateBakedTextureCache(IScenePresence sp) |
296 | |||
297 | #region AvatarFactoryModule private methods | ||
298 | |||
299 | /// <summary> | ||
300 | /// Check for the existence of the baked texture assets. Request a rebake | ||
301 | /// unless checkonly is true. | ||
302 | /// </summary> | ||
303 | /// <param name="client"></param> | ||
304 | /// <param name="checkonly"></param> | ||
305 | private bool ValidateBakedTextureCache(IScenePresence sp, bool checkonly) | ||
306 | { | 288 | { |
307 | bool defonly = true; // are we only using default textures | 289 | bool defonly = true; // are we only using default textures |
308 | 290 | ||
@@ -330,16 +312,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
330 | defonly = false; // found a non-default texture reference | 312 | defonly = false; // found a non-default texture reference |
331 | 313 | ||
332 | if (m_scene.AssetService.Get(face.TextureID.ToString()) == null) | 314 | if (m_scene.AssetService.Get(face.TextureID.ToString()) == null) |
333 | { | 315 | return false; |
334 | if (checkonly) | ||
335 | return false; | ||
336 | |||
337 | m_log.DebugFormat( | ||
338 | "[AVFACTORY]: Missing baked texture {0} ({1}) for {2}, requesting rebake.", | ||
339 | face.TextureID, idx, sp.Name); | ||
340 | |||
341 | sp.ControllingClient.SendRebakeAvatarTextures(face.TextureID); | ||
342 | } | ||
343 | } | 316 | } |
344 | 317 | ||
345 | m_log.DebugFormat("[AVFACTORY]: Completed texture check for {0}", sp.UUID); | 318 | m_log.DebugFormat("[AVFACTORY]: Completed texture check for {0}", sp.UUID); |
@@ -348,6 +321,43 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
348 | return (defonly ? false : true); | 321 | return (defonly ? false : true); |
349 | } | 322 | } |
350 | 323 | ||
324 | public void RequestRebake(IScenePresence sp, bool missingTexturesOnly) | ||
325 | { | ||
326 | for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++) | ||
327 | { | ||
328 | int idx = AvatarAppearance.BAKE_INDICES[i]; | ||
329 | Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx]; | ||
330 | |||
331 | // if there is no texture entry, skip it | ||
332 | if (face == null) | ||
333 | continue; | ||
334 | |||
335 | // m_log.DebugFormat( | ||
336 | // "[AVFACTORY]: Looking for texture {0}, id {1} for {2} {3}", | ||
337 | // face.TextureID, idx, client.Name, client.AgentId); | ||
338 | |||
339 | // if the texture is one of the "defaults" then skip it | ||
340 | // this should probably be more intelligent (skirt texture doesnt matter | ||
341 | // if the avatar isnt wearing a skirt) but if any of the main baked | ||
342 | // textures is default then the rest should be as well | ||
343 | if (face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE) | ||
344 | continue; | ||
345 | |||
346 | if (missingTexturesOnly && m_scene.AssetService.Get(face.TextureID.ToString()) != null) | ||
347 | continue; | ||
348 | else | ||
349 | m_log.DebugFormat( | ||
350 | "[AVFACTORY]: Missing baked texture {0} ({1}) for {2}, requesting rebake.", | ||
351 | face.TextureID, idx, sp.Name); | ||
352 | |||
353 | sp.ControllingClient.SendRebakeAvatarTextures(face.TextureID); | ||
354 | } | ||
355 | } | ||
356 | |||
357 | #endregion | ||
358 | |||
359 | #region AvatarFactoryModule private methods | ||
360 | |||
351 | private Dictionary<BakeType, Primitive.TextureEntryFace> GetBakedTextureFaces(ScenePresence sp) | 361 | private Dictionary<BakeType, Primitive.TextureEntryFace> GetBakedTextureFaces(ScenePresence sp) |
352 | { | 362 | { |
353 | if (sp.IsChildAgent) | 363 | if (sp.IsChildAgent) |