GP: Fix unreported error drawing polygons

As the polygon drawing is handled using a buffer that is converted to stroke inmediately, the drawing engine was not drawing the buffer stroke because it was empty, and the stoke was not visible becaus eit was in fast drawing mode.

Now there is a special flag to indicate the polygon mode is enabled and force the drawing engine to draw strokes and disable fast drawing.
This commit is contained in:
Antonioya
2018-08-24 17:04:00 +02:00
parent d162be6246
commit 3b2438192b
3 changed files with 8 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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 */