mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 01:06:30 +08:00
Passes prim physical status to mesher from physics plugins
Small prims now get a full mesh if they are physical Fixed a logic bug that was preventing many prim meshes from having excess memory cleaned up Switched to more conservative method of vertex and triangle list trimming to prevent possible crash
This commit is contained in:
@@ -621,7 +621,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
|
||||
}
|
||||
else
|
||||
{
|
||||
IMesh mesh = mesher.CreateMesh(primName, pbs, size, 32f);
|
||||
IMesh mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
|
||||
result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2178,31 +2178,33 @@ namespace OpenSim.Region.Physics.Meshing
|
||||
//}
|
||||
|
||||
if (mesh != null)
|
||||
if (size.X < minSizeForComplexMesh && size.Y < minSizeForComplexMesh && size.Z < minSizeForComplexMesh)
|
||||
{
|
||||
if ((!isPhysical) && size.X < minSizeForComplexMesh && size.Y < minSizeForComplexMesh && size.Z < minSizeForComplexMesh)
|
||||
{
|
||||
#if SPAM
|
||||
Console.WriteLine("Meshmerizer: prim " + primName + " has a size of " + size.ToString() + " which is below threshold of " + minSizeForComplexMesh.ToString() + " - creating simple bounding box" );
|
||||
#endif
|
||||
mesh = CreateBoundingBoxMesh(mesh);
|
||||
mesh.DumpRaw(baseDir, primName, "Z extruded");
|
||||
|
||||
// trim the vertex and triangle lists to free up memory
|
||||
//mesh.vertices.TrimExcess();
|
||||
//mesh.triangles.TrimExcess();
|
||||
|
||||
int vertCount = 0;
|
||||
foreach (Vertex v in mesh.vertices)
|
||||
if (v != null)
|
||||
vertCount++;
|
||||
mesh.vertices.Capacity = vertCount;
|
||||
|
||||
int triCount = 0;
|
||||
foreach (Triangle t in mesh.triangles)
|
||||
if ( t != null )
|
||||
triCount++;
|
||||
mesh.triangles.Capacity = triCount;
|
||||
}
|
||||
|
||||
// trim the vertex and triangle lists to free up memory
|
||||
mesh.vertices.TrimExcess();
|
||||
mesh.triangles.TrimExcess();
|
||||
|
||||
//int vertCount = 0;
|
||||
//foreach (Vertex v in mesh.vertices)
|
||||
// if (v != null)
|
||||
// vertCount++;
|
||||
//mesh.vertices.Capacity = vertCount;
|
||||
|
||||
//int triCount = 0;
|
||||
//foreach (Triangle t in mesh.triangles)
|
||||
// if (t != null)
|
||||
// triCount++;
|
||||
//mesh.triangles.Capacity = triCount;
|
||||
}
|
||||
|
||||
return mesh;
|
||||
}
|
||||
|
||||
|
||||
@@ -922,7 +922,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||
if (_parent_scene.needsMeshing(_pbs))
|
||||
{
|
||||
// Don't need to re-enable body.. it's done in SetMesh
|
||||
_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD);
|
||||
_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
|
||||
// createmesh returns null when it's a shape that isn't a cube.
|
||||
}
|
||||
}
|
||||
@@ -1496,7 +1496,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||
if (IsPhysical)
|
||||
meshlod = _parent_scene.MeshSculptphysicalLOD;
|
||||
|
||||
IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod);
|
||||
IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
|
||||
// createmesh returns null when it's a shape that isn't a cube.
|
||||
if (mesh != null)
|
||||
{
|
||||
|
||||
@@ -1177,7 +1177,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||
/// support simple box & hollow box now; later, more shapes
|
||||
if (needsMeshing(pbs))
|
||||
{
|
||||
mesh = mesher.CreateMesh(primName, pbs, size, 32f);
|
||||
mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user