diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 42a14a3474..e3b99cce45 100755 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -51,7 +51,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public const string BAKED_TEXTURES_REPORT_FORMAT = "{0,-9} {1}"; + public const string BAKED_TEXTURES_REPORT_FORMAT = " {0,-9} {1}"; private Scene m_scene = null; @@ -204,7 +204,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory changed = sp.Appearance.SetTextureEntries(textureEntry) || changed; -// WriteBakedTexturesReport(sp, m_log.DebugFormat); + //WriteBakedTexturesReport(sp, m_log.DebugFormat); UpdateBakedTextureCache(sp, cacheItems); @@ -219,11 +219,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory SendAppearance((ScenePresence)sp); return; } - - // save only if there were changes, send no matter what (doesn't hurt to send twice) + // save only if there were changes if (changed) QueueAppearanceSave(sp.ControllingClient.AgentId); - QueueAppearanceSend(sp.ControllingClient.AgentId); } @@ -377,7 +375,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory wearableCache = WearableCacheItem.GetDefaultCacheItem(); else { - hadSkirt = !wearableCache[19].TextureID.IsZero(); + hadSkirt = wearableCache[19].TextureID.IsNotZero(); } HashSet updatedFaces = new HashSet(); @@ -386,8 +384,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory // Process received baked textures for (int i = 0; i < cacheItems.Length; i++) { - uint idx = cacheItems[i].TextureIndex; - if(idx >= AvatarAppearance.TEXTURE_COUNT) + var curCacheItem = cacheItems[i]; + uint idx = curCacheItem.TextureIndex; + if (idx >= AvatarAppearance.TEXTURE_COUNT) { hits++; continue; @@ -395,13 +394,14 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory updatedFaces.Add(idx); - wearableCache[idx].TextureAsset = null; // just in case + var wcacheidx = wearableCache[idx]; + wcacheidx.TextureAsset = null; // just in case Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx]; if (face == null || face.TextureID.IsZero() || face.TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) { - wearableCache[idx].CacheId = UUID.Zero; - wearableCache[idx].TextureID = UUID.Zero; + wcacheidx.CacheId = UUID.Zero; + wcacheidx.TextureID = UUID.Zero; if (idx == 19) { hits++; @@ -415,23 +415,23 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory { AssetBase asb = null; cache.Get(face.TextureID.ToString(), out asb); - wearableCache[idx].TextureAsset = asb; + wcacheidx.TextureAsset = asb; } - if (wearableCache[idx].TextureAsset != null) + if (wcacheidx.TextureAsset != null) { - if ( wearableCache[idx].TextureID != face.TextureID || - wearableCache[idx].CacheId != cacheItems[i].CacheId) + if (wcacheidx.TextureID.NotEqual(face.TextureID) || + wcacheidx.CacheId.NotEqual(curCacheItem.CacheId)) validDirtyBakes++; - wearableCache[idx].TextureID = face.TextureID; - wearableCache[idx].CacheId = cacheItems[i].CacheId; + wcacheidx.TextureID = face.TextureID; + wcacheidx.CacheId = curCacheItem.CacheId; hits++; } else { - wearableCache[idx].CacheId = UUID.Zero; - wearableCache[idx].TextureID = UUID.Zero; + wcacheidx.CacheId = UUID.Zero; + wcacheidx.TextureID = UUID.Zero; missing.Add(face.TextureID); continue; } @@ -446,9 +446,10 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory sp.Appearance.Texture.FaceTextures[idx] = null; - wearableCache[idx].CacheId = UUID.Zero; - wearableCache[idx].TextureID = UUID.Zero; - wearableCache[idx].TextureAsset = null; + var wcacheidx = wearableCache[idx]; + wcacheidx.CacheId = UUID.Zero; + wcacheidx.TextureID = UUID.Zero; + wcacheidx.TextureAsset = null; } sp.Appearance.WearableCacheItems = wearableCache; @@ -502,19 +503,22 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory if (cache == null) return false; + + IBakedTextureModule bakedModule = m_scene.RequestModuleInterface(); lock (m_setAppearanceLock) { WearableCacheItem[] wearableCache = sp.Appearance.WearableCacheItems; + var spAppearanceTextureFaceTextures = sp.Appearance.Texture.FaceTextures; + /* // big debug -// m_log.DebugFormat("[AVFACTORY]: ValidateBakedTextureCache start for {0} {1}", sp.Name, sp.UUID); -/* + m_log.DebugFormat("[AVFACTORY]: ValidateBakedTextureCache start for {0} {1}", sp.Name, sp.UUID); for (int iter = 0; iter < AvatarAppearance.BAKE_INDICES.Length; iter++) { int j = AvatarAppearance.BAKE_INDICES[iter]; - Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[j]; + Primitive.TextureEntryFace face = spAppearanceTextureFaceTextures[j]; if (wearableCache == null) { if (face != null) @@ -538,7 +542,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory ); } } -*/ + */ bool wearableCacheValid = false; if (wearableCache == null) @@ -552,26 +556,40 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++) { int idx = AvatarAppearance.BAKE_INDICES[i]; - face = sp.Appearance.Texture.FaceTextures[idx]; - if(face == null || face.TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) + face = spAppearanceTextureFaceTextures[idx]; + var wcacheidx = wearableCache[idx]; + + if (face == null || face.TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) { - wearableCache[idx].CacheId = UUID.Zero; - wearableCache[idx].TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; + wcacheidx.CacheId = UUID.Zero; + wcacheidx.TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; hits++; continue; } - if (face.TextureID.Equals(wearableCache[idx].TextureID) && !face.TextureID.IsZero()) + if(face.TextureID.IsNotZero()) { - if (cache.Check((wearableCache[idx].TextureID).ToString())) + // fs junk + if (i >= AvatarAppearance.BAKES_COUNT_PV7 && wcacheidx.CacheId.IsZero()) { + spAppearanceTextureFaceTextures[idx] = null; + wcacheidx.CacheId = UUID.Zero; + wcacheidx.TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; hits++; continue; } + if (face.TextureID.Equals(wcacheidx.TextureID)) + { + if (cache.Check(wcacheidx.TextureID.ToString())) + { + hits++; + continue; + } + } } - wearableCache[idx].CacheId = UUID.Zero; - wearableCache[idx].TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; + wcacheidx.CacheId = UUID.Zero; + wcacheidx.TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; wearableCacheValid = false; } } @@ -602,16 +620,18 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory for (int i = 0; i < bakedModuleCache.Length; i++) { - int j = (int)bakedModuleCache[i].TextureIndex; - if (j < AvatarAppearance.TEXTURE_COUNT && bakedModuleCache[i].TextureAsset != null) + var bacachei = bakedModuleCache[i]; + int j = (int)bacachei.TextureIndex; + if (j < AvatarAppearance.TEXTURE_COUNT && bacachei.TextureAsset != null) { - wearableCache[j].TextureID = bakedModuleCache[i].TextureID; - wearableCache[j].CacheId = bakedModuleCache[i].CacheId; - wearableCache[j].TextureAsset = bakedModuleCache[i].TextureAsset; - bakedModuleCache[i].TextureAsset.Temporary = true; - bakedModuleCache[i].TextureAsset.Local = true; + var wcachej = wearableCache[j]; + wcachej.TextureID = bakedModuleCache[i].TextureID; + wcachej.CacheId = bakedModuleCache[i].CacheId; + wcachej.TextureAsset = bakedModuleCache[i].TextureAsset; + bacachei.TextureAsset.Temporary = true; + bacachei.TextureAsset.Local = true; //bakedModuleCache[i].TextureAsset.Flags = AssetFlags.AvatarBake; - cache.Cache(bakedModuleCache[i].TextureAsset); + cache.Cache(bacachei.TextureAsset); } } @@ -619,31 +639,31 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++) { int idx = AvatarAppearance.BAKE_INDICES[i]; - if (wearableCache[idx].TextureAsset == null) + var wcacheidx = wearableCache[idx]; + var faceTextureidx = spAppearanceTextureFaceTextures[idx]; + if (wcacheidx.TextureAsset == null) { if(idx == 19) { - sp.Appearance.Texture.FaceTextures[idx] = null; + faceTextureidx = null; hits++; } - else if(sp.Appearance.Texture.FaceTextures[idx] == null || - sp.Appearance.Texture.FaceTextures[idx].TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) + else if(faceTextureidx == null || faceTextureidx.TextureID.Equals(AppearanceManager.DEFAULT_AVATAR_TEXTURE)) hits++; - wearableCache[idx].TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; - wearableCache[idx].CacheId = UUID.Zero; + wcacheidx.TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; + wcacheidx.CacheId = UUID.Zero; continue; } Primitive.TextureEntryFace face = sp.Appearance.Texture.GetFace((uint)idx); - face.TextureID = wearableCache[idx].TextureID; + face.TextureID = wcacheidx.TextureID; hits++; - wearableCache[idx].TextureAsset = null; + wcacheidx.TextureAsset = null; } } } sp.Appearance.WearableCacheItems = wearableCache; - } // debug @@ -1263,8 +1283,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory public void WriteBakedTexturesReport(IScenePresence sp, ReportOutputAction outputAction) { - outputAction("For {0} in {1}", null, sp.Name, m_scene.RegionInfo.RegionName); - outputAction(BAKED_TEXTURES_REPORT_FORMAT, null, "Bake Type", "UUID"); + outputAction("For {0} in {1}", sp.Name, m_scene.RegionInfo.RegionName); + outputAction(BAKED_TEXTURES_REPORT_FORMAT, "Bake Type", "UUID"); Dictionary bakedTextures = GetBakedTextureFaces(sp.UUID); @@ -1291,11 +1311,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory } } - outputAction(BAKED_TEXTURES_REPORT_FORMAT, null, bt, rawTextureID); + outputAction(BAKED_TEXTURES_REPORT_FORMAT, bt, rawTextureID); } bool bakedTextureValid = m_scene.AvatarFactory.ValidateBakedTextureCache(sp); - outputAction("{0} baked appearance texture is {1}", null, sp.Name, bakedTextureValid ? "OK" : "incomplete"); + outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "incomplete"); } public void SetPreferencesHoverZ(UUID agentId, float val)