aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/UbitOdePlugin
diff options
context:
space:
mode:
authorUbitUmarov2012-08-06 09:06:46 +0100
committerUbitUmarov2012-08-06 09:06:46 +0100
commit36a1248b317cd80717fef6bc7c8fab318172a075 (patch)
treec81fc363cfc52d9b3faec5ccb0693f2173650bc0 /OpenSim/Region/Physics/UbitOdePlugin
parentbug fix: keep sculpt bitmaps border pixels during resolution scaling. (diff)
downloadopensim-SC-36a1248b317cd80717fef6bc7c8fab318172a075.zip
opensim-SC-36a1248b317cd80717fef6bc7c8fab318172a075.tar.gz
opensim-SC-36a1248b317cd80717fef6bc7c8fab318172a075.tar.bz2
opensim-SC-36a1248b317cd80717fef6bc7c8fab318172a075.tar.xz
** DANGER someone should stress test more ** release unused physics meshs, including unmanaged memory allocations (allocated by managed code)
Diffstat (limited to 'OpenSim/Region/Physics/UbitOdePlugin')
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs32
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs19
2 files changed, 26 insertions, 25 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index a3534a4..fbc6134 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -57,7 +57,6 @@ using OdeAPI;
57using OpenSim.Framework; 57using OpenSim.Framework;
58using OpenSim.Region.Physics.Manager; 58using OpenSim.Region.Physics.Manager;
59 59
60
61namespace OpenSim.Region.Physics.OdePlugin 60namespace OpenSim.Region.Physics.OdePlugin
62{ 61{
63 public class OdePrim : PhysicsActor 62 public class OdePrim : PhysicsActor
@@ -538,24 +537,6 @@ namespace OpenSim.Region.Physics.OdePlugin
538 { 537 {
539 set 538 set
540 { 539 {
541/*
542 IMesh mesh = null;
543 if (_parent_scene.needsMeshing(value))
544 {
545 bool convex;
546 if (m_shapetype == 0)
547 convex = false;
548 else
549 convex = true;
550 mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, (int)LevelOfDetail.High, true, convex);
551 }
552
553 if (mesh != null)
554 {
555 lock (m_meshlock)
556 m_mesh = mesh;
557 }
558*/
559 AddChange(changes.Shape, value); 540 AddChange(changes.Shape, value);
560 } 541 }
561 } 542 }
@@ -1357,7 +1338,6 @@ namespace OpenSim.Region.Physics.OdePlugin
1357 1338
1358 IMesh mesh = null; 1339 IMesh mesh = null;
1359 1340
1360
1361 lock (m_meshlock) 1341 lock (m_meshlock)
1362 { 1342 {
1363 if (m_mesh == null) 1343 if (m_mesh == null)
@@ -1403,7 +1383,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1403 hasOOBoffsetFromMesh = true; 1383 hasOOBoffsetFromMesh = true;
1404 1384
1405 mesh.releaseSourceMeshData(); 1385 mesh.releaseSourceMeshData();
1406 m_mesh = null; 1386 m_mesh = mesh;
1407 } 1387 }
1408 1388
1409 IntPtr geo = IntPtr.Zero; 1389 IntPtr geo = IntPtr.Zero;
@@ -1545,7 +1525,10 @@ namespace OpenSim.Region.Physics.OdePlugin
1545 d.GeomTriMeshDataDestroy(_triMeshData); 1525 d.GeomTriMeshDataDestroy(_triMeshData);
1546 _triMeshData = IntPtr.Zero; 1526 _triMeshData = IntPtr.Zero;
1547 } 1527 }
1528
1548 } 1529 }
1530
1531
1549 // catch (System.AccessViolationException) 1532 // catch (System.AccessViolationException)
1550 catch (Exception e) 1533 catch (Exception e)
1551 { 1534 {
@@ -1559,6 +1542,13 @@ namespace OpenSim.Region.Physics.OdePlugin
1559 { 1542 {
1560 m_log.ErrorFormat("[PHYSICS]: PrimGeom destruction BAD {0}", Name); 1543 m_log.ErrorFormat("[PHYSICS]: PrimGeom destruction BAD {0}", Name);
1561 } 1544 }
1545
1546 if (m_mesh != null)
1547 {
1548 _parent_scene.mesher.ReleaseMesh(m_mesh);
1549 m_mesh = null;
1550 }
1551
1562 Body = IntPtr.Zero; 1552 Body = IntPtr.Zero;
1563 hasOOBoffsetFromMesh = false; 1553 hasOOBoffsetFromMesh = false;
1564 } 1554 }
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index f3ac3ca..3ee5198 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -194,7 +194,8 @@ namespace OpenSim.Region.Physics.OdePlugin
194 private float metersInSpace = 25.6f; 194 private float metersInSpace = 25.6f;
195 private float m_timeDilation = 1.0f; 195 private float m_timeDilation = 1.0f;
196 196
197 DateTime m_lastframe; 197 private DateTime m_lastframe;
198 private DateTime m_lastMeshExpire;
198 199
199 public float gravityx = 0f; 200 public float gravityx = 0f;
200 public float gravityy = 0f; 201 public float gravityy = 0f;
@@ -203,6 +204,8 @@ namespace OpenSim.Region.Physics.OdePlugin
203 private float waterlevel = 0f; 204 private float waterlevel = 0f;
204 private int framecount = 0; 205 private int framecount = 0;
205 206
207 private int m_meshExpireCntr;
208
206// private IntPtr WaterGeom = IntPtr.Zero; 209// private IntPtr WaterGeom = IntPtr.Zero;
207// private IntPtr WaterHeightmapData = IntPtr.Zero; 210// private IntPtr WaterHeightmapData = IntPtr.Zero;
208// private GCHandle WaterMapHandler = new GCHandle(); 211// private GCHandle WaterMapHandler = new GCHandle();
@@ -263,7 +266,6 @@ namespace OpenSim.Region.Physics.OdePlugin
263 const int maxContactsbeforedeath = 4000; 266 const int maxContactsbeforedeath = 4000;
264 private volatile int m_global_contactcount = 0; 267 private volatile int m_global_contactcount = 0;
265 268
266
267 private IntPtr contactgroup; 269 private IntPtr contactgroup;
268 270
269 public ContactData[] m_materialContactsData = new ContactData[8]; 271 public ContactData[] m_materialContactsData = new ContactData[8];
@@ -594,6 +596,7 @@ namespace OpenSim.Region.Physics.OdePlugin
594 } 596 }
595 597
596 m_lastframe = DateTime.UtcNow; 598 m_lastframe = DateTime.UtcNow;
599 m_lastMeshExpire = m_lastframe;
597 } 600 }
598 601
599 internal void waitForSpaceUnlock(IntPtr space) 602 internal void waitForSpaceUnlock(IntPtr space)
@@ -1768,9 +1771,9 @@ namespace OpenSim.Region.Physics.OdePlugin
1768 { 1771 {
1769 1772
1770 DateTime now = DateTime.UtcNow; 1773 DateTime now = DateTime.UtcNow;
1771 TimeSpan SinceLastFrame = now - m_lastframe; 1774 TimeSpan timedif = now - m_lastframe;
1772 m_lastframe = now; 1775 m_lastframe = now;
1773 timeStep = (float)SinceLastFrame.TotalSeconds; 1776 timeStep = (float)timedif.TotalSeconds;
1774 1777
1775 // acumulate time so we can reduce error 1778 // acumulate time so we can reduce error
1776 step_time += timeStep; 1779 step_time += timeStep;
@@ -1972,6 +1975,14 @@ namespace OpenSim.Region.Physics.OdePlugin
1972 _badCharacter.Clear(); 1975 _badCharacter.Clear();
1973 } 1976 }
1974 } 1977 }
1978
1979 timedif = now - m_lastMeshExpire;
1980
1981 if (timedif.Seconds > 10)
1982 {
1983 mesher.ExpireReleaseMeshs();
1984 m_lastMeshExpire = now;
1985 }
1975/* 1986/*
1976 int nactivegeoms = d.SpaceGetNumGeoms(ActiveSpace); 1987 int nactivegeoms = d.SpaceGetNumGeoms(ActiveSpace);
1977 int nstaticgeoms = d.SpaceGetNumGeoms(StaticSpace); 1988 int nstaticgeoms = d.SpaceGetNumGeoms(StaticSpace);