aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-01-04 22:22:46 +0000
committerJustin Clark-Casey (justincc)2012-01-04 22:22:46 +0000
commit0634c3850563fc38a4026f70a7bfd64a05198fa3 (patch)
tree394ef0de94c3f38a0b22ba3b4a50a7310fa2b178
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-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).
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs72
-rw-r--r--OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs22
2 files changed, 63 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)
diff --git a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
index 8670229..04df9c3 100644
--- a/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAvatarFactoryModule.cs
@@ -61,7 +61,29 @@ namespace OpenSim.Region.Framework.Interfaces
61 /// <returns>true if a valid agent was found, false otherwise</returns> 61 /// <returns>true if a valid agent was found, false otherwise</returns>
62 bool SaveBakedTextures(UUID agentId); 62 bool SaveBakedTextures(UUID agentId);
63 63
64 /// <summary>
65 /// Validate that OpenSim can find the baked textures need to display a given avatar
66 /// </summary>
67 /// <param name="client"></param>
68 /// <param name="checkonly"></param>
69 /// <returns>
70 /// true if all the baked textures referenced by the texture IDs exist or the appearance is only using default textures. false otherwise.
71 /// </returns>
64 bool ValidateBakedTextureCache(IScenePresence sp); 72 bool ValidateBakedTextureCache(IScenePresence sp);
73
74 /// <summary>
75 /// Request a rebake of textures for an avatar.
76 /// </summary>
77 /// <remarks>
78 /// This will send the request to the viewer, since it's there that the rebake is done.
79 /// </remarks>
80 /// <param name="sp">Avatar to rebake.</param>
81 /// <param name="missingTexturesOnly">
82 /// If true, only request a rebake for the textures that are missing.
83 /// If false then we request a rebake of all textures for which we already have references.
84 /// </param>
85 void RequestRebake(IScenePresence sp, bool missingTexturesOnly);
86
65 void QueueAppearanceSend(UUID agentid); 87 void QueueAppearanceSend(UUID agentid);
66 void QueueAppearanceSave(UUID agentid); 88 void QueueAppearanceSave(UUID agentid);
67 89