From 36a1248b317cd80717fef6bc7c8fab318172a075 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 6 Aug 2012 09:06:46 +0100 Subject: ** DANGER someone should stress test more ** release unused physics meshs, including unmanaged memory allocations (allocated by managed code) --- OpenSim/Region/Physics/UbitMeshing/Mesh.cs | 55 +++++++++++++++++------------- 1 file changed, 32 insertions(+), 23 deletions(-) (limited to 'OpenSim/Region/Physics/UbitMeshing/Mesh.cs') diff --git a/OpenSim/Region/Physics/UbitMeshing/Mesh.cs b/OpenSim/Region/Physics/UbitMeshing/Mesh.cs index c715642..0727802 100644 --- a/OpenSim/Region/Physics/UbitMeshing/Mesh.cs +++ b/OpenSim/Region/Physics/UbitMeshing/Mesh.cs @@ -46,8 +46,8 @@ namespace OpenSim.Region.Physics.Meshing IntPtr m_indicesPtr = IntPtr.Zero; int m_indexCount = 0; public float[] m_normals; - Vector3 _centroid; - int _centroidDiv; + Vector3 m_centroid; + int m_centroidDiv; private class vertexcomp : IEqualityComparer { @@ -65,7 +65,6 @@ namespace OpenSim.Region.Physics.Meshing int c = v.Z.GetHashCode(); return (a << 16) ^ (b << 8) ^ c; } - } public Mesh() @@ -74,8 +73,18 @@ namespace OpenSim.Region.Physics.Meshing m_vertices = new Dictionary(vcomp); m_triangles = new List(); - _centroid = Vector3.Zero; - _centroidDiv = 0; + m_centroid = Vector3.Zero; + m_centroidDiv = 0; + } + + public int RefCount { get; set; } + + public ulong Key { get; set; } + + public void Scale(Vector3 scale) + { + + } public Mesh Clone() @@ -86,8 +95,8 @@ namespace OpenSim.Region.Physics.Meshing { result.Add(new Triangle(t.v1.Clone(), t.v2.Clone(), t.v3.Clone())); } - result._centroid = _centroid; - result._centroidDiv = _centroidDiv; + result.m_centroid = m_centroid; + result.m_centroidDiv = m_centroidDiv; return result; } @@ -109,41 +118,41 @@ namespace OpenSim.Region.Physics.Meshing if (m_vertices.Count == 0) { - _centroidDiv = 0; - _centroid = Vector3.Zero; + m_centroidDiv = 0; + m_centroid = Vector3.Zero; } if (!m_vertices.ContainsKey(triangle.v1)) { m_vertices[triangle.v1] = m_vertices.Count; - _centroid.X += triangle.v1.X; - _centroid.Y += triangle.v1.Y; - _centroid.Z += triangle.v1.Z; - _centroidDiv++; + m_centroid.X += triangle.v1.X; + m_centroid.Y += triangle.v1.Y; + m_centroid.Z += triangle.v1.Z; + m_centroidDiv++; } if (!m_vertices.ContainsKey(triangle.v2)) { m_vertices[triangle.v2] = m_vertices.Count; - _centroid.X += triangle.v2.X; - _centroid.Y += triangle.v2.Y; - _centroid.Z += triangle.v2.Z; - _centroidDiv++; + m_centroid.X += triangle.v2.X; + m_centroid.Y += triangle.v2.Y; + m_centroid.Z += triangle.v2.Z; + m_centroidDiv++; } if (!m_vertices.ContainsKey(triangle.v3)) { m_vertices[triangle.v3] = m_vertices.Count; - _centroid.X += triangle.v3.X; - _centroid.Y += triangle.v3.Y; - _centroid.Z += triangle.v3.Z; - _centroidDiv++; + m_centroid.X += triangle.v3.X; + m_centroid.Y += triangle.v3.Y; + m_centroid.Z += triangle.v3.Z; + m_centroidDiv++; } m_triangles.Add(triangle); } public Vector3 GetCentroid() { - if (_centroidDiv > 0) - return new Vector3(_centroid.X / _centroidDiv, _centroid.Y / _centroidDiv, _centroid.Z / _centroidDiv); + if (m_centroidDiv > 0) + return new Vector3(m_centroid.X / m_centroidDiv, m_centroid.Y / m_centroidDiv, m_centroid.Z / m_centroidDiv); else return Vector3.Zero; } -- cgit v1.1