[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