[Bf-blender-cvs] [a6f5adb8369] greasepencil-object: Fix Lattice memory leak

Antonio Vazquez noreply at git.blender.org
Thu Aug 10 17:12:40 CEST 2017


Commit: a6f5adb83698262aec9360d8850cab4536982208
Author: Antonio Vazquez
Date:   Thu Aug 10 17:11:58 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBa6f5adb83698262aec9360d8850cab4536982208

Fix Lattice memory leak

The loop need to free memory to avoid memory leak

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index e7d5b57e28d..5f00e326404 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -178,6 +178,7 @@ void BKE_gpencil_simplify_stroke(struct bGPDlayer *gpl, struct bGPDstroke *gps,
 
 bool BKE_gpencil_use_this_lattice(struct Object *ob, struct Object *lattice);
 void BKE_gpencil_lattice_init(struct Object *ob);
+void BKE_gpencil_lattice_clear(struct Object *ob);
 void BKE_gpencil_lattice_modifier(int id, struct GpencilLatticeModifierData *mmd, struct Object *ob, struct bGPDlayer *gpl, struct bGPDstroke *gps);
 
 #endif /*  __BKE_GPENCIL_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 284ecb09ac6..db3e738c596 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -684,6 +684,21 @@ void BKE_gpencil_lattice_init(Object *ob)
 	}
 }
 
+/* clear lattice deform data */
+void BKE_gpencil_lattice_clear(Object *ob)
+{
+	ModifierData *md;
+	for (md = ob->modifiers.first; md; md = md->next) {
+		if (md->type == eModifierType_GpencilLattice) {
+			GpencilLatticeModifierData *mmd = (GpencilLatticeModifierData *)md;
+			if ((mmd) && (mmd->cache_data)) {
+				end_latt_deform((LatticeDeformData *)mmd->cache_data);
+				mmd->cache_data = NULL;
+			}
+		}
+	}
+}
+
 /* apply lattice to stroke */
 void BKE_gpencil_lattice_modifier(int UNUSED(id), GpencilLatticeModifierData *mmd, Object *ob, bGPDlayer *gpl, bGPDstroke *gps)
 {
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 321ea46e6e9..9e01ab829f4 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -897,6 +897,12 @@ void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data, void *vedata, Scene
 		gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gpf, derived_gpf, 
 			gpl->opacity, gpl->tintcolor, false, false);
 	}
+
+	/* clear any lattice data */
+	if ((cache->is_dirty) && (ob->modifiers.first)) {
+		BKE_gpencil_lattice_clear(ob);
+	}
+
 	cache->is_dirty = false;
 }




More information about the Bf-blender-cvs mailing list