[Bf-blender-cvs] [5d7474ae01e] greasepencil-object: Prepare buffer stroke to save points

Antonioya noreply at git.blender.org
Thu Dec 6 12:18:23 CET 2018


Commit: 5d7474ae01e1bc27dd54b0aa841523ed7dcbf46f
Author: Antonioya
Date:   Thu Dec 6 12:18:11 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB5d7474ae01e1bc27dd54b0aa841523ed7dcbf46f

Prepare buffer stroke to save points

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

M	source/blender/editors/gpencil/gpencil_primitive.c

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

diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c
index 9d36c1f3963..c865271e822 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -92,6 +92,27 @@
   /* ************************************************ */
   /* Core/Shared Utilities */
 
+/* clear the session buffers (call this before AND after a paint operation) */
+static void gp_session_validatebuffer(tGPDprimitive *p)
+{
+	bGPdata *gpd = p->gpd;
+
+	/* clear memory of buffer (or allocate it if starting a new session) */
+	if (gpd->runtime.sbuffer) {
+		memset(gpd->runtime.sbuffer, 0, sizeof(tGPspoint) * GP_STROKE_BUFFER_MAX);
+	}
+	else {
+		gpd->runtime.sbuffer = MEM_callocN(sizeof(tGPspoint) * GP_STROKE_BUFFER_MAX, "gp_session_strokebuffer");
+	}
+
+	/* reset indices */
+	gpd->runtime.sbuffer_size = 0;
+
+	/* reset flags */
+	gpd->runtime.sbuffer_sflag = 0;
+	gpd->runtime.sbuffer_sflag |= GP_STROKE_3DSPACE;
+}
+
   /* Poll callback for primitive operators */
 static bool gpencil_primitive_add_poll(bContext *C)
 {
@@ -478,6 +499,17 @@ static void gpencil_primitive_exit(bContext *C, wmOperator *op)
 		MEM_freeN(tgpi->gpf);
 		MEM_freeN(tgpi);
 	}
+
+	/* free stroke buffer */
+	if ((gpd != NULL) && (gpd->runtime.sbuffer)) {
+		MEM_freeN(gpd->runtime.sbuffer);
+		gpd->runtime.sbuffer = NULL;
+
+		/* clear flags */
+		gpd->runtime.sbuffer_size = 0;
+		gpd->runtime.sbuffer_sflag = 0;
+	}
+
 	DEG_id_tag_update(&gpd->id, OB_RECALC_OB | OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_GPENCIL | NA_EDITED, NULL);
 
@@ -515,6 +547,9 @@ static void gpencil_primitive_init(bContext *C, wmOperator *op)
 	/* set GP datablock */
 	tgpi->gpd = gpd;
 
+	/* prepare buffer data */
+	gp_session_validatebuffer(tgpi);
+
 	/* getcolor info */
 	tgpi->mat = BKE_gpencil_material_ensure(bmain, tgpi->ob);



More information about the Bf-blender-cvs mailing list