aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
authorMelanie2012-11-04 22:37:28 +0000
committerMelanie2012-11-04 22:37:28 +0000
commitdd416298f1da71b801c789367a4408f5c2728df1 (patch)
tree9aa8ed8419dd536fe2f326755ad3468289818ffc /OpenSim/Region/Physics
parentMerge branch 'master' into careminster (diff)
parentAdd a method to query all registered script constants to allow non-XEngine (diff)
downloadopensim-SC-dd416298f1da71b801c789367a4408f5c2728df1.zip
opensim-SC-dd416298f1da71b801c789367a4408f5c2728df1.tar.gz
opensim-SC-dd416298f1da71b801c789367a4408f5c2728df1.tar.bz2
opensim-SC-dd416298f1da71b801c789367a4408f5c2728df1.tar.xz
Merge branch 'avination' into careminster
Conflicts: OpenSim/Region/Framework/Scenes/Scene.cs
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs34
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs5
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs2
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs28
4 files changed, 36 insertions, 33 deletions
diff --git a/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs b/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
index 29fdda4..6e1a105 100644
--- a/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
@@ -1057,25 +1057,22 @@ namespace OpenSim.Region.Physics.Meshing
1057 mesh.RefCount++; 1057 mesh.RefCount++;
1058 return mesh; 1058 return mesh;
1059 } 1059 }
1060 }
1061 1060
1062 // try to find a identical mesh on meshs recently released 1061 // try to find a identical mesh on meshs recently released
1063 lock (m_uniqueReleasedMeshes) 1062 lock (m_uniqueReleasedMeshes)
1064 {
1065 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1066 if (mesh != null)
1067 { 1063 {
1068 m_uniqueReleasedMeshes.Remove(key); 1064 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1069 lock (m_uniqueMeshes) 1065 if (mesh != null)
1070 { 1066 {
1067 m_uniqueReleasedMeshes.Remove(key);
1071 try 1068 try
1072 { 1069 {
1073 m_uniqueMeshes.Add(key, mesh); 1070 m_uniqueMeshes.Add(key, mesh);
1074 } 1071 }
1075 catch { } 1072 catch { }
1073 mesh.RefCount = 1;
1074 return mesh;
1076 } 1075 }
1077 mesh.RefCount = 1;
1078 return mesh;
1079 } 1076 }
1080 } 1077 }
1081 return null; 1078 return null;
@@ -1108,25 +1105,22 @@ namespace OpenSim.Region.Physics.Meshing
1108 mesh.RefCount++; 1105 mesh.RefCount++;
1109 return mesh; 1106 return mesh;
1110 } 1107 }
1111 }
1112 1108
1113 // try to find a identical mesh on meshs recently released 1109 // try to find a identical mesh on meshs recently released
1114 lock (m_uniqueReleasedMeshes) 1110 lock (m_uniqueReleasedMeshes)
1115 {
1116 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1117 if (mesh != null)
1118 { 1111 {
1119 m_uniqueReleasedMeshes.Remove(key); 1112 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1120 lock (m_uniqueMeshes) 1113 if (mesh != null)
1121 { 1114 {
1115 m_uniqueReleasedMeshes.Remove(key);
1122 try 1116 try
1123 { 1117 {
1124 m_uniqueMeshes.Add(key, mesh); 1118 m_uniqueMeshes.Add(key, mesh);
1125 } 1119 }
1126 catch { } 1120 catch { }
1121 mesh.RefCount = 1;
1122 return mesh;
1127 } 1123 }
1128 mesh.RefCount = 1;
1129 return mesh;
1130 } 1124 }
1131 } 1125 }
1132 1126
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
index 73dd2fd..5030cec 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
@@ -914,8 +914,9 @@ namespace OpenSim.Region.Physics.OdePlugin
914 if (repData.pbs.SculptTexture != repData.assetID) 914 if (repData.pbs.SculptTexture != repData.assetID)
915 return; 915 return;
916 916
917 repData.pbs.SculptData = new byte[asset.Data.Length]; 917// repData.pbs.SculptData = new byte[asset.Data.Length];
918 asset.Data.CopyTo(repData.pbs.SculptData,0); 918// asset.Data.CopyTo(repData.pbs.SculptData,0);
919 repData.pbs.SculptData = asset.Data;
919 repData.meshState = MeshState.AssetOK; 920 repData.meshState = MeshState.AssetOK;
920 m_worker.AssetLoaded(repData); 921 m_worker.AssetLoaded(repData);
921 } 922 }
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index ce67cc4..76e42d4 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -1108,6 +1108,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1108 ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, m_shapetype); 1108 ODEPhysRepData repData = _parent_scene.m_meshWorker.NewActorPhysRep(this, _pbs, _size, m_shapetype);
1109 1109
1110 primVolume = repData.volume; 1110 primVolume = repData.volume;
1111 m_OBB = repData.OBB;
1112 m_OBBOffset = repData.OBBOffset;
1111 1113
1112 UpdatePrimBodyData(); 1114 UpdatePrimBodyData();
1113 } 1115 }
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index b98f177..54bc29f 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -1689,11 +1689,10 @@ namespace OpenSim.Region.Physics.OdePlugin
1689 /// <returns></returns> 1689 /// <returns></returns>
1690 public override float Simulate(float timeStep) 1690 public override float Simulate(float timeStep)
1691 { 1691 {
1692
1693 DateTime now = DateTime.UtcNow; 1692 DateTime now = DateTime.UtcNow;
1694 TimeSpan timedif = now - m_lastframe; 1693 TimeSpan timedif = now - m_lastframe;
1695 m_lastframe = now;
1696 timeStep = (float)timedif.TotalSeconds; 1694 timeStep = (float)timedif.TotalSeconds;
1695 m_lastframe = now;
1697 1696
1698 // acumulate time so we can reduce error 1697 // acumulate time so we can reduce error
1699 step_time += timeStep; 1698 step_time += timeStep;
@@ -1704,6 +1703,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1704 if (framecount < 0) 1703 if (framecount < 0)
1705 framecount = 0; 1704 framecount = 0;
1706 1705
1706
1707 framecount++; 1707 framecount++;
1708 1708
1709 int curphysiteractions; 1709 int curphysiteractions;
@@ -1714,9 +1714,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1714 else 1714 else
1715 curphysiteractions = m_physicsiterations; 1715 curphysiteractions = m_physicsiterations;
1716 1716
1717 int nodeframes = 0;
1718
1719// checkThread(); 1717// checkThread();
1718 int nodeframes = 0;
1720 1719
1721 lock (SimulationLock) 1720 lock (SimulationLock)
1722 lock(OdeLock) 1721 lock(OdeLock)
@@ -1733,7 +1732,11 @@ namespace OpenSim.Region.Physics.OdePlugin
1733 1732
1734 d.WorldSetQuickStepNumIterations(world, curphysiteractions); 1733 d.WorldSetQuickStepNumIterations(world, curphysiteractions);
1735 1734
1736 while (step_time > HalfOdeStep && nodeframes < 10) //limit number of steps so we don't say here for ever 1735 int loopstartMS = Util.EnvironmentTickCount();
1736 int looptimeMS = 0;
1737
1738
1739 while (step_time > HalfOdeStep)
1737 { 1740 {
1738 try 1741 try
1739 { 1742 {
@@ -1742,9 +1745,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1742 1745
1743 if (ChangesQueue.Count > 0) 1746 if (ChangesQueue.Count > 0)
1744 { 1747 {
1745 int ttmpstart = Util.EnvironmentTickCount(); 1748 int changestartMS = Util.EnvironmentTickCount();
1746 int ttmp; 1749 int ttmp;
1747
1748 while (ChangesQueue.Dequeue(out item)) 1750 while (ChangesQueue.Dequeue(out item))
1749 { 1751 {
1750 if (item.actor != null) 1752 if (item.actor != null)
@@ -1762,7 +1764,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1762 item.actor.Name, item.what.ToString()); 1764 item.actor.Name, item.what.ToString());
1763 } 1765 }
1764 } 1766 }
1765 ttmp = Util.EnvironmentTickCountSubtract(ttmpstart); 1767 ttmp = Util.EnvironmentTickCountSubtract(changestartMS);
1766 if (ttmp > 20) 1768 if (ttmp > 20)
1767 break; 1769 break;
1768 } 1770 }
@@ -1873,9 +1875,12 @@ namespace OpenSim.Region.Physics.OdePlugin
1873// ode.dunlock(world); 1875// ode.dunlock(world);
1874 } 1876 }
1875 1877
1876
1877 step_time -= ODE_STEPSIZE; 1878 step_time -= ODE_STEPSIZE;
1878 nodeframes++; 1879 nodeframes++;
1880
1881 looptimeMS = Util.EnvironmentTickCountSubtract(loopstartMS);
1882 if (looptimeMS > 100)
1883 break;
1879 } 1884 }
1880 1885
1881 lock (_badCharacter) 1886 lock (_badCharacter)
@@ -1963,7 +1968,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1963 1968
1964 // think time dilation as to do with dinamic step size that we dont' have 1969 // think time dilation as to do with dinamic step size that we dont' have
1965 // even so tell something to world 1970 // even so tell something to world
1966 if (nodeframes < 10) // we did the requested loops 1971 if (looptimeMS < 100) // we did the requested loops
1967 m_timeDilation = 1.0f; 1972 m_timeDilation = 1.0f;
1968 else if (step_time > 0) 1973 else if (step_time > 0)
1969 { 1974 {
@@ -1972,6 +1977,7 @@ namespace OpenSim.Region.Physics.OdePlugin
1972 m_timeDilation = 1; 1977 m_timeDilation = 1;
1973 if (step_time > m_SkipFramesAtms) 1978 if (step_time > m_SkipFramesAtms)
1974 step_time = 0; 1979 step_time = 0;
1980 m_lastframe = DateTime.UtcNow; // skip also the time lost
1975 } 1981 }
1976 } 1982 }
1977 1983
@@ -2344,7 +2350,7 @@ namespace OpenSim.Region.Physics.OdePlugin
2344 } 2350 }
2345 } 2351 }
2346 } 2352 }
2347 IntPtr HeightmapData = d.GeomHeightfieldDataCreate(); 2353 IntPtr HeightmapData = d.GeomUbitTerrainDataCreate();
2348 2354
2349 const int wrap = 0; 2355 const int wrap = 0;
2350 float thickness = hfmin; 2356 float thickness = hfmin;