[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