[Bf-blender-cvs] [add9835df6] cloth-improvements: Clean-up some collision data allocation stuff

Luca Rood noreply at git.blender.org
Fri Jan 20 05:38:52 CET 2017


Commit: add9835df60ce897ea0c39961832bd69e507ff1d
Author: Luca Rood
Date:   Fri Jan 20 02:31:04 2017 -0200
Branches: cloth-improvements
https://developer.blender.org/rBadd9835df60ce897ea0c39961832bd69e507ff1d

Clean-up some collision data allocation stuff

Self collision pointer logic has been simplified and allocations
reduced, as it only collides with one object (self).

Also, allocation size for all collisions has been reduced to 1/4,
because it was allocating extra space for deprecated stuff.

===================================================================

M	source/blender/blenkernel/intern/collision.c

===================================================================

diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index b8b49033c1..bfb77cf4a4 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -931,7 +931,7 @@ static void cloth_bvh_objcollisions_nearcheck ( ClothModifierData * clmd, Collis
 {
 	int i;
 	
-	*collisions = (CollPair *) MEM_mallocN(sizeof(CollPair) * numresult * 4, "collision array" ); // * 4 since cloth_collision_static can return more than 1 collision
+	*collisions = (CollPair *) MEM_mallocN(sizeof(CollPair) * numresult, "collision array" );
 	*collisions_index = *collisions;
 
 	for ( i = 0; i < numresult; i++ ) {
@@ -945,7 +945,7 @@ static void cloth_bvh_selfcollisions_nearcheck (ClothModifierData * clmd, CollPa
 {
 	int i;
 
-	*collisions = (CollPair *) MEM_mallocN(sizeof(CollPair) * numresult * 4, "collision array" ); // * 4 since cloth_collision_static can return more than 1 collision
+	*collisions = (CollPair *) MEM_mallocN(sizeof(CollPair) * numresult, "collision array" );
 	*collisions_index = *collisions;
 
 	for ( i = 0; i < numresult; i++ ) {
@@ -1134,10 +1134,7 @@ int cloth_bvh_objcollision(Object *ob, ClothModifierData *clmd, float step, floa
 		if ( clmd->coll_parms->flags & CLOTH_COLLSETTINGS_FLAG_SELF ) {
 			BVHTreeOverlap *overlap = NULL;
 			unsigned int result = 0;
-			CollPair **collisions, **collisions_index;
-
-			collisions = MEM_callocN(sizeof(CollPair *), "CollPair");
-			collisions_index = MEM_callocN(sizeof(CollPair *), "CollPair");
+			CollPair *collisions, *collisions_index;
 
 			// collisions = 1;
 			verts = cloth->verts; // needed for openMP
@@ -1152,9 +1149,9 @@ int cloth_bvh_objcollision(Object *ob, ClothModifierData *clmd, float step, floa
 				overlap = BLI_bvhtree_overlap(cloth->bvhselftree, cloth->bvhselftree, &result, NULL, NULL);
 
 				if (result && overlap) {
-					cloth_bvh_selfcollisions_nearcheck (clmd, collisions, collisions_index, result, overlap);
+					cloth_bvh_selfcollisions_nearcheck (clmd, &collisions, &collisions_index, result, overlap);
 
-					ret += cloth_bvh_selfcollisions_resolve ( clmd, *collisions,  *collisions_index);
+					ret += cloth_bvh_selfcollisions_resolve ( clmd, collisions,  collisions_index);
 					ret2 += ret;
 				}
 
@@ -1162,10 +1159,7 @@ int cloth_bvh_objcollision(Object *ob, ClothModifierData *clmd, float step, floa
 					MEM_freeN ( overlap );
 			}
 
-			if ( *collisions ) MEM_freeN ( *collisions );
-
-			MEM_freeN(collisions);
-			MEM_freeN(collisions_index);
+			if (collisions) MEM_freeN(collisions);
 		}
 
 		if (clmd->coll_parms->flags & (CLOTH_COLLSETTINGS_FLAG_ENABLED | CLOTH_COLLSETTINGS_FLAG_SELF)) {




More information about the Bf-blender-cvs mailing list