Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/bullet2/src/BulletSoftBody/btSoftBody.cpp')
-rw-r--r--extern/bullet2/src/BulletSoftBody/btSoftBody.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp b/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
index 2553009fec2..91b9d6f1bbd 100644
--- a/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
+++ b/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
@@ -97,8 +97,7 @@ btSoftBody::~btSoftBody()
delete m_collisionShape;
int i;
- for(i=0;i<m_clusters.size();++i)
- btAlignedFree(m_clusters[i]);
+ releaseClusters();
for(i=0;i<m_materials.size();++i)
btAlignedFree(m_materials[i]);
for(i=0;i<m_joints.size();++i)
@@ -749,19 +748,27 @@ int i,ni;
}
//
-int btSoftBody::generateClusters(int k,int maxiterations)
+void btSoftBody::releaseCluster(int index)
{
- int i;
-
-for(i=0;i<m_clusters.size();++i)
- {
- if(m_clusters[i]->m_leaf) m_cdbvt.remove(m_clusters[i]->m_leaf);
- btAlignedFree(m_clusters[i]);
- }
-m_clusters.resize(btMin(k,m_nodes.size()));
-
+Cluster* c=m_clusters[index];
+if(c->m_leaf) m_cdbvt.remove(c->m_leaf);
+c->~Cluster();
+btAlignedFree(c);
+m_clusters.remove(c);
+}
+//
+void btSoftBody::releaseClusters()
+{
+while(m_clusters.size()>0) releaseCluster(0);
+}
+//
+int btSoftBody::generateClusters(int k,int maxiterations)
+{
+int i;
+releaseClusters();
+m_clusters.resize(btMin(k,m_nodes.size()));
for(i=0;i<m_clusters.size();++i)
{
m_clusters[i] = new(btAlignedAlloc(sizeof(Cluster),16)) Cluster();
@@ -870,10 +877,7 @@ if(k>0)
{
if(m_clusters[i]->m_nodes.size()==0)
{
- btAlignedFree(m_clusters[i]);
- btSwap(m_clusters[i],m_clusters[m_clusters.size()-1]);
- m_clusters.pop_back();
- --i;
+ releaseCluster(i--);
}
}