[Bf-blender-cvs] [d83774c0038] greasepencil-object: WIP: Basic support to display modif in edit mode

Antonio Vazquez noreply at git.blender.org
Thu Aug 3 20:43:10 CEST 2017


Commit: d83774c0038f5ebcb0820a7a755d6652e4d9a860
Author: Antonio Vazquez
Date:   Thu Aug 3 13:02:32 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBd83774c0038f5ebcb0820a7a755d6652e4d9a860

WIP: Basic support to display modif in edit mode

Still more work needed, but this commit add basic support to display the modifiers in edit , sculpt and paint mode.

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

M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M	source/blender/modifiers/intern/MOD_gpencilcolor.c
M	source/blender/modifiers/intern/MOD_gpencildupli.c
M	source/blender/modifiers/intern/MOD_gpencillattice.c
M	source/blender/modifiers/intern/MOD_gpencilnoise.c
M	source/blender/modifiers/intern/MOD_gpencilopacity.c
M	source/blender/modifiers/intern/MOD_gpencilsubdiv.c
M	source/blender/modifiers/intern/MOD_gpencilthick.c
M	source/blender/modifiers/intern/MOD_gpenciltint.c

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

diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index ddf7ebbbc3c..106dcea1fcb 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -725,10 +725,18 @@ bool BKE_gpencil_has_geometry_modifiers(Object *ob)
 void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps)
 {
 	ModifierData *md;
+	bGPdata *gpd = ob->gpd;
+	bool is_edit = (bool)((gpd->flag & (GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE | GP_DATA_STROKE_WEIGHTMODE)));
+
 	int id = 0;
 	for (md = ob->modifiers.first; md; md = md->next) {
 		if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
 			((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL))) {
+
+			if (((md->mode & eModifierMode_Editmode) == 0) && (is_edit)) {
+				continue;
+			}
+
 			switch (md->type) {
 				// Noise Modifier
 			case eModifierType_GpencilNoise:
@@ -768,10 +776,18 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bG
 void BKE_gpencil_geometry_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 {
 	ModifierData *md;
+	bGPdata *gpd = ob->gpd;
+	bool is_edit = (bool)((gpd->flag & (GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE | GP_DATA_STROKE_WEIGHTMODE)));
+
 	int id = 0;
 	for (md = ob->modifiers.first; md; md = md->next) {
 		if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
 			((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL))) {
+
+			if (((md->mode & eModifierMode_Editmode) == 0) && (is_edit)) {
+				continue;
+			}
+
 			switch (md->type) {
 				// Array
 			case eModifierType_GpencilDupli:
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 81f1681eb29..856d17f65db 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -578,35 +578,35 @@ static void gpencil_add_editpoints_shgroup(GPENCIL_StorageList *stl, GpencilBatc
 
 /* main function to draw strokes */
 static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob,
-	bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf,
+	bGPdata *gpd, bGPDlayer *gpl, bGPDframe *src_gpf, bGPDframe *derived_gpf,
 	const float opacity, const float tintcolor[4], const bool onion, const bool custonion)
 {
 	GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
 	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
-
+	bGPDstroke *gps, *src_gps;
 	DRWShadingGroup *fillgrp;
 	DRWShadingGroup *strokegrp;
 	float viewmatrix[4][4];
-	bool is_edit = (bool)((gpd->flag & (GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE | GP_DATA_STROKE_WEIGHTMODE)) || (onion));
 	ListBase tmp_colors = { NULL, NULL };
 
 	/* get parent matrix and save as static data */
 	ED_gpencil_parent_location(ob, gpd, gpl, viewmatrix);
-	copy_m4_m4(gpf->viewmatrix, viewmatrix);
+	copy_m4_m4(derived_gpf->viewmatrix, viewmatrix);
 
 	/* initialization steps */
-	if ((cache->is_dirty) && (ob->modifiers.first) && (!is_edit)) {
+	if ((cache->is_dirty) && (ob->modifiers.first) && (!onion)) {
 		BKE_gpencil_reset_modifiers(ob);
 	}
 
 	/* apply geometry modifiers */
-	if ((cache->is_dirty) && (ob->modifiers.first) && (!is_edit)) {
+	if ((cache->is_dirty) && (ob->modifiers.first) && (!onion)) {
 		if (BKE_gpencil_has_geometry_modifiers(ob)) {
-			BKE_gpencil_geometry_modifiers(ob, gpl, gpf);
+			BKE_gpencil_geometry_modifiers(ob, gpl, derived_gpf);
 		}
 	}
-
-	for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+	int gps_idx = -1;
+	for (gps = derived_gpf->strokes.first, src_gps = src_gpf->strokes.first; gps; gps = gps->next, src_gps = src_gps->next) {
+		++gps_idx;
 		/* check if stroke can be drawn */
 		if (gpencil_can_draw_stroke(gps, onion) == false) {
 			continue;
@@ -645,20 +645,21 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
 		strokegrp = stl->shgroups[id].shgrps_stroke;
 
 		/* apply modifiers (only modify geometry, but not create ) */
-		if ((cache->is_dirty) && (ob->modifiers.first) && (!is_edit)) {
-			BKE_gpencil_stroke_modifiers(ob, gpl, gpf, gps);
+		if ((cache->is_dirty) && (ob->modifiers.first) && (!onion)) {
+			BKE_gpencil_stroke_modifiers(ob, gpl, derived_gpf, gps);
 		}
 		/* fill */
 		if (fillgrp) {
-			gpencil_add_fill_shgroup(cache, fillgrp, ob, gpd, gpl, gpf, gps, tintcolor, onion, custonion);
+			gpencil_add_fill_shgroup(cache, fillgrp, ob, gpd, gpl, derived_gpf, gps, tintcolor, onion, custonion);
 		}
 		/* stroke */
-		gpencil_add_stroke_shgroup(cache, strokegrp, ob, gpd, gpl, gpf, gps, opacity, tintcolor, onion, custonion);
+		gpencil_add_stroke_shgroup(cache, strokegrp, ob, gpd, gpl, derived_gpf, gps, opacity, tintcolor, onion, custonion);
 
 		/* edit points (only in edit mode) */
 		if (!onion) {
-			gpencil_add_editpoints_shgroup(stl, cache, ts, ob, gpd, gpl, gpf, gps);
+			gpencil_add_editpoints_shgroup(stl, cache, ts, ob, gpd, gpl, derived_gpf, src_gps);
 		}
+
 		++cache->cache_idx;
 	}
 }
@@ -729,7 +730,7 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache, GPENCIL_e_data *e_
 				/* alpha decreases with distance from curframe index */
 				float fac = 1.0f - ((float)(gpf->framenum - gf->framenum) / (float)(gpl->gstep + 1));
 				color[3] = alpha * fac * 0.66f;
-				gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gf, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_PREVCOL);
+				gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gf, gf, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_PREVCOL);
 			}
 			else
 				break;
@@ -739,7 +740,7 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache, GPENCIL_e_data *e_
 		/* draw the strokes for the ghost frames (at half of the alpha set by user) */
 		if (gpf->prev) {
 			color[3] = (alpha / 7);
-			gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gpf->prev, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_PREVCOL);
+			gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gpf->prev, gpf->prev, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_PREVCOL);
 		}
 	}
 	else {
@@ -762,7 +763,7 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache, GPENCIL_e_data *e_
 				/* alpha decreases with distance from curframe index */
 				float fac = 1.0f - ((float)(gf->framenum - gpf->framenum) / (float)(gpl->gstep_next + 1));
 				color[3] = alpha * fac * 0.66f;
-				gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gf, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_NEXTCOL);
+				gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gf, gf, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_NEXTCOL);
 			}
 			else
 				break;
@@ -772,7 +773,7 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache, GPENCIL_e_data *e_
 		/* draw the strokes for the ghost frames (at half of the alpha set by user) */
 		if (gpf->next) {
 			color[3] = (alpha / 4);
-			gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gpf->next, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_NEXTCOL);
+			gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gpf->next, gpf->next, 1.0f, color, true, gpl->flag & GP_LAYER_GHOST_NEXTCOL);
 		}
 	}
 	else {
@@ -794,7 +795,7 @@ void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data, void *vedata, Scene
 	cache->cache_idx = 0;
 
 	/* init general modifiers data */
-	if ((cache->is_dirty) && (ob->modifiers.first) && (!is_edit)) {
+	if ((cache->is_dirty) && (ob->modifiers.first)) {
 		BKE_gpencil_lattice_init(ob);
 	}
 	/* draw normal strokes */
@@ -832,7 +833,8 @@ void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data, void *vedata, Scene
 			gpencil_draw_onionskins(cache, e_data, vedata, ts, ob, gpd, gpl, derived_gpf);
 		}
 		/* draw normal strokes */
-		gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, derived_gpf, gpl->opacity, gpl->tintcolor, false, false);
+		gpencil_draw_strokes(cache, e_data, vedata, ts, ob, gpd, gpl, gpf, derived_gpf, 
+			gpl->opacity, gpl->tintcolor, false, false);
 	}
 	cache->is_dirty = false;
 }
