diff options
Catch a meshing exception caused by corrupt or missing sculpt maps, and mark the prim as "mesh failed" so it doesn't try meshing continuously
Diffstat (limited to 'OpenSim/Region/Physics/ChOdePlugin')
-rw-r--r-- | OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs index 7e70db9..60eda41 100644 --- a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs | |||
@@ -131,6 +131,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
131 | //public GCHandle gc; | 131 | //public GCHandle gc; |
132 | private CollisionLocker ode; | 132 | private CollisionLocker ode; |
133 | 133 | ||
134 | private bool m_meshfailed = false; | ||
134 | private bool m_taintforce = false; | 135 | private bool m_taintforce = false; |
135 | private bool m_taintaddangularforce = false; | 136 | private bool m_taintaddangularforce = false; |
136 | private Vector3 m_force; | 137 | private Vector3 m_force; |
@@ -1882,12 +1883,20 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1882 | 1883 | ||
1883 | m_targetSpace = targetspace; | 1884 | m_targetSpace = targetspace; |
1884 | 1885 | ||
1885 | if (_mesh == null) | 1886 | if (_mesh == null && m_meshfailed == false) |
1886 | { | 1887 | { |
1887 | if (_parent_scene.needsMeshing(_pbs)) | 1888 | if (_parent_scene.needsMeshing(_pbs)) |
1888 | { | 1889 | { |
1889 | // Don't need to re-enable body.. it's done in SetMesh | 1890 | // Don't need to re-enable body.. it's done in SetMesh |
1890 | _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); | 1891 | try |
1892 | { | ||
1893 | _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); | ||
1894 | } | ||
1895 | catch | ||
1896 | { | ||
1897 | //Don't continuously try to mesh prims when meshing has failed | ||
1898 | m_meshfailed = true; | ||
1899 | } | ||
1891 | // createmesh returns null when it's a shape that isn't a cube. | 1900 | // createmesh returns null when it's a shape that isn't a cube. |
1892 | // m_log.Debug(m_localID); | 1901 | // m_log.Debug(m_localID); |
1893 | } | 1902 | } |