diff options
author | Dahlia Trimble | 2008-07-12 01:58:20 +0000 |
---|---|---|
committer | Dahlia Trimble | 2008-07-12 01:58:20 +0000 |
commit | 13399ff4393b0fbf6e2caf79542f62e9b4ba4281 (patch) | |
tree | 546a8a6d08c1d9acdff47e06a1f9c9be364df3f7 /OpenSim | |
parent | Patch #9142 (No mantis) (diff) | |
download | opensim-SC-13399ff4393b0fbf6e2caf79542f62e9b4ba4281.zip opensim-SC-13399ff4393b0fbf6e2caf79542f62e9b4ba4281.tar.gz opensim-SC-13399ff4393b0fbf6e2caf79542f62e9b4ba4281.tar.bz2 opensim-SC-13399ff4393b0fbf6e2caf79542f62e9b4ba4281.tar.xz |
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
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 32 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 4 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 2 |
4 files changed, 21 insertions, 19 deletions
diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index 144ad53..5ef196f 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs | |||
@@ -621,7 +621,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin | |||
621 | } | 621 | } |
622 | else | 622 | else |
623 | { | 623 | { |
624 | IMesh mesh = mesher.CreateMesh(primName, pbs, size, 32f); | 624 | IMesh mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical); |
625 | result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical); | 625 | result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical); |
626 | } | 626 | } |
627 | break; | 627 | break; |
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index 42b6a90..045a25d 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs | |||
@@ -2178,30 +2178,32 @@ namespace OpenSim.Region.Physics.Meshing | |||
2178 | //} | 2178 | //} |
2179 | 2179 | ||
2180 | if (mesh != null) | 2180 | if (mesh != null) |
2181 | if (size.X < minSizeForComplexMesh && size.Y < minSizeForComplexMesh && size.Z < minSizeForComplexMesh) | 2181 | { |
2182 | if ((!isPhysical) && size.X < minSizeForComplexMesh && size.Y < minSizeForComplexMesh && size.Z < minSizeForComplexMesh) | ||
2182 | { | 2183 | { |
2183 | #if SPAM | 2184 | #if SPAM |
2184 | Console.WriteLine("Meshmerizer: prim " + primName + " has a size of " + size.ToString() + " which is below threshold of " + minSizeForComplexMesh.ToString() + " - creating simple bounding box" ); | 2185 | Console.WriteLine("Meshmerizer: prim " + primName + " has a size of " + size.ToString() + " which is below threshold of " + minSizeForComplexMesh.ToString() + " - creating simple bounding box" ); |
2185 | #endif | 2186 | #endif |
2186 | mesh = CreateBoundingBoxMesh(mesh); | 2187 | mesh = CreateBoundingBoxMesh(mesh); |
2187 | mesh.DumpRaw(baseDir, primName, "Z extruded"); | 2188 | mesh.DumpRaw(baseDir, primName, "Z extruded"); |
2189 | } | ||
2188 | 2190 | ||
2189 | // trim the vertex and triangle lists to free up memory | 2191 | // trim the vertex and triangle lists to free up memory |
2190 | //mesh.vertices.TrimExcess(); | 2192 | mesh.vertices.TrimExcess(); |
2191 | //mesh.triangles.TrimExcess(); | 2193 | mesh.triangles.TrimExcess(); |
2192 | 2194 | ||
2193 | int vertCount = 0; | 2195 | //int vertCount = 0; |
2194 | foreach (Vertex v in mesh.vertices) | 2196 | //foreach (Vertex v in mesh.vertices) |
2195 | if (v != null) | 2197 | // if (v != null) |
2196 | vertCount++; | 2198 | // vertCount++; |
2197 | mesh.vertices.Capacity = vertCount; | 2199 | //mesh.vertices.Capacity = vertCount; |
2198 | 2200 | ||
2199 | int triCount = 0; | 2201 | //int triCount = 0; |
2200 | foreach (Triangle t in mesh.triangles) | 2202 | //foreach (Triangle t in mesh.triangles) |
2201 | if ( t != null ) | 2203 | // if (t != null) |
2202 | triCount++; | 2204 | // triCount++; |
2203 | mesh.triangles.Capacity = triCount; | 2205 | //mesh.triangles.Capacity = triCount; |
2204 | } | 2206 | } |
2205 | 2207 | ||
2206 | return mesh; | 2208 | return mesh; |
2207 | } | 2209 | } |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index d063507..f7fbaf1 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -922,7 +922,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
922 | if (_parent_scene.needsMeshing(_pbs)) | 922 | if (_parent_scene.needsMeshing(_pbs)) |
923 | { | 923 | { |
924 | // Don't need to re-enable body.. it's done in SetMesh | 924 | // Don't need to re-enable body.. it's done in SetMesh |
925 | _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD); | 925 | _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); |
926 | // createmesh returns null when it's a shape that isn't a cube. | 926 | // createmesh returns null when it's a shape that isn't a cube. |
927 | } | 927 | } |
928 | } | 928 | } |
@@ -1496,7 +1496,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1496 | if (IsPhysical) | 1496 | if (IsPhysical) |
1497 | meshlod = _parent_scene.MeshSculptphysicalLOD; | 1497 | meshlod = _parent_scene.MeshSculptphysicalLOD; |
1498 | 1498 | ||
1499 | IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod); | 1499 | IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); |
1500 | // createmesh returns null when it's a shape that isn't a cube. | 1500 | // createmesh returns null when it's a shape that isn't a cube. |
1501 | if (mesh != null) | 1501 | if (mesh != null) |
1502 | { | 1502 | { |
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index 3dd80ea..cd5032c 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |||
@@ -1177,7 +1177,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1177 | /// support simple box & hollow box now; later, more shapes | 1177 | /// support simple box & hollow box now; later, more shapes |
1178 | if (needsMeshing(pbs)) | 1178 | if (needsMeshing(pbs)) |
1179 | { | 1179 | { |
1180 | mesh = mesher.CreateMesh(primName, pbs, size, 32f); | 1180 | mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical); |
1181 | } | 1181 | } |
1182 | 1182 | ||
1183 | break; | 1183 | break; |