diff options
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin/ODEPrim.cs')
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 032b5df..c041243 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -813,18 +813,17 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
813 | } | 813 | } |
814 | } | 814 | } |
815 | 815 | ||
816 | float[] vertexList = mesh.getVertexListAsFloatLocked(); // Note, that vertextList is pinned in memory | 816 | IntPtr vertices, indices; |
817 | int[] indexList = mesh.getIndexListAsIntLocked(); // Also pinned, needs release after usage | 817 | int vertexCount, indexCount; |
818 | int vertexStride, triStride; | ||
819 | mesh.getVertexListAsPtrToFloatArray( out vertices, out vertexStride, out vertexCount ); // Note, that vertices are fixed in unmanaged heap | ||
820 | mesh.getIndexListAsPtrToIntArray( out indices, out triStride, out indexCount ); // Also fixed, needs release after usage | ||
818 | 821 | ||
819 | mesh.releaseSourceMeshData(); // free up the original mesh data to save memory | 822 | mesh.releaseSourceMeshData(); // free up the original mesh data to save memory |
820 | 823 | ||
821 | int VertexCount = vertexList.GetLength(0)/3; | ||
822 | int IndexCount = indexList.GetLength(0); | ||
823 | |||
824 | _triMeshData = d.GeomTriMeshDataCreate(); | 824 | _triMeshData = d.GeomTriMeshDataCreate(); |
825 | 825 | ||
826 | d.GeomTriMeshDataBuildSimple(_triMeshData, vertexList, 3*sizeof (float), VertexCount, indexList, IndexCount, | 826 | d.GeomTriMeshDataBuildSimple(_triMeshData, vertices, vertexStride, vertexCount, indices, indexCount, triStride); |
827 | 3*sizeof (int)); | ||
828 | d.GeomTriMeshDataPreprocess(_triMeshData); | 827 | d.GeomTriMeshDataPreprocess(_triMeshData); |
829 | 828 | ||
830 | _parent_scene.waitForSpaceUnlock(m_targetSpace); | 829 | _parent_scene.waitForSpaceUnlock(m_targetSpace); |