[Bf-blender-cvs] [cc220781aa5] greasepencil-object: Reorganize VFX modifiers code

Antonio Vazquez noreply at git.blender.org
Sun Aug 13 13:04:06 CEST 2017


Commit: cc220781aa5349b989a2d05bf5edba11a9ee108b
Author: Antonio Vazquez
Date:   Fri Aug 11 17:30:58 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBcc220781aa5349b989a2d05bf5edba11a9ee108b

Reorganize VFX modifiers code

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

M	source/blender/draw/engines/gpencil/gpencil_vfx.c

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

diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index 1c181d649bc..60de6d35195 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -58,6 +58,29 @@ static ModifierData *modifier_available(Object *ob, ModifierType type)
 	return NULL;
 }
 
+/* verify if this modifier is active */
+static bool modifier_is_active(Object *ob, ModifierData *md)
+{
+	if (md == NULL) {
+		return false;
+	}
+
+	bGPdata *gpd = ob->gpd;
+	if (gpd == NULL) {
+		return false;
+	}
+
+	bool is_edit = (bool)((gpd->flag & (GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE | GP_DATA_STROKE_WEIGHTMODE)));
+	if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
+		((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)) ||
+		((md->mode & eModifierMode_Editmode) && (is_edit)))
+	{
+		return true;
+	}
+
+	return false;
+}
+
 /* Copy image as is to fill vfx texture */
 static void DRW_gpencil_vfx_copy(int ob_idx, GPENCIL_e_data *e_data, GPENCIL_Data *vedata, Object *ob, tGPencilObjectCache *cache)
 {
@@ -171,22 +194,29 @@ static void DRW_gpencil_vfx_blur(ModifierData *md, int ob_idx, GPENCIL_e_data *e
 
 void DRW_gpencil_vfx_modifiers(int ob_idx, struct GPENCIL_e_data *e_data, struct GPENCIL_Data *vedata, struct Object *ob, struct tGPencilObjectCache *cache)
 {
+	bool ready = false;
 	ModifierData *md_wave = modifier_available(ob, eModifierType_GpencilWave);
-	ModifierData *md_blur = modifier_available(ob, eModifierType_GpencilBlur);
-
-	if ((md_wave == NULL) && (md_blur == NULL)) {
-		return;
-	}
 
 	if (md_wave) {
 		DRW_gpencil_vfx_wave(md_wave, ob_idx, e_data, vedata, ob, cache);
-	}
-	else {
-		/* need to fill the texture by default */
-		DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
+		ready = true;
 	}
 
-	if (md_blur) {
-		DRW_gpencil_vfx_blur(md_blur, ob_idx, e_data, vedata, ob, cache);
+	/* loop VFX modifiers 
+	 * copy the original texture if wave modifier did not copy before
+	 */
+	for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
+		switch (md->type) {
+			case eModifierType_GpencilBlur:
+				if (modifier_is_active(ob, md)) {
+					if (!ready) {
+						DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
+						ready = true;
+					}
+					DRW_gpencil_vfx_blur(md, ob_idx, e_data, vedata, ob, cache);
+				}
+				break;
+		}
 	}
+
 }
\ No newline at end of file




More information about the Bf-blender-cvs mailing list