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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to