re-enabled some ODE internal proxies for some simple prim types to try to save some more memory

0.6.0-stable
Dahlia Trimble 2008-09-19 09:13:27 +00:00
parent 468b7426c3
commit e6afb28355
3 changed files with 73 additions and 49 deletions

View File

@ -2022,6 +2022,10 @@ namespace OpenSim.Region.Physics.Meshing
{ {
Mesh mesh = null; Mesh mesh = null;
#if SPAM
reportPrimParams(primName, primShape);
#endif
if (primShape.SculptEntry && primShape.SculptType != (byte)0 && primShape.SculptData.Length > 0) if (primShape.SculptEntry && primShape.SculptType != (byte)0 && primShape.SculptData.Length > 0)
{ {
SculptMesh smesh = CreateSculptMesh(primName, primShape, size, lod); SculptMesh smesh = CreateSculptMesh(primName, primShape, size, lod);

View File

@ -1332,7 +1332,13 @@ namespace OpenSim.Region.Physics.OdePlugin
if (IsPhysical) if (IsPhysical)
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 = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
IMesh mesh = null;
if(_parent_scene.needsMeshing(_pbs))
mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
//IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
if (mesh != null) if (mesh != null)
{ {
@ -1691,55 +1697,56 @@ namespace OpenSim.Region.Physics.OdePlugin
d.GeomSetQuaternion(prim_geom, ref myrot); d.GeomSetQuaternion(prim_geom, ref myrot);
} }
} }
//else else
//{ {
// if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1) if (_pbs.ProfileShape == ProfileShape.HalfCircle && _pbs.PathCurve == (byte)Extrusion.Curve1)
// { {
// if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z) if (_size.X == _size.Y && _size.Y == _size.Z && _size.X == _size.Z)
// { {
// _parent_scene.waitForSpaceUnlock(m_targetSpace); _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2)); SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
// } }
// else else
// { {
// _parent_scene.waitForSpaceUnlock(m_targetSpace); _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// } }
// } }
// //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight) //else if (_pbs.ProfileShape == ProfileShape.Circle && _pbs.PathCurve == (byte)Extrusion.Straight)
// //{ //{
// //Cyllinder //Cyllinder
// //if (_size.X == _size.Y) //if (_size.X == _size.Y)
// //{ //{
// //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z); //prim_geom = d.CreateCylinder(m_targetSpace, _size.X / 2, _size.Z);
// //} //}
// //else //else
// //{ //{
// //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z); //prim_geom = d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z);
// //} //}
// //} //}
// else else
// { {
// _parent_scene.waitForSpaceUnlock(m_targetSpace); _parent_scene.waitForSpaceUnlock(m_targetSpace);
// SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z)); SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
// } }
// 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;
// myrot.X = _orientation.X; myrot.W = _orientation.W;
// myrot.Y = _orientation.Y; myrot.X = _orientation.X;
// myrot.Z = _orientation.Z; myrot.Y = _orientation.Y;
// d.GeomSetQuaternion(prim_geom, ref myrot); myrot.Z = _orientation.Z;
d.GeomSetQuaternion(prim_geom, ref myrot);
// //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z); //d.GeomBoxSetLengths(prim_geom, _size.X, _size.Y, _size.Z);
// if (IsPhysical && Body == (IntPtr)0) if (IsPhysical && Body == (IntPtr)0)
// { {
// // Re creates body on size. // Re creates body on size.
// // EnableBody also does setMass() // EnableBody also does setMass()
// enableBody(); enableBody();
// d.BodyEnable(Body); d.BodyEnable(Body);
// } }
//} }
_parent_scene.geom_name_map[prim_geom] = oldname; _parent_scene.geom_name_map[prim_geom] = oldname;

View File

@ -1526,6 +1526,19 @@ namespace OpenSim.Region.Physics.OdePlugin
return false; return false;
} }
// if it's a standard box or sphere with no cuts or hollows or twist, return false since ODE can use an internal representation for the prim
if ((pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1)
|| (pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight))
{
if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
&& pbs.ProfileHollow == 0
&& pbs.PathTwist == 0 && pbs.PathTwistBegin == 0
&& pbs.PathBegin == 0 && pbs.PathEnd == 0
//&& pbs.PathTaperX == 0 && pbs.PathTaperY == 0
&& pbs.PathScaleX == 100 && pbs.PathScaleY == 100)
return false;
}
// if (pbs.ProfileHollow != 0) // if (pbs.ProfileHollow != 0)
// return true; // return true;