From 081f4403ea2a2f8352d480910052bf5032e2e4a5 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Wed, 12 Dec 2007 06:58:55 +0000 Subject: * Added some simstats to fill the simulator pane of the Statistics monitor. * I stress, this is an initial implementation and the Agents(Child and Root) are definately obviously incorrect. --- .../BasicPhysicsPlugin/BasicPhysicsPlugin.cs | 4 +- .../Region/Physics/BulletXPlugin/BulletXPlugin.cs | 8 +++- OpenSim/Region/Physics/Manager/PhysicsScene.cs | 5 ++- OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 52 +++++++++++++--------- OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | 5 ++- OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs | 4 +- 6 files changed, 51 insertions(+), 27 deletions(-) (limited to 'OpenSim/Region/Physics') diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs index 6b647b1..df3ebb9 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs @@ -118,8 +118,9 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin { } - public override void Simulate(float timeStep) + public override float Simulate(float timeStep) { + float fps = 0; for (int i = 0; i < _actors.Count; ++i) { BasicActor actor = _actors[i]; @@ -164,6 +165,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin actor.Velocity.Z = 0; } } + return fps; } public override void GetResults() diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index 4b1043a..1760e50 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs @@ -515,20 +515,26 @@ namespace OpenSim.Region.Physics.BulletXPlugin { } - public override void Simulate(float timeStep) + public override float Simulate(float timeStep) { + float fps = 0; lock (BulletXLock) { //Try to remove garbage RemoveForgottenRigidBodies(); //End of remove MoveAllObjects(timeStep); + + + fps = (timeStep * simulationSubSteps); + ddWorld.StepSimulation(timeStep, simulationSubSteps, timeStep); //Extra Heightmap Validation: BulletX's HeightFieldTerrain somestimes doesn't work so fine. ValidateHeightForAll(); //End heightmap validation. UpdateKineticsForAll(); } + return fps; } private void MoveAllObjects(float timeStep) diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs index 71cba22..c63a66d 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsScene.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs @@ -70,7 +70,7 @@ namespace OpenSim.Region.Physics.Manager PhysicsVector size, Quaternion rotation, bool isPhysical); public abstract void AddPhysicsActorTaint(PhysicsActor prim); - public abstract void Simulate(float timeStep); + public abstract float Simulate(float timeStep); public abstract void GetResults(); @@ -126,11 +126,12 @@ namespace OpenSim.Region.Physics.Manager { } - public override void Simulate(float timeStep) + public override float Simulate(float timeStep) { m_workIndicator = (m_workIndicator + 1)%10; //MainLog.Instance.SetStatus(m_workIndicator.ToString()); + return 0f; } public override void GetResults() diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index 5234cd3..a765878 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs @@ -787,9 +787,10 @@ namespace OpenSim.Region.Physics.OdePlugin } } - public override void Simulate(float timeStep) + public override float Simulate(float timeStep) { - + float fps = 0; + step_time += timeStep; @@ -800,32 +801,40 @@ namespace OpenSim.Region.Physics.OdePlugin - if (step_time >= m_SkipFramesAtms) - { - // Instead of trying to catch up, it'll do one physics frame only - step_time = ODE_STEPSIZE; - this.m_physicsiterations = 5; + if (step_time >= m_SkipFramesAtms) + { + // Instead of trying to catch up, it'll do one physics frame only + step_time = ODE_STEPSIZE; + this.m_physicsiterations = 5; + } + else + { + m_physicsiterations = 10; + } + lock (OdeLock) + { + // Process 10 frames if the sim is running normal.. + // process 5 frames if the sim is running slow + try{ + d.WorldSetQuickStepNumIterations(world, m_physicsiterations); } - else + catch (System.StackOverflowException) { - m_physicsiterations = 10; + MainLog.Instance.Error("PHYSICS", "The operating system wasn't able to allocate enough memory for the simulation. Restarting the sim."); + base.TriggerPhysicsBasedRestart(); } - lock (OdeLock) - { - // Process 10 frames if the sim is running normal.. - // process 5 frames if the sim is running slow - try{ - d.WorldSetQuickStepNumIterations(world, m_physicsiterations); - } - catch (System.StackOverflowException) - { - MainLog.Instance.Error("PHYSICS", "The operating system wasn't able to allocate enough memory for the simulation. Restarting the sim."); - base.TriggerPhysicsBasedRestart(); - } int i = 0; + + + // Figure out the Frames Per Second we're going at. + + fps = (((step_time / ODE_STEPSIZE * m_physicsiterations)*2)* 10); + + while (step_time > 0.0f) { + foreach (OdeCharacter actor in _characters) { actor.Move(timeStep); @@ -875,6 +884,7 @@ namespace OpenSim.Region.Physics.OdePlugin } } } + return fps; } public override void GetResults() diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs index 4355c5e..efc30fe 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs @@ -169,10 +169,12 @@ namespace OpenSim.Region.Physics.POSPlugin } - public override void Simulate(float timeStep) + public override float Simulate(float timeStep) { + float fps = 0; for (int i = 0; i < _characters.Count; ++i) { + fps++; POSCharacter character = _characters[i]; float oldposX = character.Position.X; @@ -286,6 +288,7 @@ namespace OpenSim.Region.Physics.POSPlugin character._velocity.Z = (character.Position.Z - oldposZ) / timeStep; } } + return fps; } public override void GetResults() diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index 5d22eeb..bc28626 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -139,8 +139,9 @@ namespace OpenSim.Region.Physics.PhysXPlugin { } - public override void Simulate(float timeStep) + public override float Simulate(float timeStep) { + float fps = 0f; try { foreach (PhysXCharacter actor in _characters) @@ -160,6 +161,7 @@ namespace OpenSim.Region.Physics.PhysXPlugin { Console.WriteLine(e.Message); } + return fps; } public override void GetResults() -- cgit v1.1