diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 104 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | 28 |
2 files changed, 27 insertions, 105 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index def1f8e..e9a087b 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -12011,120 +12011,60 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12011 | AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); | 12011 | AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); |
12012 | 12012 | ||
12013 | if (cachedtex.AgentData.SessionID != SessionId) | 12013 | if (cachedtex.AgentData.SessionID != SessionId) |
12014 | return false; | 12014 | return false; |
12015 | 12015 | ||
12016 | // TODO: don't create new blocks if recycling an old packet | 12016 | // TODO: don't create new blocks if recycling an old packet |
12017 | cachedresp.AgentData.AgentID = AgentId; | 12017 | cachedresp.AgentData.AgentID = AgentId; |
12018 | cachedresp.AgentData.SessionID = m_sessionId; | 12018 | cachedresp.AgentData.SessionID = m_sessionId; |
12019 | // cachedresp.AgentData.SerialNum = m_cachedTextureSerial; | ||
12020 | // m_cachedTextureSerial++; | ||
12021 | cachedresp.AgentData.SerialNum = cachedtex.AgentData.SerialNum; | 12019 | cachedresp.AgentData.SerialNum = cachedtex.AgentData.SerialNum; |
12022 | cachedresp.WearableData = | 12020 | cachedresp.WearableData = |
12023 | new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length]; | 12021 | new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length]; |
12024 | 12022 | ||
12025 | //IAvatarFactoryModule fac = m_scene.RequestModuleInterface<IAvatarFactoryModule>(); | ||
12026 | // var item = fac.GetBakedTextureFaces(AgentId); | ||
12027 | //WearableCacheItem[] items = fac.GetCachedItems(AgentId); | ||
12028 | |||
12029 | IAssetService cache = m_scene.AssetService; | ||
12030 | //bakedTextureModule = null; | ||
12031 | int maxWearablesLoop = cachedtex.WearableData.Length; | 12023 | int maxWearablesLoop = cachedtex.WearableData.Length; |
12032 | if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES) | 12024 | if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES) |
12033 | maxWearablesLoop = AvatarWearable.MAX_WEARABLES; | 12025 | maxWearablesLoop = AvatarWearable.MAX_WEARABLES; |
12034 | 12026 | ||
12035 | int cacheHits = 0; | 12027 | int cacheHits = 0; |
12036 | 12028 | ||
12037 | if (cache != null) | 12029 | // We need to make sure the asset stored in the bake is available on this server also by it's assetid before we map it to a Cacheid |
12038 | { | ||
12039 | // We need to make sure the asset stored in the bake is available on this server also by it's assetid before we map it to a Cacheid | ||
12040 | |||
12041 | WearableCacheItem[] cacheItems = null; | ||
12042 | |||
12043 | ScenePresence p = m_scene.GetScenePresence(AgentId); | ||
12044 | |||
12045 | if (p!= null && p.Appearance != null) | ||
12046 | { | ||
12047 | /* we should only check bakedTextureModule at login or when appearance changes | ||
12048 | if (p.Appearance.WearableCacheItems == null) // currently with a caching only bakemodule Appearance.Wearables.dirty as no use | ||
12049 | { | ||
12050 | IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); | ||
12051 | if (bakedTextureModule != null) | ||
12052 | { | ||
12053 | m_log.Debug("[ HandleAgentTextureCached] bakedTextureModule"); | ||
12054 | try | ||
12055 | { | ||
12056 | cacheItems = bakedTextureModule.Get(AgentId); | ||
12057 | p.Appearance.WearableCacheItems = cacheItems; | ||
12058 | p.Appearance.WearableCacheItemsDirty = false; | ||
12059 | 12030 | ||
12060 | if (cacheItems != null) | 12031 | WearableCacheItem[] cacheItems = null; |
12061 | { | ||
12062 | foreach (WearableCacheItem item in cacheItems) | ||
12063 | { | ||
12064 | if (item.TextureAsset != null) | ||
12065 | { | ||
12066 | item.TextureAsset.Temporary = true; | ||
12067 | item.TextureAsset.Local = true; | ||
12068 | cache.Store(item.TextureAsset); | ||
12069 | } | ||
12070 | } | ||
12071 | } | ||
12072 | } | ||
12073 | 12032 | ||
12074 | catch (Exception) | 12033 | ScenePresence p = m_scene.GetScenePresence(AgentId); |
12075 | { | ||
12076 | cacheItems = null; | ||
12077 | } | ||
12078 | } | ||
12079 | } | ||
12080 | 12034 | ||
12081 | else if (p.Appearance.WearableCacheItems != null) | 12035 | if (p != null && p.Appearance != null) |
12082 | { | 12036 | { |
12083 | cacheItems = p.Appearance.WearableCacheItems; | 12037 | cacheItems = p.Appearance.WearableCacheItems; |
12084 | } | 12038 | } |
12085 | */ | ||
12086 | cacheItems = p.Appearance.WearableCacheItems; | ||
12087 | } | ||
12088 | 12039 | ||
12089 | if (cacheItems != null) | 12040 | if (cacheItems != null) |
12041 | { | ||
12042 | for (int i = 0; i < maxWearablesLoop; i++) | ||
12090 | { | 12043 | { |
12091 | for (int i = 0; i < maxWearablesLoop; i++) | 12044 | int idx = cachedtex.WearableData[i].TextureIndex; |
12092 | { | ||
12093 | int idx = cachedtex.WearableData[i].TextureIndex; | ||
12094 | 12045 | ||
12095 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | 12046 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); |
12096 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | 12047 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; |
12097 | cachedresp.WearableData[i].HostName = new byte[0]; | 12048 | cachedresp.WearableData[i].HostName = new byte[0]; |
12098 | if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId) | 12049 | if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId) |
12099 | { | 12050 | { |
12100 | cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID; | 12051 | cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID; |
12101 | cacheHits++; | 12052 | cacheHits++; |
12102 | } | ||
12103 | else | ||
12104 | { | ||
12105 | cachedresp.WearableData[i].TextureID = UUID.Zero; | ||
12106 | } | ||
12107 | } | 12053 | } |
12108 | } | 12054 | else |
12109 | else | ||
12110 | { | ||
12111 | for (int i = 0; i < maxWearablesLoop; i++) | ||
12112 | { | 12055 | { |
12113 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
12114 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | ||
12115 | cachedresp.WearableData[i].TextureID = UUID.Zero; | 12056 | cachedresp.WearableData[i].TextureID = UUID.Zero; |
12116 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||
12117 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
12118 | } | 12057 | } |
12119 | } | 12058 | } |
12120 | } | 12059 | } |
12121 | else // no cache | 12060 | else |
12122 | { | 12061 | { |
12123 | for (int i = 0; i < maxWearablesLoop; i++) | 12062 | for (int i = 0; i < maxWearablesLoop; i++) |
12124 | { | 12063 | { |
12125 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | 12064 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); |
12126 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | 12065 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; |
12127 | cachedresp.WearableData[i].TextureID = UUID.Zero; | 12066 | cachedresp.WearableData[i].TextureID = UUID.Zero; |
12067 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||
12128 | cachedresp.WearableData[i].HostName = new byte[0]; | 12068 | cachedresp.WearableData[i].HostName = new byte[0]; |
12129 | } | 12069 | } |
12130 | } | 12070 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index edf62db..2e5c58a 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |||
@@ -493,18 +493,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
493 | 493 | ||
494 | wearableCache = WearableCacheItem.GetDefaultCacheItem(); | 494 | wearableCache = WearableCacheItem.GetDefaultCacheItem(); |
495 | 495 | ||
496 | // debug | 496 | int hits = 0; |
497 | for (int iter = 0; iter < AvatarAppearance.BAKE_INDICES.Length; iter++) | ||
498 | { | ||
499 | int j = AvatarAppearance.BAKE_INDICES[iter]; | ||
500 | Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[iter]; | ||
501 | if(face != null) | ||
502 | m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t - " + face.TextureID); | ||
503 | else | ||
504 | m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t - No texture"); | ||
505 | } | ||
506 | |||
507 | int hits = 0; | ||
508 | // Cache wearable data for teleport. | 497 | // Cache wearable data for teleport. |
509 | // Only makes sense if there's a bake module and a cache module | 498 | // Only makes sense if there's a bake module and a cache module |
510 | if (bakedModule != null && cache != null) | 499 | if (bakedModule != null && cache != null) |
@@ -546,7 +535,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
546 | int idx = AvatarAppearance.BAKE_INDICES[i]; | 535 | int idx = AvatarAppearance.BAKE_INDICES[i]; |
547 | Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx]; | 536 | Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx]; |
548 | 537 | ||
549 | // No face, so lets check our baked service cache, teleport or login. | 538 | // No face, so lets check our cache |
550 | if (face == null || face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE) | 539 | if (face == null || face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE) |
551 | { | 540 | { |
552 | sp.Appearance.Texture.FaceTextures[idx] = sp.Appearance.Texture.CreateFace((uint)idx); | 541 | sp.Appearance.Texture.FaceTextures[idx] = sp.Appearance.Texture.CreateFace((uint)idx); |
@@ -560,8 +549,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
560 | { | 549 | { |
561 | sp.Appearance.Texture.FaceTextures[idx].TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; | 550 | sp.Appearance.Texture.FaceTextures[idx].TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE; |
562 | face = sp.Appearance.Texture.FaceTextures[idx]; | 551 | face = sp.Appearance.Texture.FaceTextures[idx]; |
563 | wearableCache[idx].CacheId = UUID.Zero; | 552 | // lets try not invalidating the cache entry |
564 | wearableCache[idx].TextureAsset = null; | 553 | // wearableCache[idx].CacheId = UUID.Zero; |
554 | // wearableCache[idx].TextureAsset = null; | ||
565 | continue; | 555 | continue; |
566 | } | 556 | } |
567 | } | 557 | } |
@@ -624,14 +614,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
624 | if (face == null) | 614 | if (face == null) |
625 | continue; | 615 | continue; |
626 | 616 | ||
627 | // m_log.DebugFormat( | ||
628 | // "[AVFACTORY]: Looking for texture {0}, id {1} for {2} {3}", | ||
629 | // face.TextureID, idx, client.Name, client.AgentId); | ||
630 | |||
631 | // if the texture is one of the "defaults" then skip it | ||
632 | // this should probably be more intelligent (skirt texture doesnt matter | ||
633 | // if the avatar isnt wearing a skirt) but if any of the main baked | ||
634 | // textures is default then the rest should be as well | ||
635 | if (face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE) | 617 | if (face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE) |
636 | continue; | 618 | continue; |
637 | 619 | ||