diff options
author | Robert Adams | 2012-11-29 09:24:53 -0800 |
---|---|---|
committer | Robert Adams | 2012-11-29 09:24:53 -0800 |
commit | 0cd99c74a70ddfd42c3e8325716f56bf35d4474c (patch) | |
tree | 7d2c78ce242c51f49c375e53e83788a1e45abbeb | |
parent | BulletSim: reverse direction of hover correction. Removes problem with vehicl... (diff) | |
download | opensim-SC-0cd99c74a70ddfd42c3e8325716f56bf35d4474c.zip opensim-SC-0cd99c74a70ddfd42c3e8325716f56bf35d4474c.tar.gz opensim-SC-0cd99c74a70ddfd42c3e8325716f56bf35d4474c.tar.bz2 opensim-SC-0cd99c74a70ddfd42c3e8325716f56bf35d4474c.tar.xz |
BulletSim: add expanded call to IMesher/Meshmerizer which enables/disables mesh caching. Since BulletSim caches and tracks the unmanaged memory version of meshes, the Meshmerizer itself does not need to cache built meshes once BulletSim has made the physical proxy mesh.
Diffstat (limited to '')
-rwxr-xr-x | OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Manager/IMesher.cs | 1 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Manager/ZeroMesher.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Physics/Meshing/Meshmerizer.cs | 21 |
4 files changed, 26 insertions, 10 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs index 892c34b..b94dcf6 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs | |||
@@ -620,8 +620,7 @@ public sealed class BSShapeCollection : IDisposable | |||
620 | } | 620 | } |
621 | else | 621 | else |
622 | { | 622 | { |
623 | // Pass false for physicalness as this creates some sort of bounding box which we don't need | 623 | meshData = PhysicsScene.mesher.CreateMesh(objName, pbs, size, lod, true, false); |
624 | meshData = PhysicsScene.mesher.CreateMesh(objName, pbs, size, lod, false); | ||
625 | 624 | ||
626 | if (meshData != null) | 625 | if (meshData != null) |
627 | { | 626 | { |
@@ -694,8 +693,8 @@ public sealed class BSShapeCollection : IDisposable | |||
694 | else | 693 | else |
695 | { | 694 | { |
696 | // Build a new hull in the physical world | 695 | // Build a new hull in the physical world |
697 | // Pass false for physicalness as this creates some sort of bounding box which we don't need | 696 | // Pass true for physicalness as this creates some sort of bounding box which we don't need |
698 | IMesh meshData = PhysicsScene.mesher.CreateMesh(objName, pbs, size, lod, false); | 697 | IMesh meshData = PhysicsScene.mesher.CreateMesh(objName, pbs, size, lod, true, false); |
699 | if (meshData != null) | 698 | if (meshData != null) |
700 | { | 699 | { |
701 | 700 | ||
diff --git a/OpenSim/Region/Physics/Manager/IMesher.cs b/OpenSim/Region/Physics/Manager/IMesher.cs index 3a9ca1b..10c4bd3 100644 --- a/OpenSim/Region/Physics/Manager/IMesher.cs +++ b/OpenSim/Region/Physics/Manager/IMesher.cs | |||
@@ -36,6 +36,7 @@ namespace OpenSim.Region.Physics.Manager | |||
36 | { | 36 | { |
37 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod); | 37 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod); |
38 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical); | 38 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical); |
39 | IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache); | ||
39 | } | 40 | } |
40 | 41 | ||
41 | // Values for level of detail to be passed to the mesher. | 42 | // Values for level of detail to be passed to the mesher. |
diff --git a/OpenSim/Region/Physics/Manager/ZeroMesher.cs b/OpenSim/Region/Physics/Manager/ZeroMesher.cs index ba19db6..270d2ec 100644 --- a/OpenSim/Region/Physics/Manager/ZeroMesher.cs +++ b/OpenSim/Region/Physics/Manager/ZeroMesher.cs | |||
@@ -64,11 +64,16 @@ namespace OpenSim.Region.Physics.Manager | |||
64 | { | 64 | { |
65 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) | 65 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) |
66 | { | 66 | { |
67 | return CreateMesh(primName, primShape, size, lod, false); | 67 | return CreateMesh(primName, primShape, size, lod, false, false); |
68 | } | 68 | } |
69 | 69 | ||
70 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) | 70 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) |
71 | { | 71 | { |
72 | return CreateMesh(primName, primShape, size, lod, false, false); | ||
73 | } | ||
74 | |||
75 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache) | ||
76 | { | ||
72 | // Remove the reference to the encoded JPEG2000 data so it can be GCed | 77 | // Remove the reference to the encoded JPEG2000 data so it can be GCed |
73 | primShape.SculptData = OpenMetaverse.Utils.EmptyBytes; | 78 | primShape.SculptData = OpenMetaverse.Utils.EmptyBytes; |
74 | 79 | ||
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs index 6fa91ab..8145d61 100644 --- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs +++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs | |||
@@ -702,11 +702,16 @@ namespace OpenSim.Region.Physics.Meshing | |||
702 | 702 | ||
703 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) | 703 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod) |
704 | { | 704 | { |
705 | return CreateMesh(primName, primShape, size, lod, false); | 705 | return CreateMesh(primName, primShape, size, lod, false, true); |
706 | } | 706 | } |
707 | 707 | ||
708 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) | 708 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical) |
709 | { | 709 | { |
710 | return CreateMesh(primName, primShape, size, lod, isPhysical, true); | ||
711 | } | ||
712 | |||
713 | public IMesh CreateMesh(String primName, PrimitiveBaseShape primShape, Vector3 size, float lod, bool isPhysical, bool shouldCache) | ||
714 | { | ||
710 | #if SPAM | 715 | #if SPAM |
711 | m_log.DebugFormat("[MESH]: Creating mesh for {0}", primName); | 716 | m_log.DebugFormat("[MESH]: Creating mesh for {0}", primName); |
712 | #endif | 717 | #endif |
@@ -716,9 +721,12 @@ namespace OpenSim.Region.Physics.Meshing | |||
716 | 721 | ||
717 | // If this mesh has been created already, return it instead of creating another copy | 722 | // If this mesh has been created already, return it instead of creating another copy |
718 | // For large regions with 100k+ prims and hundreds of copies of each, this can save a GB or more of memory | 723 | // For large regions with 100k+ prims and hundreds of copies of each, this can save a GB or more of memory |
719 | key = primShape.GetMeshKey(size, lod); | 724 | if (shouldCache) |
720 | if (m_uniqueMeshes.TryGetValue(key, out mesh)) | 725 | { |
721 | return mesh; | 726 | key = primShape.GetMeshKey(size, lod); |
727 | if (m_uniqueMeshes.TryGetValue(key, out mesh)) | ||
728 | return mesh; | ||
729 | } | ||
722 | 730 | ||
723 | if (size.X < 0.01f) size.X = 0.01f; | 731 | if (size.X < 0.01f) size.X = 0.01f; |
724 | if (size.Y < 0.01f) size.Y = 0.01f; | 732 | if (size.Y < 0.01f) size.Y = 0.01f; |
@@ -741,7 +749,10 @@ namespace OpenSim.Region.Physics.Meshing | |||
741 | // trim the vertex and triangle lists to free up memory | 749 | // trim the vertex and triangle lists to free up memory |
742 | mesh.TrimExcess(); | 750 | mesh.TrimExcess(); |
743 | 751 | ||
744 | m_uniqueMeshes.Add(key, mesh); | 752 | if (shouldCache) |
753 | { | ||
754 | m_uniqueMeshes.Add(key, mesh); | ||
755 | } | ||
745 | } | 756 | } |
746 | 757 | ||
747 | return mesh; | 758 | return mesh; |