aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs3
-rw-r--r--OpenSim/Region/PhysicsModules/Ode/OdeScene.cs38
2 files changed, 25 insertions, 16 deletions
diff --git a/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs b/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs
index 7c4dc46..36546aa 100644
--- a/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs
+++ b/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs
@@ -2664,6 +2664,9 @@ Console.WriteLine(" JointCreateFixed");
2664 m_log.Warn("[PHYSICS]: Too many crossing failures for: " + Name); 2664 m_log.Warn("[PHYSICS]: Too many crossing failures for: " + Name);
2665 } 2665 }
2666 */ 2666 */
2667
2668 d.AllocateODEDataForThread(0U);
2669
2667 _position.X = Util.Clip(_position.X, 0.5f, _parent_scene.WorldExtents.X - 0.5f); 2670 _position.X = Util.Clip(_position.X, 0.5f, _parent_scene.WorldExtents.X - 0.5f);
2668 _position.Y = Util.Clip(_position.Y, 0.5f, _parent_scene.WorldExtents.Y - 0.5f); 2671 _position.Y = Util.Clip(_position.Y, 0.5f, _parent_scene.WorldExtents.Y - 0.5f);
2669 _position.Z = Util.Clip(_position.Z + 0.2f, -100f, 50000f); 2672 _position.Z = Util.Clip(_position.Z + 0.2f, -100f, 50000f);
diff --git a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs
index 8b369c8..040322a 100644
--- a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs
+++ b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs
@@ -1408,22 +1408,10 @@ namespace OpenSim.Region.PhysicsModule.ODE
1408 { 1408 {
1409 if (Math.Abs(contact.depth - contactGeom.depth) < 0.052f) 1409 if (Math.Abs(contact.depth - contactGeom.depth) < 0.052f)
1410 { 1410 {
1411 //contactGeom.depth *= .00005f; 1411 result = true;
1412 //m_log.DebugFormat("[Collsion]: Depth {0}", Math.Abs(contact.depth - contactGeom.depth)); 1412 break;
1413 // m_log.DebugFormat("[Collision]: <{0},{1},{2}>", Math.Abs(contactGeom.normal.X - contact.normal.X), Math.Abs(contactGeom.normal.Y - contact.normal.Y), Math.Abs(contactGeom.normal.Z - contact.normal.Z));
1414 result = true;
1415 break;
1416 } 1413 }
1417// else
1418// {
1419// //m_log.DebugFormat("[Collsion]: Depth {0}", Math.Abs(contact.depth - contactGeom.depth));
1420// }
1421 } 1414 }
1422// else
1423// {
1424// //m_log.DebugFormat("[Collision]: <{0},{1},{2}>", Math.Abs(contactGeom.normal.X - contact.normal.X), Math.Abs(contactGeom.normal.Y - contact.normal.Y), Math.Abs(contactGeom.normal.Z - contact.normal.Z));
1425// //int i = 0;
1426// }
1427 } 1415 }
1428 else if (at == ActorTypes.Prim) 1416 else if (at == ActorTypes.Prim)
1429 { 1417 {
@@ -1715,7 +1703,9 @@ namespace OpenSim.Region.PhysicsModule.ODE
1715 #region Add/Remove Entities 1703 #region Add/Remove Entities
1716 1704
1717 public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) 1705 public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying)
1718 { 1706 {
1707 d.AllocateODEDataForThread(0);
1708
1719 OdeCharacter newAv 1709 OdeCharacter newAv
1720 = new OdeCharacter( 1710 = new OdeCharacter(
1721 avName, this, position, velocity, size, avPIDD, avPIDP, 1711 avName, this, position, velocity, size, avPIDD, avPIDP,
@@ -1735,7 +1725,12 @@ namespace OpenSim.Region.PhysicsModule.ODE
1735// "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}", 1725// "[ODE SCENE]: Removing physics character {0} {1} from physics scene {2}",
1736// actor.Name, actor.LocalID, Name); 1726// actor.Name, actor.LocalID, Name);
1737 1727
1738 ((OdeCharacter) actor).Destroy(); 1728 lock (OdeLock)
1729 {
1730 d.AllocateODEDataForThread(0);
1731
1732 ((OdeCharacter) actor).Destroy();
1733 }
1739 } 1734 }
1740 1735
1741 internal void AddCharacter(OdeCharacter chr) 1736 internal void AddCharacter(OdeCharacter chr)
@@ -1785,9 +1780,11 @@ namespace OpenSim.Region.PhysicsModule.ODE
1785 Vector3 siz = size; 1780 Vector3 siz = size;
1786 Quaternion rot = rotation; 1781 Quaternion rot = rotation;
1787 1782
1783
1788 OdePrim newPrim; 1784 OdePrim newPrim;
1789 lock (OdeLock) 1785 lock (OdeLock)
1790 { 1786 {
1787 d.AllocateODEDataForThread(0);
1791 newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical); 1788 newPrim = new OdePrim(name, this, pos, siz, rot, pbs, isphysical);
1792 1789
1793 lock (_prims) 1790 lock (_prims)
@@ -2633,9 +2630,12 @@ namespace OpenSim.Region.PhysicsModule.ODE
2633 int donechanges = 0; 2630 int donechanges = 0;
2634 if (_taintedPrims.Count > 0) 2631 if (_taintedPrims.Count > 0)
2635 { 2632 {
2633
2636 m_log.InfoFormat("[Ode] start processing pending actor operations"); 2634 m_log.InfoFormat("[Ode] start processing pending actor operations");
2637 int tstart = Util.EnvironmentTickCount(); 2635 int tstart = Util.EnvironmentTickCount();
2638 2636
2637 d.AllocateODEDataForThread(0);
2638
2639 lock (_taintedPrims) 2639 lock (_taintedPrims)
2640 { 2640 {
2641 foreach (OdePrim prim in _taintedPrims) 2641 foreach (OdePrim prim in _taintedPrims)
@@ -2716,6 +2716,8 @@ namespace OpenSim.Region.PhysicsModule.ODE
2716 2716
2717 lock (OdeLock) 2717 lock (OdeLock)
2718 { 2718 {
2719 d.AllocateODEDataForThread(~0U);
2720
2719 while (step_time > HalfOdeStep) 2721 while (step_time > HalfOdeStep)
2720 { 2722 {
2721 try 2723 try
@@ -3293,6 +3295,8 @@ namespace OpenSim.Region.PhysicsModule.ODE
3293 3295
3294 lock (OdeLock) 3296 lock (OdeLock)
3295 { 3297 {
3298 d.AllocateODEDataForThread(~0U);
3299
3296 IntPtr GroundGeom = IntPtr.Zero; 3300 IntPtr GroundGeom = IntPtr.Zero;
3297 if (RegionTerrain.TryGetValue(pOffset, out GroundGeom)) 3301 if (RegionTerrain.TryGetValue(pOffset, out GroundGeom))
3298 { 3302 {
@@ -3380,6 +3384,8 @@ namespace OpenSim.Region.PhysicsModule.ODE
3380 3384
3381 _worldInitialized = false; 3385 _worldInitialized = false;
3382 3386
3387 d.AllocateODEDataForThread(~0U);
3388
3383 if (m_rayCastManager != null) 3389 if (m_rayCastManager != null)
3384 { 3390 {
3385 m_rayCastManager.Dispose(); 3391 m_rayCastManager.Dispose();