From 05a2feba5d780c57c252891a20071800fd9f2e3e Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 4 Aug 2014 19:57:47 +0100
Subject: start sending terrain in scenePresence after well defined avatar.
Minor change on significante AgentUpdate check.
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 28 +++++++++++++-----
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 34 +++++++++++-----------
2 files changed, 37 insertions(+), 25 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 34a2797..7d61577 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -577,7 +577,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Fire the callback for this connection closing
if (OnConnectionClosed != null)
+ {
OnConnectionClosed(this);
+ }
+
// Flush all of the packets out of the UDP server for this client
if (m_udpServer != null)
@@ -5518,8 +5521,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
-// AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false);
- AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, true);
+ AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false);
AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest);
AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance);
@@ -5732,10 +5734,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#region Scene/Avatar
// Threshold for body rotation to be a significant agent update
- private const float QDELTA = 0.000001f;
+ // private const float QDELTA = 0.000001f;
+ // QDELTA is now relative to abs of cos of angle between orientations
+
+ private const float QDELTABODY = 1 - 0.0001f;
+ private const float QDELTAHEAD = 1 - 0.0001f;
+
// Threshold for camera rotation to be a significant agent update
private const float VDELTA = 0.01f;
-
+
///
/// This checks the update significance against the last update made.
///
@@ -5755,13 +5762,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{
- float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
+ // float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
//qdelta2 = 1 - (float)Math.Pow(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation), 2);
+ // now using abs of cos
+ float qdelta1 = (float)Math.Abs(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation));
+ float qdelta2 = (float)Math.Abs(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation));
bool movementSignificant =
- (qdelta1 > QDELTA) // significant if body rotation above threshold
- // Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
+// (qdelta1 > QDELTA) // significant if body rotation above threshold
+ (qdelta1 < QDELTABODY) // higher angle lower cos
+// Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
// || (qdelta2 > QDELTA * 10) // significant if head rotation above threshold
+ || (qdelta2 < QDELTAHEAD) // using cos above
|| (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed
|| (x.ControlFlags != (byte)AgentManager.ControlFlags.NONE) // significant if user supplying any movement update commands
|| (x.Far != m_thisAgentUpdateArgs.Far) // significant if far distance changed
@@ -6476,7 +6488,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Action handlerRegionHandShakeReply = OnRegionHandShakeReply;
if (handlerRegionHandShakeReply != null)
{
- Thread.Sleep(500);
+// Thread.Sleep(500);
handlerRegionHandShakeReply(this);
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index b7c8594..a3fdae1 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1750,25 +1750,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
endPoint,
sessionInfo);
- // Send ack straight away to let the viewer know that the connection is active.
- // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
- // circuit code to the existing child agent. This is not particularly obvious.
- SendAckImmediate(endPoint, uccp.Header.Sequence);
-
- // We only want to send initial data to new clients, not ones which are being converted from child to root.
- if (client != null)
- {
- AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
- bool tp = (aCircuit.teleportFlags > 0);
- // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
- if (!tp)
- client.SceneAgent.SendInitialDataToMe();
- }
-
// Now we know we can handle more data
- Thread.Sleep(200);
+// Thread.Sleep(200);
- // Obtain the queue and remove it from the cache
+ // Obtain the pending queue and remove it from the cache
Queue queue = null;
lock (m_pendingCache)
@@ -1790,6 +1775,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
PacketReceived(buf);
}
queue = null;
+
+ // Send ack straight away to let the viewer know that the connection is active.
+ // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
+ // circuit code to the existing child agent. This is not particularly obvious.
+ SendAckImmediate(endPoint, uccp.Header.Sequence);
+
+ // We only want to send initial data to new clients, not ones which are being converted from child to root.
+ if (client != null)
+ {
+ AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
+ bool tp = (aCircuit.teleportFlags > 0);
+ // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
+ if (!tp)
+ client.SceneAgent.SendInitialDataToMe();
+ }
}
else
{
--
cgit v1.1
From 3d81f25e34cd7d536ad0e36242703ac1bc56038d Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 4 Aug 2014 20:32:11 +0100
Subject: Revert "start sending terrain in scenePresence after well defined
avatar. Minor"
This reverts commit 05a2feba5d780c57c252891a20071800fd9f2e3e.
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 28 +++++-------------
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 34 +++++++++++-----------
2 files changed, 25 insertions(+), 37 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 7d61577..34a2797 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -577,10 +577,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// Fire the callback for this connection closing
if (OnConnectionClosed != null)
- {
OnConnectionClosed(this);
- }
-
// Flush all of the packets out of the UDP server for this client
if (m_udpServer != null)
@@ -5521,7 +5518,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
- AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false);
+// AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, false);
+ AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply, true);
AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest);
AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance);
@@ -5734,15 +5732,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#region Scene/Avatar
// Threshold for body rotation to be a significant agent update
- // private const float QDELTA = 0.000001f;
- // QDELTA is now relative to abs of cos of angle between orientations
-
- private const float QDELTABODY = 1 - 0.0001f;
- private const float QDELTAHEAD = 1 - 0.0001f;
-
+ private const float QDELTA = 0.000001f;
// Threshold for camera rotation to be a significant agent update
private const float VDELTA = 0.01f;
-
+
///
/// This checks the update significance against the last update made.
///
@@ -5762,18 +5755,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
private bool CheckAgentMovementUpdateSignificance(AgentUpdatePacket.AgentDataBlock x)
{
- // float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
+ float qdelta1 = 1 - (float)Math.Pow(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation), 2);
//qdelta2 = 1 - (float)Math.Pow(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation), 2);
- // now using abs of cos
- float qdelta1 = (float)Math.Abs(Quaternion.Dot(x.BodyRotation, m_thisAgentUpdateArgs.BodyRotation));
- float qdelta2 = (float)Math.Abs(Quaternion.Dot(x.HeadRotation, m_thisAgentUpdateArgs.HeadRotation));
bool movementSignificant =
-// (qdelta1 > QDELTA) // significant if body rotation above threshold
- (qdelta1 < QDELTABODY) // higher angle lower cos
-// Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
+ (qdelta1 > QDELTA) // significant if body rotation above threshold
+ // Ignoring head rotation altogether, because it's not being used for anything interesting up the stack
// || (qdelta2 > QDELTA * 10) // significant if head rotation above threshold
- || (qdelta2 < QDELTAHEAD) // using cos above
|| (x.ControlFlags != m_thisAgentUpdateArgs.ControlFlags) // significant if control flags changed
|| (x.ControlFlags != (byte)AgentManager.ControlFlags.NONE) // significant if user supplying any movement update commands
|| (x.Far != m_thisAgentUpdateArgs.Far) // significant if far distance changed
@@ -6488,7 +6476,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
Action handlerRegionHandShakeReply = OnRegionHandShakeReply;
if (handlerRegionHandShakeReply != null)
{
-// Thread.Sleep(500);
+ Thread.Sleep(500);
handlerRegionHandShakeReply(this);
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index a3fdae1..b7c8594 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1750,10 +1750,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
endPoint,
sessionInfo);
+ // Send ack straight away to let the viewer know that the connection is active.
+ // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
+ // circuit code to the existing child agent. This is not particularly obvious.
+ SendAckImmediate(endPoint, uccp.Header.Sequence);
+
+ // We only want to send initial data to new clients, not ones which are being converted from child to root.
+ if (client != null)
+ {
+ AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
+ bool tp = (aCircuit.teleportFlags > 0);
+ // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
+ if (!tp)
+ client.SceneAgent.SendInitialDataToMe();
+ }
+
// Now we know we can handle more data
-// Thread.Sleep(200);
+ Thread.Sleep(200);
- // Obtain the pending queue and remove it from the cache
+ // Obtain the queue and remove it from the cache
Queue queue = null;
lock (m_pendingCache)
@@ -1775,21 +1790,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
PacketReceived(buf);
}
queue = null;
-
- // Send ack straight away to let the viewer know that the connection is active.
- // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
- // circuit code to the existing child agent. This is not particularly obvious.
- SendAckImmediate(endPoint, uccp.Header.Sequence);
-
- // We only want to send initial data to new clients, not ones which are being converted from child to root.
- if (client != null)
- {
- AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
- bool tp = (aCircuit.teleportFlags > 0);
- // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
- if (!tp)
- client.SceneAgent.SendInitialDataToMe();
- }
}
else
{
--
cgit v1.1
From 3cca5ec6674b413a419d3f1c42467e57fb883f56 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 4 Aug 2014 21:52:29 +0100
Subject: check...
---
.../Region/ClientStack/Linden/UDP/LLUDPServer.cs | 34 +++++++++++-----------
1 file changed, 17 insertions(+), 17 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index b7c8594..a3fdae1 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1750,25 +1750,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
endPoint,
sessionInfo);
- // Send ack straight away to let the viewer know that the connection is active.
- // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
- // circuit code to the existing child agent. This is not particularly obvious.
- SendAckImmediate(endPoint, uccp.Header.Sequence);
-
- // We only want to send initial data to new clients, not ones which are being converted from child to root.
- if (client != null)
- {
- AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
- bool tp = (aCircuit.teleportFlags > 0);
- // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
- if (!tp)
- client.SceneAgent.SendInitialDataToMe();
- }
-
// Now we know we can handle more data
- Thread.Sleep(200);
+// Thread.Sleep(200);
- // Obtain the queue and remove it from the cache
+ // Obtain the pending queue and remove it from the cache
Queue queue = null;
lock (m_pendingCache)
@@ -1790,6 +1775,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
PacketReceived(buf);
}
queue = null;
+
+ // Send ack straight away to let the viewer know that the connection is active.
+ // The client will be null if it already exists (e.g. if on a region crossing the client sends a use
+ // circuit code to the existing child agent. This is not particularly obvious.
+ SendAckImmediate(endPoint, uccp.Header.Sequence);
+
+ // We only want to send initial data to new clients, not ones which are being converted from child to root.
+ if (client != null)
+ {
+ AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
+ bool tp = (aCircuit.teleportFlags > 0);
+ // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
+ if (!tp)
+ client.SceneAgent.SendInitialDataToMe();
+ }
}
else
{
--
cgit v1.1
From bd3d58dd00ceafab961d684208c10fae20f89dc2 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Wed, 6 Aug 2014 04:54:14 +0100
Subject: try to make the baked textures cache work
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 73 ++++++++++++----------
1 file changed, 40 insertions(+), 33 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 34a2797..7f25f78 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -6535,7 +6535,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
WearableCacheItem[] cacheitems = new WearableCacheItem[appear.WearableData.Length];
for (int i=0; i AvatarWearable.MAX_WEARABLES)
maxWearablesLoop = AvatarWearable.MAX_WEARABLES;
- if (bakedTextureModule != null && cache != null)
+// if (bakedTextureModule != null && cache != null)
+ if (cache != null)
{
// 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
WearableCacheItem[] cacheItems = null;
ScenePresence p = m_scene.GetScenePresence(AgentId);
if (p.Appearance != null)
- if (p.Appearance.WearableCacheItems == null || p.Appearance.WearableCacheItemsDirty)
+ {
+ if (p.Appearance.WearableCacheItems == null)
{
- try
+ if (bakedTextureModule != null)
{
- cacheItems = bakedTextureModule.Get(AgentId);
- p.Appearance.WearableCacheItems = cacheItems;
- p.Appearance.WearableCacheItemsDirty = false;
- }
+ try
+ {
+ if (p.Appearance.WearableCacheItemsDirty)
+ {
+ cacheItems = bakedTextureModule.Get(AgentId);
+ p.Appearance.WearableCacheItems = cacheItems;
+ p.Appearance.WearableCacheItemsDirty = false;
+ }
+ }
- /*
- * The following Catch types DO NOT WORK, it jumps to the General Packet Exception Handler if you don't catch Exception!
- *
- catch (System.Net.Sockets.SocketException)
- {
- cacheItems = null;
- }
- catch (WebException)
- {
- cacheItems = null;
- }
- catch (InvalidOperationException)
- {
- cacheItems = null;
- } */
- catch (Exception)
- {
- cacheItems = null;
+ /*
+ * The following Catch types DO NOT WORK, it jumps to the General Packet Exception Handler if you don't catch Exception!
+ *
+ catch (System.Net.Sockets.SocketException)
+ {
+ cacheItems = null;
+ }
+ catch (WebException)
+ {
+ cacheItems = null;
+ }
+ catch (InvalidOperationException)
+ {
+ cacheItems = null;
+ } */
+ catch (Exception)
+ {
+ cacheItems = null;
+ }
}
-
}
else if (p.Appearance.WearableCacheItems != null)
{
cacheItems = p.Appearance.WearableCacheItems;
}
+ }
if (cache != null && cacheItems != null)
{
@@ -12077,8 +12088,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
item.TextureAsset.Temporary = true;
cache.Store(item.TextureAsset);
}
-
-
}
}
@@ -12136,13 +12145,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
-
-
if (cache.GetCached(cachedresp.WearableData[i].TextureID.ToString()) == null)
cachedresp.WearableData[i].TextureID = UUID.Zero;
//UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- else
- cachedresp.WearableData[i].TextureID = UUID.Zero;
+// else
+// cachedresp.WearableData[i].TextureID = UUID.Zero;
// UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
cachedresp.WearableData[i].HostName = new byte[0];
}
--
cgit v1.1
From 66dea8fe05dbf0f9783f520cddf4d3aa700015d6 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Wed, 6 Aug 2014 05:17:30 +0100
Subject: some debug to remove later
---
OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs | 6 ++++++
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 4 +++-
2 files changed, 9 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
index 47988dd..19afe97 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
@@ -268,6 +268,12 @@ namespace OpenSim.Region.ClientStack.Linden
}
}
}
+
+ for (int iter = 0; iter < maxCacheitemsLoop; iter++)
+ {
+ m_log.Debug("[CacheitemsLeaving] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
+ cacheItems[iter].TextureID);
+ }
}
public void PostInitialise()
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 7f25f78..0e8c7ca 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -12041,6 +12041,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
if (bakedTextureModule != null)
{
+ m_log.Debug("[ HandleAgentTextureCached] bakedTextureModule");
try
{
if (p.Appearance.WearableCacheItemsDirty)
@@ -12072,7 +12073,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
}
- else if (p.Appearance.WearableCacheItems != null)
+
+ if (p.Appearance.WearableCacheItems != null)
{
cacheItems = p.Appearance.WearableCacheItems;
}
--
cgit v1.1
From 552b4e45e8700cc71bbbea18b5bad167998a74e4 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Wed, 6 Aug 2014 05:56:10 +0100
Subject: bakemodule didnt like last changes
---
.../ClientStack/Linden/Caps/UploadBakedTextureModule.cs | 8 +++-----
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 13 +++++--------
2 files changed, 8 insertions(+), 13 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
index 19afe97..2da653d 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
@@ -254,18 +254,16 @@ namespace OpenSim.Region.ClientStack.Linden
}
}
-
-
p.Appearance.WearableCacheItems = cacheItems;
-
-
-
+
if (m_BakedTextureModule != null)
{
m_BakedTextureModule.Store(remoteClient.AgentId, cacheItems);
p.Appearance.WearableCacheItemsDirty = true;
}
+ else
+ p.Appearance.WearableCacheItemsDirty = false;
}
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 0e8c7ca..08b6cb4 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -12037,19 +12037,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
ScenePresence p = m_scene.GetScenePresence(AgentId);
if (p.Appearance != null)
{
- if (p.Appearance.WearableCacheItems == null)
+ if (p.Appearance.WearableCacheItems == null || p.Appearance.WearableCacheItemsDirty)
{
if (bakedTextureModule != null)
{
m_log.Debug("[ HandleAgentTextureCached] bakedTextureModule");
try
{
- if (p.Appearance.WearableCacheItemsDirty)
- {
- cacheItems = bakedTextureModule.Get(AgentId);
- p.Appearance.WearableCacheItems = cacheItems;
- p.Appearance.WearableCacheItemsDirty = false;
- }
+ cacheItems = bakedTextureModule.Get(AgentId);
+ p.Appearance.WearableCacheItems = cacheItems;
+ p.Appearance.WearableCacheItemsDirty = false;
}
/*
@@ -12074,7 +12071,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
- if (p.Appearance.WearableCacheItems != null)
+ else if (p.Appearance.WearableCacheItems != null)
{
cacheItems = p.Appearance.WearableCacheItems;
}
--
cgit v1.1
From c3f9c99fb32d15e57b24502b71c79fe028ed3007 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Thu, 7 Aug 2014 05:20:45 +0100
Subject: DANGER... changed bakedtextures caching. Assuming grid baking is
cache only, reduced number of accesses to it. TESTING
---
.../Linden/Caps/UploadBakedTextureModule.cs | 124 ++++++++++-----------
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 110 +++++++-----------
2 files changed, 99 insertions(+), 135 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
index 2da653d..50e9275 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
@@ -96,9 +96,7 @@ namespace OpenSim.Region.ClientStack.Linden
s.EventManager.OnRemovePresence -= DeRegisterPresence;
m_BakedTextureModule = null;
m_scene = null;
- }
-
-
+ }
public void RegionLoaded(Scene s)
{
@@ -110,44 +108,58 @@ namespace OpenSim.Region.ClientStack.Linden
private void DeRegisterPresence(UUID agentId)
{
- ScenePresence presence = null;
- if (m_scene.TryGetScenePresence(agentId, out presence))
+// ScenePresence presence = null;
+// if (m_scene.TryGetScenePresence(agentId, out presence))
{
- presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings;
+// presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings;
}
}
private void RegisterNewPresence(ScenePresence presence)
{
- presence.ControllingClient.OnSetAppearance += CaptureAppearanceSettings;
-
+// presence.ControllingClient.OnSetAppearance += CaptureAppearanceSettings;
}
- private void CaptureAppearanceSettings(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 avSize, WearableCacheItem[] cacheItems)
- {
- int maxCacheitemsLoop = cacheItems.Length;
- if (maxCacheitemsLoop > AvatarWearable.MAX_WEARABLES)
- {
- maxCacheitemsLoop = AvatarWearable.MAX_WEARABLES;
- m_log.WarnFormat("[CACHEDBAKES]: Too Many Cache items Provided {0}, the max is {1}. Truncating!", cacheItems.Length, AvatarWearable.MAX_WEARABLES);
- }
-
- m_BakedTextureModule = m_scene.RequestModuleInterface();
- if (cacheItems.Length > 0)
- {
- m_log.Debug("[Cacheitems]: " + cacheItems.Length);
- for (int iter = 0; iter < maxCacheitemsLoop; iter++)
- {
- m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
- cacheItems[iter].TextureID);
- }
-
- ScenePresence p = null;
- if (m_scene.TryGetScenePresence(remoteClient.AgentId, out p))
+/* not in use. work done in AvatarFactoryModule ValidateBakedTextureCache() and UpdateBakedTextureCache()
+ private void CaptureAppearanceSettings(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 avSize, WearableCacheItem[] cacheItems)
{
+ // if cacheItems.Length > 0 viewer is giving us current textures information.
+ // baked ones should had been uploaded and in assets cache as local itens
+
+
+ if (cacheItems.Length == 0)
+ return; // no textures information, nothing to do
+
+ ScenePresence p = null;
+ if (!m_scene.TryGetScenePresence(remoteClient.AgentId, out p))
+ return; // what are we doing if there is no presence to cache for?
+
+ if (p.IsDeleted)
+ return; // does this really work?
+
+ int maxCacheitemsLoop = cacheItems.Length;
+ if (maxCacheitemsLoop > 20)
+ {
+ maxCacheitemsLoop = AvatarWearable.MAX_WEARABLES;
+ m_log.WarnFormat("[CACHEDBAKES]: Too Many Cache items Provided {0}, the max is {1}. Truncating!", cacheItems.Length, AvatarWearable.MAX_WEARABLES);
+ }
+
+ m_BakedTextureModule = m_scene.RequestModuleInterface();
+
+
+ // some nice debug
+ m_log.Debug("[Cacheitems]: " + cacheItems.Length);
+ for (int iter = 0; iter < maxCacheitemsLoop; iter++)
+ {
+ m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
+ cacheItems[iter].TextureID);
+ }
+
+ // p.Appearance.WearableCacheItems is in memory primary cashID to textures mapper
WearableCacheItem[] existingitems = p.Appearance.WearableCacheItems;
+
if (existingitems == null)
{
if (m_BakedTextureModule != null)
@@ -161,38 +173,22 @@ namespace OpenSim.Region.ClientStack.Linden
p.Appearance.WearableCacheItems = savedcache;
p.Appearance.WearableCacheItemsDirty = false;
}
-
}
- /*
- * The following Catch types DO NOT WORK with m_BakedTextureModule.Get
- * it jumps to the General Packet Exception Handler if you don't catch Exception!
- *
- catch (System.Net.Sockets.SocketException)
- {
- cacheItems = null;
- }
- catch (WebException)
- {
- cacheItems = null;
- }
- catch (InvalidOperationException)
- {
- cacheItems = null;
- } */
+
catch (Exception)
{
- // The service logs a sufficient error message.
+ // The service logs a sufficient error message.
}
-
+
if (savedcache != null)
existingitems = savedcache;
}
}
+
// Existing items null means it's a fully new appearance
if (existingitems == null)
{
-
for (int i = 0; i < maxCacheitemsLoop; i++)
{
if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex)
@@ -205,7 +201,7 @@ namespace OpenSim.Region.ClientStack.Linden
AppearanceManager.DEFAULT_AVATAR_TEXTURE;
continue;
}
- cacheItems[i].TextureID =face.TextureID;
+ cacheItems[i].TextureID = face.TextureID;
if (m_scene.AssetService != null)
cacheItems[i].TextureAsset =
m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString());
@@ -214,15 +210,10 @@ namespace OpenSim.Region.ClientStack.Linden
{
m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}. Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length);
}
-
-
}
}
else
-
-
- {
- // for each uploaded baked texture
+ {
for (int i = 0; i < maxCacheitemsLoop; i++)
{
if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex)
@@ -253,27 +244,24 @@ namespace OpenSim.Region.ClientStack.Linden
}
}
}
-
p.Appearance.WearableCacheItems = cacheItems;
-
+
if (m_BakedTextureModule != null)
{
m_BakedTextureModule.Store(remoteClient.AgentId, cacheItems);
p.Appearance.WearableCacheItemsDirty = true;
-
+
}
else
p.Appearance.WearableCacheItemsDirty = false;
- }
- }
-
- for (int iter = 0; iter < maxCacheitemsLoop; iter++)
- {
- m_log.Debug("[CacheitemsLeaving] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
- cacheItems[iter].TextureID);
- }
- }
+ for (int iter = 0; iter < maxCacheitemsLoop; iter++)
+ {
+ m_log.Debug("[CacheitemsLeaving] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" +
+ cacheItems[iter].TextureID);
+ }
+ }
+ */
public void PostInitialise()
{
}
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 08b6cb4..38a9af3 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3684,6 +3684,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
avp.Sender.IsTrial = false;
avp.Sender.ID = agentID;
avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0];
+
+ // this need be use in future
+ // avp.AppearanceData[0].AppearanceVersion = 0;
+ // avp.AppearanceData[0].CofVersion = 0;
+
//m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
OutPacket(avp, ThrottleOutPacketType.Task);
}
@@ -12006,8 +12011,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse);
if (cachedtex.AgentData.SessionID != SessionId)
- return false;
-
+ return false;
// TODO: don't create new blocks if recycling an old packet
cachedresp.AgentData.AgentID = AgentId;
@@ -12022,23 +12026,27 @@ namespace OpenSim.Region.ClientStack.LindenUDP
//WearableCacheItem[] items = fac.GetCachedItems(AgentId);
IAssetService cache = m_scene.AssetService;
- IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface();
//bakedTextureModule = null;
int maxWearablesLoop = cachedtex.WearableData.Length;
if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES)
maxWearablesLoop = AvatarWearable.MAX_WEARABLES;
-// if (bakedTextureModule != null && cache != null)
+ int cacheHits = 0;
+
if (cache != null)
{
// 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
WearableCacheItem[] cacheItems = null;
+
ScenePresence p = m_scene.GetScenePresence(AgentId);
- if (p.Appearance != null)
+
+ if (p!= null && p.Appearance != null)
{
- if (p.Appearance.WearableCacheItems == null || p.Appearance.WearableCacheItemsDirty)
+ /* we should only check bakedTextureModule at login or when appearance changes
+ if (p.Appearance.WearableCacheItems == null) // currently with a caching only bakemodule Appearance.Wearables.dirty as no use
{
+ IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface();
if (bakedTextureModule != null)
{
m_log.Debug("[ HandleAgentTextureCached] bakedTextureModule");
@@ -12047,23 +12055,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
cacheItems = bakedTextureModule.Get(AgentId);
p.Appearance.WearableCacheItems = cacheItems;
p.Appearance.WearableCacheItemsDirty = false;
- }
- /*
- * The following Catch types DO NOT WORK, it jumps to the General Packet Exception Handler if you don't catch Exception!
- *
- catch (System.Net.Sockets.SocketException)
- {
- cacheItems = null;
- }
- catch (WebException)
- {
- cacheItems = null;
+ if (cacheItems != null)
+ {
+ foreach (WearableCacheItem item in cacheItems)
+ {
+ if (item.TextureAsset != null)
+ {
+ item.TextureAsset.Temporary = true;
+ item.TextureAsset.Local = true;
+ cache.Store(item.TextureAsset);
+ }
+ }
+ }
}
- catch (InvalidOperationException)
- {
- cacheItems = null;
- } */
+
catch (Exception)
{
cacheItems = null;
@@ -12075,36 +12081,23 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
cacheItems = p.Appearance.WearableCacheItems;
}
+*/
+ cacheItems = p.Appearance.WearableCacheItems;
}
- if (cache != null && cacheItems != null)
- {
- foreach (WearableCacheItem item in cacheItems)
- {
-
- if (cache.GetCached(item.TextureID.ToString()) == null)
- {
- item.TextureAsset.Temporary = true;
- cache.Store(item.TextureAsset);
- }
- }
- }
-
if (cacheItems != null)
{
-
for (int i = 0; i < maxWearablesLoop; i++)
{
- WearableCacheItem item =
- WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex,cacheItems);
+ int idx = cachedtex.WearableData[i].TextureIndex;
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex= cachedtex.WearableData[i].TextureIndex;
+ cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
cachedresp.WearableData[i].HostName = new byte[0];
- if (item != null && cachedtex.WearableData[i].ID == item.CacheId)
+ if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
{
-
- cachedresp.WearableData[i].TextureID = item.TextureID;
+ cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
+ cacheHits++;
}
else
{
@@ -12124,36 +12117,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
}
- else
+ else // no cache
{
- if (cache == null)
+ for (int i = 0; i < maxWearablesLoop; i++)
{
- for (int i = 0; i < maxWearablesLoop; i++)
- {
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- cachedresp.WearableData[i].HostName = new byte[0];
- }
- }
- else
- {
- for (int i = 0; i < maxWearablesLoop; i++)
- {
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
-
- if (cache.GetCached(cachedresp.WearableData[i].TextureID.ToString()) == null)
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
-// else
-// cachedresp.WearableData[i].TextureID = UUID.Zero;
- // UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- cachedresp.WearableData[i].HostName = new byte[0];
- }
+ cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
+ cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
+ cachedresp.WearableData[i].TextureID = UUID.Zero;
+ cachedresp.WearableData[i].HostName = new byte[0];
}
}
+
+ m_log.DebugFormat("texture cached: hits {0}", cacheHits);
+
cachedresp.Header.Zerocoded = true;
OutPacket(cachedresp, ThrottleOutPacketType.Task);
--
cgit v1.1
From 1408c9eee7eb8b73b49255f6c7bf81f4a759d01c Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Thu, 7 Aug 2014 07:55:56 +0100
Subject: reply to cached checks with same serial number
---
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 38a9af3..def1f8e 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -12016,8 +12016,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
// TODO: don't create new blocks if recycling an old packet
cachedresp.AgentData.AgentID = AgentId;
cachedresp.AgentData.SessionID = m_sessionId;
- cachedresp.AgentData.SerialNum = m_cachedTextureSerial;
- m_cachedTextureSerial++;
+// cachedresp.AgentData.SerialNum = m_cachedTextureSerial;
+// m_cachedTextureSerial++;
+ cachedresp.AgentData.SerialNum = cachedtex.AgentData.SerialNum;
cachedresp.WearableData =
new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length];
@@ -12094,7 +12095,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
cachedresp.WearableData[i].HostName = new byte[0];
- if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
+ if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
{
cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
cacheHits++;
--
cgit v1.1
From dfa9ba0937f6e2d30e1d541d64533ede4ecb671e Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Thu, 7 Aug 2014 08:47:03 +0100
Subject: minor clean, dont check for cache if we aren't using it..
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 104 +++++----------------
1 file changed, 22 insertions(+), 82 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
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
AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse);
if (cachedtex.AgentData.SessionID != SessionId)
- return false;
+ return false;
// TODO: don't create new blocks if recycling an old packet
cachedresp.AgentData.AgentID = AgentId;
cachedresp.AgentData.SessionID = m_sessionId;
-// cachedresp.AgentData.SerialNum = m_cachedTextureSerial;
-// m_cachedTextureSerial++;
cachedresp.AgentData.SerialNum = cachedtex.AgentData.SerialNum;
cachedresp.WearableData =
new AgentCachedTextureResponsePacket.WearableDataBlock[cachedtex.WearableData.Length];
- //IAvatarFactoryModule fac = m_scene.RequestModuleInterface();
- // var item = fac.GetBakedTextureFaces(AgentId);
- //WearableCacheItem[] items = fac.GetCachedItems(AgentId);
-
- IAssetService cache = m_scene.AssetService;
- //bakedTextureModule = null;
int maxWearablesLoop = cachedtex.WearableData.Length;
if (maxWearablesLoop > AvatarWearable.MAX_WEARABLES)
maxWearablesLoop = AvatarWearable.MAX_WEARABLES;
int cacheHits = 0;
- if (cache != null)
- {
- // 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
-
- WearableCacheItem[] cacheItems = null;
-
- ScenePresence p = m_scene.GetScenePresence(AgentId);
-
- if (p!= null && p.Appearance != null)
- {
- /* we should only check bakedTextureModule at login or when appearance changes
- if (p.Appearance.WearableCacheItems == null) // currently with a caching only bakemodule Appearance.Wearables.dirty as no use
- {
- IBakedTextureModule bakedTextureModule = m_scene.RequestModuleInterface();
- if (bakedTextureModule != null)
- {
- m_log.Debug("[ HandleAgentTextureCached] bakedTextureModule");
- try
- {
- cacheItems = bakedTextureModule.Get(AgentId);
- p.Appearance.WearableCacheItems = cacheItems;
- p.Appearance.WearableCacheItemsDirty = false;
+ // 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
- if (cacheItems != null)
- {
- foreach (WearableCacheItem item in cacheItems)
- {
- if (item.TextureAsset != null)
- {
- item.TextureAsset.Temporary = true;
- item.TextureAsset.Local = true;
- cache.Store(item.TextureAsset);
- }
- }
- }
- }
+ WearableCacheItem[] cacheItems = null;
- catch (Exception)
- {
- cacheItems = null;
- }
- }
- }
+ ScenePresence p = m_scene.GetScenePresence(AgentId);
- else if (p.Appearance.WearableCacheItems != null)
- {
- cacheItems = p.Appearance.WearableCacheItems;
- }
-*/
- cacheItems = p.Appearance.WearableCacheItems;
- }
+ if (p != null && p.Appearance != null)
+ {
+ cacheItems = p.Appearance.WearableCacheItems;
+ }
- if (cacheItems != null)
+ if (cacheItems != null)
+ {
+ for (int i = 0; i < maxWearablesLoop; i++)
{
- for (int i = 0; i < maxWearablesLoop; i++)
- {
- int idx = cachedtex.WearableData[i].TextureIndex;
+ int idx = cachedtex.WearableData[i].TextureIndex;
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
- cachedresp.WearableData[i].HostName = new byte[0];
- if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
- {
- cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
- cacheHits++;
- }
- else
- {
- cachedresp.WearableData[i].TextureID = UUID.Zero;
- }
+ cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
+ cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
+ cachedresp.WearableData[i].HostName = new byte[0];
+ if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId)
+ {
+ cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID;
+ cacheHits++;
}
- }
- else
- {
- for (int i = 0; i < maxWearablesLoop; i++)
+ else
{
- cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
- cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
cachedresp.WearableData[i].TextureID = UUID.Zero;
- //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
- cachedresp.WearableData[i].HostName = new byte[0];
}
}
}
- else // no cache
+ else
{
for (int i = 0; i < maxWearablesLoop; i++)
{
cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock();
cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex;
cachedresp.WearableData[i].TextureID = UUID.Zero;
+ //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46");
cachedresp.WearableData[i].HostName = new byte[0];
}
}
--
cgit v1.1