diff --git a/source/blender/modifiers/intern/MOD_gpencilcolor.c b/source/blender/modifiers/intern/MOD_gpencilcolor.c
index afb18f53d36..670278f4707 100644
--- a/source/blender/modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/modifiers/intern/MOD_gpencilcolor.c
@@ -135,7 +135,7 @@ ModifierTypeInfo modifierType_GpencilColor = {
 	/* structName */        "GpencilColorModifierData",
 	/* structSize */        sizeof(GpencilColorModifierData),
 	/* type */             	eModifierTypeType_Gpencil,
-	/* flags */             eModifierTypeFlag_GpencilMod,
+	/* flags */             eModifierTypeFlag_GpencilMod | eModifierTypeFlag_SupportsEditmode,
 
 	/* copyData */          copyData,
 	/* deformVerts */       NULL,
diff --git a/source/blender/modifiers/intern/MOD_gpencildupli.c b/source/blender/modifiers/intern/MOD_gpencildupli.c
index 09e536ffe42..7bb7404cf3a 100644
--- a/source/blender/modifiers/intern/MOD_gpencildupli.c
+++ b/source/blender/modifiers/intern/MOD_gpencildupli.c
@@ -92,7 +92,7 @@ ModifierTypeInfo modifierType_GpencilDupli = {
 	/* structName */        "GpencilDupliModifierData",
 	/* structSize */        sizeof(GpencilDupliModifierData),
 	/* type */             	eModifierTypeType_Gpencil,
-	/* flags */             eModifierTypeFlag_GpencilMod,
+	/* flags */             eModifierTypeFlag_GpencilMod | eModifierTypeFlag_SupportsEditmode,
 
 	/* copyData */          copyData,
 	/* deformVerts */       NULL,
diff --git a/source/blender/modifiers/intern/MOD_gpencillattice.c b/source/blender/modifiers/intern/MOD_gpencillattice.c
index 0f6fcb3071b..9a913d17331 100644
--- a/source/blender/modifiers/intern/MOD_gpencillattice.c
+++ b/source/blender/modifiers/intern/MOD_gpencillattice.c
@@ -131,7 +131,7 @@ ModifierTypeInfo modifierType_GpencilLattice = {
 	/* structName */        "GpencilLatticeModifierData",
 	/* structSize */        sizeof(GpencilLatticeModifierData),
 	/* type */             	eModifierTyp

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list