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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user