diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs index 341e335ce3..125bb1b8a4 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs @@ -221,6 +221,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde public int bodyFramesAutoDisable = 10; + private SafeNativeMethods.NearCallback NearCallback; + private readonly Dictionary _prims = new Dictionary(); private readonly HashSet _characters = new HashSet(); private readonly HashSet _activeprims = new HashSet(); @@ -338,6 +340,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde { SafeNativeMethods.AllocateODEDataForThread(~0U); + NearCallback = DefaultNearCallback; + _charactersList = new List(m_frameWorkScene.RegionInfo.AgentCapacity); m_rayCastManager = new ODERayCastRequestManager(this); @@ -593,7 +597,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde // contact points in the space try { - SafeNativeMethods.SpaceCollide2(g1, g2, IntPtr.Zero, DefaultNearCallback); + SafeNativeMethods.SpaceCollide2(g1, g2, IntPtr.Zero, NearCallback); } catch (AccessViolationException) { @@ -1089,8 +1093,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde if (chr.Body != IntPtr.Zero && chr.collider != IntPtr.Zero) { - SafeNativeMethods.SpaceCollide2(chr.collider, StaticSpace, IntPtr.Zero, DefaultNearCallback); - SafeNativeMethods.SpaceCollide2(chr.collider, ActiveSpace, IntPtr.Zero, DefaultNearCallback); + SafeNativeMethods.SpaceCollide2(chr.collider, StaticSpace, IntPtr.Zero, NearCallback); + SafeNativeMethods.SpaceCollide2(chr.collider, ActiveSpace, IntPtr.Zero, NearCallback); } } } @@ -1108,8 +1112,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde chr.CollidingObj = false; // do colisions with static space - SafeNativeMethods.SpaceCollide2(chr.collider, StaticSpace, IntPtr.Zero, DefaultNearCallback); - SafeNativeMethods.SpaceCollide2(chr.collider, ActiveSpace, IntPtr.Zero, DefaultNearCallback); + SafeNativeMethods.SpaceCollide2(chr.collider, StaticSpace, IntPtr.Zero, NearCallback); + SafeNativeMethods.SpaceCollide2(chr.collider, ActiveSpace, IntPtr.Zero, NearCallback); float mx = chr._AABB2D.minx; float Mx = chr._AABB2D.maxx; @@ -1177,8 +1181,8 @@ namespace OpenSim.Region.PhysicsModule.ubOde if(!aprim.m_outbounds && SafeNativeMethods.BodyIsEnabled(aprim.Body) && aprim.m_collide_geom != IntPtr.Zero) { - SafeNativeMethods.SpaceCollide2(StaticSpace, aprim.m_collide_geom, IntPtr.Zero, DefaultNearCallback); - SafeNativeMethods.SpaceCollide2(TerrainGeom, aprim.m_collide_geom, IntPtr.Zero, DefaultNearCallback); + SafeNativeMethods.SpaceCollide2(StaticSpace, aprim.m_collide_geom, IntPtr.Zero, NearCallback); + SafeNativeMethods.SpaceCollide2(TerrainGeom, aprim.m_collide_geom, IntPtr.Zero, NearCallback); } } } @@ -1191,7 +1195,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde // colide active amoung them try { - SafeNativeMethods.SpaceCollide(ActiveSpace, IntPtr.Zero, DefaultNearCallback); + SafeNativeMethods.SpaceCollide(ActiveSpace, IntPtr.Zero, NearCallback); } catch (Exception e) {