aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-06-07 18:49:22 +0100
committerJustin Clark-Casey (justincc)2010-06-07 19:14:40 +0100
commit912f0c7fde1d3ec159b9f9b61136a2ac64e7d9dd (patch)
tree7320f592a1400241bec3855d48ba3036f5033744 /OpenSim/Region/Framework/Scenes
parentreapply fix for double sending of attachment update on standalone region cros... (diff)
downloadopensim-SC-912f0c7fde1d3ec159b9f9b61136a2ac64e7d9dd.zip
opensim-SC-912f0c7fde1d3ec159b9f9b61136a2ac64e7d9dd.tar.gz
opensim-SC-912f0c7fde1d3ec159b9f9b61136a2ac64e7d9dd.tar.bz2
opensim-SC-912f0c7fde1d3ec159b9f9b61136a2ac64e7d9dd.tar.xz
Stop some hud components disappearing on region crossings
If viewers (or at least, Linden Viewer 1.23.5) receive child hud object updates before the root prim, then the children are not displayed. Updates were being queued in LLClientView in the right order (root first) but were being sent in a random order since they were all at the same prioritization This commit prioritizes the root prim of a hud to its highest level when queued. I'm not sure if the periodic reprioritization triggered via ScenePresence might reset this, but boosting priority appears to work so far. Also committed is a belt and braces mechanism in LLClientView to prevent child hud prim being sent out before their root, but since this doesn't appear to be needed it is currently commented out.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs31
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs4
2 files changed, 30 insertions, 5 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 33624a2..479ee4d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2929,10 +2929,33 @@ namespace OpenSim.Region.Framework.Scenes
2929 //isattachment = ParentGroup.RootPart.IsAttachment; 2929 //isattachment = ParentGroup.RootPart.IsAttachment;
2930 2930
2931 byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A}; 2931 byte[] color = new byte[] {m_color.R, m_color.G, m_color.B, m_color.A};
2932 remoteClient.SendPrimitiveToClient(new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape, 2932
2933 lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID, 2933 double priority = ParentGroup.GetUpdatePriority(remoteClient);
2934 m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment, 2934 if (IsRoot && IsAttachment)
2935 AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, ParentGroup.GetUpdatePriority(remoteClient))); 2935 {
2936 if (double.MinValue == priority)
2937 {
2938 m_log.WarnFormat(
2939 "[SOP]: Couldn't raise update priority of root part for attachment {0} {1} because priority is already highest value",
2940 Name, LocalId);
2941 }
2942 else
2943 {
2944 priority = double.MinValue;
2945 }
2946 }
2947
2948 remoteClient.SendPrimitiveToClient(
2949 new SendPrimitiveData(m_regionHandle, m_parentGroup.GetTimeDilation(), LocalId, m_shape,
2950 lPos, Velocity, Acceleration, RotationOffset, AngularVelocity, clientFlags, m_uuid, _ownerID,
2951 m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment,
2952 AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius, priority));
2953
2954// if (IsRoot && IsAttachment)
2955// {
2956// ScenePresence sp = ParentGroup.Scene.GetScenePresence(remoteClient.AgentId);
2957// remoteClient.ReprioritizeUpdates(StateUpdateTypes.PrimitiveFull, sp.UpdatePriority);
2958// }
2936 } 2959 }
2937 2960
2938 /// <summary> 2961 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4973663..18f2fd2 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3871,8 +3871,10 @@ namespace OpenSim.Region.Framework.Scenes
3871 } 3871 }
3872 } 3872 }
3873 3873
3874 private double UpdatePriority(UpdatePriorityData data) 3874 internal double UpdatePriority(UpdatePriorityData data)
3875 { 3875 {
3876// m_log.DebugFormat("[SCENE PRESENCE]: Reprioritizing updates to client {0} for {1}", Name, data.localID);
3877
3876 EntityBase entity; 3878 EntityBase entity;
3877 SceneObjectGroup group; 3879 SceneObjectGroup group;
3878 3880