[Bf-blender-cvs] [5f796ef] fracture_modifier: attempt to fix customdata related memoryleak... it has been reduced, but isnt completely gone yet

Martin Felke noreply at git.blender.org
Fri Nov 6 12:56:16 CET 2015


Commit: 5f796ef1efbf8dd900c78ce23e4eb7e961e2323c
Author: Martin Felke
Date:   Fri Nov 6 12:55:58 2015 +0100
Branches: fracture_modifier
https://developer.blender.org/rB5f796ef1efbf8dd900c78ce23e4eb7e961e2323c

attempt to fix customdata related memoryleak... it has been reduced, but isnt completely gone yet

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

M	source/blender/blenkernel/BKE_fracture.h
M	source/blender/blenkernel/intern/fracture.c
M	source/blender/modifiers/intern/MOD_fracture.c

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

diff --git a/source/blender/blenkernel/BKE_fracture.h b/source/blender/blenkernel/BKE_fracture.h
index baf3aa8..cb0077e 100644
--- a/source/blender/blenkernel/BKE_fracture.h
+++ b/source/blender/blenkernel/BKE_fracture.h
@@ -102,5 +102,6 @@ void BKE_free_constraints(struct FractureModifierData *fmd);
 void BKE_fracture_load_settings(struct FractureModifierData *fmd, struct FractureSetting *fs);
 void BKE_fracture_store_settings(struct FractureModifierData *fs, struct FractureSetting *fmd);
 struct Shard* BKE_create_initial_shard(struct DerivedMesh *dm);
+void BKE_copy_customdata_layers(struct CustomData* dest, struct CustomData *src, int type, int count);
 
 #endif /* BKE_FRACTURE_H */
diff --git a/source/blender/blenkernel/intern/fracture.c b/source/blender/blenkernel/intern/fracture.c
index 11bad32..82151fb 100644
--- a/source/blender/blenkernel/intern/fracture.c
+++ b/source/blender/blenkernel/intern/fracture.c
@@ -175,15 +175,10 @@ static int shard_sortsize(const void *s1, const void *s2, void* UNUSED(context))
 
 Shard *BKE_custom_data_to_shard(Shard *s, DerivedMesh *dm)
 {
-	/*
 	CustomData_reset(&s->vertData);
 	CustomData_reset(&s->loopData);
 	CustomData_reset(&s->polyData);
 
-	CustomData_add_layer(&s->vertData, CD_MDEFORMVERT, CD_DUPLICATE, CustomData_get_layer(&dm->vertData, CD_MDEFORMVERT), s->totvert);
-	CustomData_add_layer(&s->loopData, CD_MLOOPUV, CD_DUPLICATE, CustomData_get_layer(&dm->loopData, CD_MLOOPUV), s->totloop);
-	CustomData_add_layer(&s->polyData, CD_MTEXPOLY, CD_DUPLICATE, CustomData_get_layer(&dm->polyData, CD_MTEXPOLY), s->totpoly);*/
-
 	CustomData_copy(&dm->vertData, &s->vertData, CD_MASK_MDEFORMVERT, CD_DUPLICATE, s->totvert);
 	CustomData_copy(&dm->loopData, &s->loopData, CD_MASK_MLOOPUV, CD_DUPLICATE, s->totloop);
 	CustomData_copy(&dm->polyData, &s->polyData, CD_MASK_MTEXPOLY, CD_DUPLICATE, s->totpoly);
@@ -1766,6 +1761,18 @@ void BKE_fracture_create_dm(FractureModifierData *fmd, bool doCustomData)
 	fmd->dm = dm_final;
 }
 
+void BKE_copy_customdata_layers(CustomData* dest, CustomData *src, int type, int count)
+{
+	int layer;
+	for (layer = 0; layer < src->totlayer; layer++)
+	{
+		if (src->layers[layer].type == type)
+		{
+			CustomData_add_layer(dest, type, CD_DUPLICATE, src->layers[layer].data, count);
+		}
+	}
+}
+
 DerivedMesh *BKE_shard_create_dm(Shard *s, bool doCustomData)
 {
 	DerivedMesh *dm;
@@ -1790,16 +1797,13 @@ DerivedMesh *BKE_shard_create_dm(Shard *s, bool doCustomData)
 
 	if (doCustomData) {
 		if (s->totvert > 1) {
-			//CustomData_add_layer(&dm->vertData, CD_MDEFORMVERT, CD_DUPLICATE, CustomData_get_layer(&s->vertData, CD_MDEFORMVERT), s->totvert);
-			CustomData_copy(&s->vertData, &dm->vertData, CD_MASK_MDEFORMVERT, CD_DUPLICATE, s->totvert);
+			BKE_copy_customdata_layers(&dm->vertData, &s->vertData, CD_MDEFORMVERT, s->totvert);
 		}
 		if (s->totloop > 0) {
-			//CustomData_add_layer(&dm->loopData, CD_MLOOPUV, CD_DUPLICATE, CustomData_get_layer(&s->loopData, CD_MLOOPUV), s->totloop);
-			CustomData_copy(&s->loopData, &dm->loopData, CD_MASK_MLOOPUV, CD_DUPLICATE, s->totloop);
+			BKE_copy_customdata_layers(&dm->loopData, &s->loopData, CD_MLOOPUV, s->totloop);
 		}
 		if (s->totpoly > 0) {
-			//CustomData_add_layer(&dm->polyData, CD_MTEXPOLY, CD_DUPLICATE, CustomData_get_layer(&s->polyData, CD_MTEXPOLY), s->totpoly);
-			CustomData_copy(&s->polyData, &dm->polyData, CD_MASK_MTEXPOLY, CD_DUPLICATE, s->totpoly);
+			BKE_copy_customdata_layers(&dm->polyData, &s->polyData, CD_MTEXPOLY, s->totpoly);
 		}
 	}
 
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index ff4b248..b55a059 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -4012,10 +4012,6 @@ static Shard* copy_shard(Shard *s)
 	CustomData_reset(&t->loopData);
 	CustomData_reset(&t->polyData);
 
-	/*CustomData_add_layer(&t->vertData, CD_MDEFORMVERT, CD_DUPLICATE, CustomData_get_layer(&s->vertData, CD_MDEFORMVERT), s->totvert);
-	CustomData_add_layer(&t->loopData, CD_MLOOPUV, CD_DUPLICATE, CustomData_get_layer(&s->loopData, CD_MLOOPUV), s->totloop);
-	CustomData_add_layer(&t->polyData, CD_MTEXPOLY, CD_DUPLICATE, CustomData_get_layer(&s->polyData, CD_MTEXPOLY), s->totpoly);*/
-
 	CustomData_copy(&s->vertData, &t->vertData, CD_MASK_MDEFORMVERT, CD_DUPLICATE, s->totvert);
 	CustomData_copy(&s->loopData, &t->loopData, CD_MASK_MLOOPUV, CD_DUPLICATE, s->totloop);
 	CustomData_copy(&s->polyData, &t->polyData, CD_MASK_MTEXPOLY, CD_DUPLICATE, s->totpoly);




More information about the Bf-blender-cvs mailing list