Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonioya <blendergit@gmail.com>2018-08-26 17:39:01 +0300
committerAntonioya <blendergit@gmail.com>2018-08-26 17:40:06 +0300
commit1948681440c011ae3008cd5d2a575eb6d45dc7ec (patch)
treec1ae82fe27da01caf3efdeab5d99a6b6e30950d8 /source/blender/blenkernel/intern/gpencil.c
parent85aafba04c18a849eda08fe3f7d46a515ba455d6 (diff)
GP: Reduce weight paint data memory footprint
Before, the weight data array was created always, but now only is added when a weight value is assigned. This change was suggested by algorithm, and both agreed it was good idea.
Diffstat (limited to 'source/blender/blenkernel/intern/gpencil.c')
-rw-r--r--source/blender/blenkernel/intern/gpencil.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 57494397f40..51731cb3e8e 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -519,7 +519,6 @@ bGPDstroke *BKE_gpencil_add_stroke(bGPDframe *gpf, int mat_idx, int totpoints, s
gps->totpoints = totpoints;
gps->points = MEM_callocN(sizeof(bGPDspoint) * gps->totpoints, "gp_stroke_points");
- gps->dvert = MEM_callocN(sizeof(MDeformVert) * gps->totpoints, "gp_stroke_weights");
/* initialize triangle memory to dummy data */
gps->triangles = MEM_callocN(sizeof(bGPDtriangle), "GP Stroke triangulation");
@@ -573,8 +572,13 @@ bGPDstroke *BKE_gpencil_stroke_duplicate(bGPDstroke *gps_src)
gps_dst->points = MEM_dupallocN(gps_src->points);
- gps_dst->dvert = MEM_dupallocN(gps_src->dvert);
- BKE_gpencil_stroke_weights_duplicate(gps_src, gps_dst);
+ if (gps_src->dvert != NULL) {
+ gps_dst->dvert = MEM_dupallocN(gps_src->dvert);
+ BKE_gpencil_stroke_weights_duplicate(gps_src, gps_dst);
+ }
+ else {
+ gps_dst->dvert = NULL;
+ }
/* Don't clear triangles, so that modifier evaluation can just use
* this without extra work first. Most places that need to force
@@ -1253,6 +1257,13 @@ void BKE_gpencil_vgroup_remove(Object *ob, bDeformGroup *defgroup)
BLI_freelinkN(&ob->defbase, defgroup);
}
+
+void BKE_gpencil_dvert_ensure(bGPDstroke *gps)
+{
+ if (gps->dvert == NULL) {
+ gps->dvert = MEM_callocN(sizeof(MDeformVert) * gps->totpoints, "gp_stroke_weights");
+ }
+}
/* add a new weight */
MDeformWeight *BKE_gpencil_vgroup_add_point_weight(MDeformVert *dvert, int index, float weight)
{