Remove _mesh field since the mesh data no longer needs to be stored after it's initially used.
This may improve memory usage for regions using mesh and sculpts, though I suspect that it doesn't address the current memory leak.bulletsim
parent
bd8f538f80
commit
d041276517
|
@ -154,7 +154,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
|||
private List<Vector3> m_forcelist = new List<Vector3>();
|
||||
private List<Vector3> m_angularforcelist = new List<Vector3>();
|
||||
|
||||
private IMesh _mesh;
|
||||
private PrimitiveBaseShape _pbs;
|
||||
private OdeScene _parent_scene;
|
||||
|
||||
|
@ -1356,7 +1355,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
|
|||
/// Create a geometry for the given mesh in the given target space.
|
||||
/// </summary>
|
||||
/// <param name="m_targetSpace"></param>
|
||||
/// <param name="mesh">/param>
|
||||
/// <param name="mesh">If null, then a mesh is used that is based on the profile shape data.</param>
|
||||
public void CreateGeom(IntPtr m_targetSpace, IMesh mesh)
|
||||
{
|
||||
#if SPAM
|
||||
|
@ -1447,23 +1446,22 @@ Console.WriteLine("CreateGeom:");
|
|||
|
||||
m_targetSpace = targetspace;
|
||||
|
||||
if (_mesh == null)
|
||||
{
|
||||
IMesh mesh = null;
|
||||
|
||||
if (_parent_scene.needsMeshing(_pbs))
|
||||
{
|
||||
// Don't need to re-enable body.. it's done in SetMesh
|
||||
_mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
|
||||
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
|
||||
// createmesh returns null when it's a shape that isn't a cube.
|
||||
// m_log.Debug(m_localID);
|
||||
}
|
||||
}
|
||||
|
||||
lock (_parent_scene.OdeLock)
|
||||
{
|
||||
#if SPAM
|
||||
Console.WriteLine("changeadd 1");
|
||||
#endif
|
||||
CreateGeom(m_targetSpace, _mesh);
|
||||
CreateGeom(m_targetSpace, mesh);
|
||||
|
||||
if (prim_geom != IntPtr.Zero)
|
||||
{
|
||||
|
@ -1888,7 +1886,6 @@ Console.WriteLine(" JointCreateFixed");
|
|||
{
|
||||
d.GeomDestroy(prim_geom);
|
||||
prim_geom = IntPtr.Zero;
|
||||
_mesh = null;
|
||||
}
|
||||
catch (System.AccessViolationException)
|
||||
{
|
||||
|
@ -1933,12 +1930,6 @@ Console.WriteLine(" JointCreateFixed");
|
|||
if (_size.Y <= 0) _size.Y = 0.01f;
|
||||
if (_size.Z <= 0) _size.Z = 0.01f;
|
||||
|
||||
// Cleanup of old prim geometry
|
||||
if (_mesh != null)
|
||||
{
|
||||
// TODO: Cleanup meshing here
|
||||
}
|
||||
|
||||
//kill body to rebuild
|
||||
if (IsPhysical && Body != IntPtr.Zero)
|
||||
{
|
||||
|
@ -1966,6 +1957,8 @@ Console.WriteLine(" JointCreateFixed");
|
|||
prim_geom = IntPtr.Zero;
|
||||
// we don't need to do space calculation because the client sends a position update also.
|
||||
|
||||
IMesh mesh = null;
|
||||
|
||||
// Construction of new prim
|
||||
if (_parent_scene.needsMeshing(_pbs))
|
||||
{
|
||||
|
@ -1975,27 +1968,11 @@ Console.WriteLine(" JointCreateFixed");
|
|||
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
||||
// Don't need to re-enable body.. it's done in SetMesh
|
||||
|
||||
IMesh mesh = null;
|
||||
|
||||
if (_parent_scene.needsMeshing(_pbs))
|
||||
mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
|
||||
}
|
||||
|
||||
#if SPAM
|
||||
Console.WriteLine("changesize 1");
|
||||
#endif
|
||||
CreateGeom(m_targetSpace, mesh);
|
||||
}
|
||||
else
|
||||
{
|
||||
_mesh = null;
|
||||
|
||||
#if SPAM
|
||||
Console.WriteLine("changesize 2");
|
||||
#endif
|
||||
|
||||
CreateGeom(m_targetSpace, _mesh);
|
||||
}
|
||||
|
||||
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
||||
d.Quaternion myrot = new d.Quaternion();
|
||||
myrot.X = _orientation.X;
|
||||
|
@ -2083,6 +2060,8 @@ Console.WriteLine("changesize 2");
|
|||
if (_size.Z <= 0) _size.Z = 0.01f;
|
||||
// Construction of new prim
|
||||
|
||||
IMesh mesh = null;
|
||||
|
||||
if (_parent_scene.needsMeshing(_pbs))
|
||||
{
|
||||
// Don't need to re-enable body.. it's done in CreateMesh
|
||||
|
@ -2092,22 +2071,10 @@ Console.WriteLine("changesize 2");
|
|||
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
||||
|
||||
// createmesh returns null when it doesn't mesh.
|
||||
IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
|
||||
#if SPAM
|
||||
Console.WriteLine("changeshape needed meshing");
|
||||
#endif
|
||||
mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
|
||||
}
|
||||
|
||||
CreateGeom(m_targetSpace, mesh);
|
||||
}
|
||||
else
|
||||
{
|
||||
_mesh = null;
|
||||
|
||||
#if SPAM
|
||||
Console.WriteLine("changeshape not need meshing");
|
||||
#endif
|
||||
CreateGeom(m_targetSpace, null);
|
||||
}
|
||||
|
||||
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
|
||||
d.Quaternion myrot = new d.Quaternion();
|
||||
//myrot.W = _orientation.w;
|
||||
|
|
Loading…
Reference in New Issue