From e9e72fe9079ab011dc43199496fb9a9dc7ea5b3a Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Fri, 9 Nov 2007 21:01:55 +0000 Subject: [PATCH] * Added an internal throttle on ODE physics updates * Added a ThrottleUpdates member to PhysicsActor to expose 'throttle' ability to the Scene. * Updated the ode.dll file with a fix to invalid data passed to ODE's heightfield collision calculator. --- .../BasicPhysicsPlugin/BasicPhysicsPlugin.cs | 6 +++- .../Physics/BulletXPlugin/BulletXPlugin.cs | 5 +++ .../Region/Physics/Manager/PhysicsActor.cs | 7 ++++ OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 32 ++++++++++++++++-- .../Region/Physics/PhysXPlugin/PhysXPlugin.cs | 11 +++++- bin/ode.dll | Bin 630784 -> 630784 bytes 6 files changed, 56 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs index d5cb99f6f0..63773922fc 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs @@ -201,7 +201,11 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin get { return false; } set { return; } } - + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } public override bool Flying { get { return flying; } diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index 2e6e40fad8..c733adbeab 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs @@ -742,6 +742,11 @@ namespace OpenSim.Region.Physics.BulletXPlugin get { return flying; } set { flying = value; } } + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } public override bool IsColliding { get { return iscolliding; } diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 049da965a3..9ce7cf3b2f 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -88,6 +88,8 @@ namespace OpenSim.Region.Physics.Manager public abstract bool Flying { get; set; } + public abstract bool ThrottleUpdates { get; set; } + public abstract bool IsColliding { get; set; } public abstract PhysicsVector RotationalVelocity { get; set; } @@ -148,6 +150,11 @@ namespace OpenSim.Region.Physics.Manager get { return false; } set { return; } } + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } public override bool IsColliding { diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index 79f51a1a03..decf93f66d 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs @@ -212,6 +212,11 @@ namespace OpenSim.Region.Physics.OdePlugin // We only need to test p2 for 'jump crouch purposes' p2.IsColliding = true; + if (count > 3) + { + p2.ThrottleUpdates = true; + } + //System.Console.WriteLine(count.ToString()); //System.Console.WriteLine("near: A collision was detected between {1} and {2}", 0, name1, name2); } } @@ -667,7 +672,11 @@ namespace OpenSim.Region.Physics.OdePlugin get { return false; } set { return; } } - + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } public override bool Flying { get { return flying; } @@ -929,6 +938,8 @@ namespace OpenSim.Region.Physics.OdePlugin public IntPtr _triMeshData; private bool iscolliding = false; private bool m_isphysical = false; + private bool m_throttleUpdates = false; + private int throttleCounter = 0; public bool _zeroFlag = false; private bool m_lastUpdateSent = false; @@ -1098,7 +1109,11 @@ namespace OpenSim.Region.Physics.OdePlugin get { return iscolliding; } set { iscolliding = value; } } - + public override bool ThrottleUpdates + { + get { return m_throttleUpdates; } + set { m_throttleUpdates=value; } + } public override PhysicsVector Position { @@ -1347,6 +1362,8 @@ namespace OpenSim.Region.Physics.OdePlugin m_rotationalVelocity.Y = 0; m_rotationalVelocity.Z = 0; base.RequestPhysicsterseUpdate(); + m_throttleUpdates = false; + throttleCounter = 0; _zeroFlag = true; } @@ -1382,6 +1399,8 @@ namespace OpenSim.Region.Physics.OdePlugin m_rotationalVelocity.Z = 0; if (!m_lastUpdateSent) { + m_throttleUpdates = false; + throttleCounter = 0; base.RequestPhysicsterseUpdate(); m_lastUpdateSent = true; } @@ -1406,7 +1425,14 @@ namespace OpenSim.Region.Physics.OdePlugin _orientation.y = ori.Y; _orientation.z = ori.Z; m_lastUpdateSent = false; - base.RequestPhysicsterseUpdate(); + if (!m_throttleUpdates || throttleCounter > 15) + { + base.RequestPhysicsterseUpdate(); + } + else + { + throttleCounter++; + } } m_lastposition = l_position; } diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index d282e9da6c..76121ae962 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -204,7 +204,11 @@ namespace OpenSim.Region.Physics.PhysXPlugin get { return false; } set { return; } } - + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } public override bool Flying { get { return flying; } @@ -335,6 +339,11 @@ namespace OpenSim.Region.Physics.PhysXPlugin get { return false; } set { return; } } + public override bool ThrottleUpdates + { + get { return false; } + set { return; } + } public override PhysicsVector RotationalVelocity { get { return m_rotationalVelocity; } diff --git a/bin/ode.dll b/bin/ode.dll index 4e6904cae2033b75fc775b73f868acd37ac50a71..f657c5a7ece25c216097a1920d34bea8d1cca0ed 100644 GIT binary patch delta 20548 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