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
Justin Clark-Casey (justincc) 2011-07-31 01:03:52 +01:00
parent bd8f538f80
commit d041276517
1 changed files with 16 additions and 49 deletions

View File

@ -154,7 +154,6 @@ namespace OpenSim.Region.Physics.OdePlugin
private List<Vector3> m_forcelist = new List<Vector3>(); private List<Vector3> m_forcelist = new List<Vector3>();
private List<Vector3> m_angularforcelist = new List<Vector3>(); private List<Vector3> m_angularforcelist = new List<Vector3>();
private IMesh _mesh;
private PrimitiveBaseShape _pbs; private PrimitiveBaseShape _pbs;
private OdeScene _parent_scene; 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. /// Create a geometry for the given mesh in the given target space.
/// </summary> /// </summary>
/// <param name="m_targetSpace"></param> /// <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) public void CreateGeom(IntPtr m_targetSpace, IMesh mesh)
{ {
#if SPAM #if SPAM
@ -1447,15 +1446,14 @@ Console.WriteLine("CreateGeom:");
m_targetSpace = targetspace; m_targetSpace = targetspace;
if (_mesh == null) IMesh mesh = null;
if (_parent_scene.needsMeshing(_pbs))
{ {
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);
// Don't need to re-enable body.. it's done in SetMesh // createmesh returns null when it's a shape that isn't a cube.
_mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); // m_log.Debug(m_localID);
// createmesh returns null when it's a shape that isn't a cube.
// m_log.Debug(m_localID);
}
} }
lock (_parent_scene.OdeLock) lock (_parent_scene.OdeLock)
@ -1463,7 +1461,7 @@ Console.WriteLine("CreateGeom:");
#if SPAM #if SPAM
Console.WriteLine("changeadd 1"); Console.WriteLine("changeadd 1");
#endif #endif
CreateGeom(m_targetSpace, _mesh); CreateGeom(m_targetSpace, mesh);
if (prim_geom != IntPtr.Zero) if (prim_geom != IntPtr.Zero)
{ {
@ -1888,7 +1886,6 @@ Console.WriteLine(" JointCreateFixed");
{ {
d.GeomDestroy(prim_geom); d.GeomDestroy(prim_geom);
prim_geom = IntPtr.Zero; prim_geom = IntPtr.Zero;
_mesh = null;
} }
catch (System.AccessViolationException) catch (System.AccessViolationException)
{ {
@ -1933,12 +1930,6 @@ Console.WriteLine(" JointCreateFixed");
if (_size.Y <= 0) _size.Y = 0.01f; if (_size.Y <= 0) _size.Y = 0.01f;
if (_size.Z <= 0) _size.Z = 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 //kill body to rebuild
if (IsPhysical && Body != IntPtr.Zero) if (IsPhysical && Body != IntPtr.Zero)
{ {
@ -1966,6 +1957,8 @@ Console.WriteLine(" JointCreateFixed");
prim_geom = IntPtr.Zero; prim_geom = IntPtr.Zero;
// we don't need to do space calculation because the client sends a position update also. // we don't need to do space calculation because the client sends a position update also.
IMesh mesh = null;
// Construction of new prim // Construction of new prim
if (_parent_scene.needsMeshing(_pbs)) if (_parent_scene.needsMeshing(_pbs))
{ {
@ -1975,27 +1968,11 @@ Console.WriteLine(" JointCreateFixed");
meshlod = _parent_scene.MeshSculptphysicalLOD; meshlod = _parent_scene.MeshSculptphysicalLOD;
// Don't need to re-enable body.. it's done in SetMesh // Don't need to re-enable body.. it's done in SetMesh
IMesh mesh = null;
if (_parent_scene.needsMeshing(_pbs)) if (_parent_scene.needsMeshing(_pbs))
mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); 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);
} }
CreateGeom(m_targetSpace, mesh);
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
d.Quaternion myrot = new d.Quaternion(); d.Quaternion myrot = new d.Quaternion();
myrot.X = _orientation.X; myrot.X = _orientation.X;
@ -2083,6 +2060,8 @@ Console.WriteLine("changesize 2");
if (_size.Z <= 0) _size.Z = 0.01f; if (_size.Z <= 0) _size.Z = 0.01f;
// Construction of new prim // Construction of new prim
IMesh mesh = null;
if (_parent_scene.needsMeshing(_pbs)) if (_parent_scene.needsMeshing(_pbs))
{ {
// Don't need to re-enable body.. it's done in CreateMesh // Don't need to re-enable body.. it's done in CreateMesh
@ -2092,22 +2071,10 @@ Console.WriteLine("changesize 2");
meshlod = _parent_scene.MeshSculptphysicalLOD; meshlod = _parent_scene.MeshSculptphysicalLOD;
// createmesh returns null when it doesn't mesh. // createmesh returns null when it doesn't mesh.
IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
#if SPAM
Console.WriteLine("changeshape needed meshing");
#endif
CreateGeom(m_targetSpace, mesh);
}
else
{
_mesh = null;
#if SPAM
Console.WriteLine("changeshape not need meshing");
#endif
CreateGeom(m_targetSpace, null);
} }
CreateGeom(m_targetSpace, mesh);
d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z); d.GeomSetPosition(prim_geom, _position.X, _position.Y, _position.Z);
d.Quaternion myrot = new d.Quaternion(); d.Quaternion myrot = new d.Quaternion();
//myrot.W = _orientation.w; //myrot.W = _orientation.w;