diff options
author | Melanie | 2013-02-12 01:02:16 +0100 |
---|---|---|
committer | Melanie | 2013-02-12 01:02:16 +0100 |
commit | 04235e58e87ae42617111cad2884e42785914d4e (patch) | |
tree | 9cccb05ea7355be02d2e4d9bef5b9b1da3225afa /OpenSim/Region | |
parent | Make keyframes use the sim's frame timer (diff) | |
download | opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.zip opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.tar.gz opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.tar.bz2 opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.tar.xz |
Push updates from keyframe directly to the front of the output queue rather
than through the update system.
Diffstat (limited to '')
4 files changed, 44 insertions, 9 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index ca15e3e..8d46415 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -3721,6 +3721,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3721 | /// </summary> | 3721 | /// </summary> |
3722 | public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) | 3722 | public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) |
3723 | { | 3723 | { |
3724 | if ((updateFlags & PrimUpdateFlags.Immediate) != 0) | ||
3725 | { | ||
3726 | SendUnqueuedTerseUpdate((SceneObjectPart)entity); | ||
3727 | return; | ||
3728 | } | ||
3729 | |||
3724 | if (entity is SceneObjectPart) | 3730 | if (entity is SceneObjectPart) |
3725 | { | 3731 | { |
3726 | SceneObjectPart e = (SceneObjectPart)entity; | 3732 | SceneObjectPart e = (SceneObjectPart)entity; |
@@ -4075,6 +4081,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4075 | ProcessEntityUpdates(-1); | 4081 | ProcessEntityUpdates(-1); |
4076 | } | 4082 | } |
4077 | 4083 | ||
4084 | public void SendUnqueuedTerseUpdate(SceneObjectPart part) | ||
4085 | { | ||
4086 | ImprovedTerseObjectUpdatePacket packet | ||
4087 | = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket( | ||
4088 | PacketType.ImprovedTerseObjectUpdate); | ||
4089 | packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; | ||
4090 | packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f); | ||
4091 | packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; | ||
4092 | |||
4093 | packet.ObjectData[0] = CreateImprovedTerseBlock(part, false); | ||
4094 | |||
4095 | OutPacket(packet, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority); | ||
4096 | } | ||
4097 | |||
4078 | #endregion Primitive Packet/Data Sending Methods | 4098 | #endregion Primitive Packet/Data Sending Methods |
4079 | 4099 | ||
4080 | // These are used to implement an adaptive backoff in the number | 4100 | // These are used to implement an adaptive backoff in the number |
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs index 75b16dc..722c031 100644 --- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs +++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | |||
@@ -417,7 +417,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
417 | 417 | ||
418 | m_group.RootPart.Velocity = Vector3.Zero; | 418 | m_group.RootPart.Velocity = Vector3.Zero; |
419 | m_group.RootPart.AngularVelocity = Vector3.Zero; | 419 | m_group.RootPart.AngularVelocity = Vector3.Zero; |
420 | m_group.SendGroupRootTerseUpdate(); | 420 | m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate); |
421 | // m_group.RootPart.ScheduleTerseUpdate(); | 421 | // m_group.RootPart.ScheduleTerseUpdate(); |
422 | m_frames.Clear(); | 422 | m_frames.Clear(); |
423 | } | 423 | } |
@@ -429,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
429 | 429 | ||
430 | m_group.RootPart.Velocity = Vector3.Zero; | 430 | m_group.RootPart.Velocity = Vector3.Zero; |
431 | m_group.RootPart.AngularVelocity = Vector3.Zero; | 431 | m_group.RootPart.AngularVelocity = Vector3.Zero; |
432 | m_group.SendGroupRootTerseUpdate(); | 432 | m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate); |
433 | // m_group.RootPart.ScheduleTerseUpdate(); | 433 | // m_group.RootPart.ScheduleTerseUpdate(); |
434 | 434 | ||
435 | } | 435 | } |
@@ -551,7 +551,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
551 | if (m_group.RootPart.Velocity != Vector3.Zero) | 551 | if (m_group.RootPart.Velocity != Vector3.Zero) |
552 | { | 552 | { |
553 | m_group.RootPart.Velocity = Vector3.Zero; | 553 | m_group.RootPart.Velocity = Vector3.Zero; |
554 | m_group.SendGroupRootTerseUpdate(); | 554 | m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate); |
555 | 555 | ||
556 | } | 556 | } |
557 | return; | 557 | return; |
@@ -695,7 +695,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
695 | 695 | ||
696 | if (update) | 696 | if (update) |
697 | { | 697 | { |
698 | m_group.SendGroupRootTerseUpdate(); | 698 | m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate); |
699 | } | 699 | } |
700 | } | 700 | } |
701 | 701 | ||
@@ -731,7 +731,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
731 | if (m_group.RootPart.Velocity != Vector3.Zero) | 731 | if (m_group.RootPart.Velocity != Vector3.Zero) |
732 | { | 732 | { |
733 | m_group.RootPart.Velocity = Vector3.Zero; | 733 | m_group.RootPart.Velocity = Vector3.Zero; |
734 | m_group.SendGroupRootTerseUpdate(); | 734 | m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate); |
735 | // m_group.RootPart.ScheduleTerseUpdate(); | 735 | // m_group.RootPart.ScheduleTerseUpdate(); |
736 | } | 736 | } |
737 | } | 737 | } |
@@ -743,7 +743,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
743 | if (m_group != null) | 743 | if (m_group != null) |
744 | { | 744 | { |
745 | m_group.RootPart.Velocity = Vector3.Zero; | 745 | m_group.RootPart.Velocity = Vector3.Zero; |
746 | m_group.SendGroupRootTerseUpdate(); | 746 | m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate); |
747 | // m_group.RootPart.ScheduleTerseUpdate(); | 747 | // m_group.RootPart.ScheduleTerseUpdate(); |
748 | 748 | ||
749 | if (m_running) | 749 | if (m_running) |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index ed1bbd8..910f42e 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2638,10 +2638,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
2638 | /// </summary> | 2638 | /// </summary> |
2639 | public void SendGroupRootTerseUpdate() | 2639 | public void SendGroupRootTerseUpdate() |
2640 | { | 2640 | { |
2641 | SendGroupRootTerseUpdate(0); | ||
2642 | } | ||
2643 | |||
2644 | public void SendGroupRootTerseUpdate(PrimUpdateFlags flags) | ||
2645 | { | ||
2641 | if (IsDeleted) | 2646 | if (IsDeleted) |
2642 | return; | 2647 | return; |
2643 | 2648 | ||
2644 | RootPart.SendTerseUpdateToAllClients(); | 2649 | RootPart.SendTerseUpdateToAllClients(flags); |
2645 | } | 2650 | } |
2646 | 2651 | ||
2647 | public void QueueForUpdateCheck() | 2652 | public void QueueForUpdateCheck() |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 20a6626..7e94eda 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -3315,6 +3315,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3315 | /// </summary> | 3315 | /// </summary> |
3316 | public void SendTerseUpdateToAllClients() | 3316 | public void SendTerseUpdateToAllClients() |
3317 | { | 3317 | { |
3318 | SendTerseUpdateToAllClients(0); | ||
3319 | } | ||
3320 | |||
3321 | public void SendTerseUpdateToAllClients(PrimUpdateFlags flags) | ||
3322 | { | ||
3318 | if (ParentGroup == null || ParentGroup.Scene == null) | 3323 | if (ParentGroup == null || ParentGroup.Scene == null) |
3319 | return; | 3324 | return; |
3320 | 3325 | ||
@@ -3328,7 +3333,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3328 | 3333 | ||
3329 | ParentGroup.Scene.ForEachClient(delegate(IClientAPI client) | 3334 | ParentGroup.Scene.ForEachClient(delegate(IClientAPI client) |
3330 | { | 3335 | { |
3331 | SendTerseUpdateToClient(client); | 3336 | SendTerseUpdateToClient(client, flags); |
3332 | }); | 3337 | }); |
3333 | } | 3338 | } |
3334 | 3339 | ||
@@ -5133,6 +5138,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
5133 | 5138 | ||
5134 | public void SendTerseUpdateToClient(IClientAPI remoteClient) | 5139 | public void SendTerseUpdateToClient(IClientAPI remoteClient) |
5135 | { | 5140 | { |
5141 | SendTerseUpdateToClient(remoteClient, 0); | ||
5142 | } | ||
5143 | |||
5144 | public void SendTerseUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags flags) | ||
5145 | { | ||
5136 | if (ParentGroup.IsDeleted) | 5146 | if (ParentGroup.IsDeleted) |
5137 | return; | 5147 | return; |
5138 | 5148 | ||
@@ -5146,7 +5156,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
5146 | remoteClient.SendEntityUpdate( | 5156 | remoteClient.SendEntityUpdate( |
5147 | this, | 5157 | this, |
5148 | PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity | 5158 | PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity |
5149 | | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity); | 5159 | | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity | flags); |
5150 | 5160 | ||
5151 | ParentGroup.Scene.StatsReporter.AddObjectUpdates(1); | 5161 | ParentGroup.Scene.StatsReporter.AddObjectUpdates(1); |
5152 | } | 5162 | } |