diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c index bdca3a350cd..e401712828d 100644 --- a/source/blender/draw/engines/gpencil/gpencil_engine.c +++ b/source/blender/draw/engines/gpencil/gpencil_engine.c @@ -382,7 +382,8 @@ void GPENCIL_cache_init(void *vedata) (stl->storage->is_playing == false)) { if (((obact_gpd->runtime.sbuffer_sflag & GP_STROKE_ERASER) == 0) && - (obact_gpd->runtime.sbuffer_size > 0)) + (obact_gpd->runtime.sbuffer_size > 0) && + ((obact_gpd->flag & GP_DATA_STROKE_POLYGON) == 0)) { stl->g_data->session_flag |= GP_DRW_PAINT_PAINTING; } diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index d4371926eb4..b50624d07d2 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -733,6 +733,9 @@ static short gp_stroke_addpoint( } else if (p->paintmode == GP_PAINTMODE_DRAW_POLY) { + /* enable special flag for drawing engine */ + gpd->flag |= GP_DATA_STROKE_POLYGON; + bGPDlayer *gpl = BKE_gpencil_layer_getactive(gpd); /* get pointer to destination point */ pt = (tGPspoint *)(gpd->runtime.sbuffer); @@ -2124,6 +2127,7 @@ static void gpencil_draw_exit(bContext *C, wmOperator *op) /* drawing batch cache is dirty now */ bGPdata *gpd = CTX_data_gpencil_data(C); if (gpd) { + gpd->flag &= ~GP_DATA_STROKE_POLYGON; gp_update_cache(gpd); } } diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h index f4a13801949..8462b615d2c 100644 --- a/source/blender/makesdna/DNA_gpencil_types.h +++ b/source/blender/makesdna/DNA_gpencil_types.h @@ -427,6 +427,8 @@ typedef enum eGPdata_Flag { * not valid. */ GP_DATA_STROKE_FORCE_RECALC = (1 << 17), + /* Special mode drawing polygons */ + GP_DATA_STROKE_POLYGON = (1 << 18), } eGPdata_Flag; /* gpd->onion_flag */