[Bf-blender-cvs] [bbd71c879e2] greasepencil-object: Fix modifier enable/disable on render mode

Antonio Vazquez noreply at git.blender.org
Sat Jan 20 16:51:39 CET 2018


Commit: bbd71c879e298edc2c13327235a6f5b4532663cb
Author: Antonio Vazquez
Date:   Sat Jan 20 16:51:31 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBbbd71c879e298edc2c13327235a6f5b4532663cb

Fix modifier enable/disable on render mode

The old test to verify if the modifier was enabled in render mode used G_RENDER_OGL flag, but for new draw manager, there is a function for that: DRW_state_is_image_render()

Also fixed the problem the cache was not set as dirty before render, so the flags were not updated to draw the correct image.

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M	source/blender/draw/engines/gpencil/gpencil_engine.c
M	source/blender/draw/engines/gpencil/gpencil_engine.h
M	source/blender/draw/engines/gpencil/gpencil_vfx.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 92f983595bd..1118664aefa 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -197,10 +197,10 @@ bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
 
 void BKE_gpencil_stroke_modifiers(
 		struct EvaluationContext *eval_ctx, struct Object *ob, 
-		struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps);
+		struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps, bool is_render);
 void BKE_gpencil_geometry_modifiers(
 		struct EvaluationContext *eval_ctx, struct Object *ob, 
-		struct bGPDlayer *gpl, struct bGPDframe *gpf);
+		struct bGPDlayer *gpl, struct bGPDframe *gpf, bool is_render);
 
 void BKE_gpencil_array_modifier_instance_tfm(struct GpencilArrayModifierData *mmd, const int elem_idx[3], float r_mat[4][4]);
 
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 2ddad9bd540..0d5b8a9981c 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -353,15 +353,15 @@ bool BKE_gpencil_has_geometry_modifiers(Object *ob)
 }
 
 /* apply stroke modifiers */
-void BKE_gpencil_stroke_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(gpf), bGPDstroke *gps)
+void BKE_gpencil_stroke_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(gpf), bGPDstroke *gps, bool is_render)
 {
 	ModifierData *md;
 	bGPdata *gpd = ob->data;
 	bool is_edit = GPENCIL_ANY_EDIT_MODE(gpd);
 	
 	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_Realtime) && (is_render == false)) ||
+		    ((md->mode & eModifierMode_Render) && (is_render == true)))
 		{
 			const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 			
@@ -377,7 +377,7 @@ void BKE_gpencil_stroke_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDl
 }
 
 /* apply stroke geometry modifiers */
-void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bool is_render)
 {
 	ModifierData *md;
 	bGPdata *gpd = ob->data;
@@ -385,8 +385,8 @@ void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGP
 
 	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_Realtime) && (is_render == false)) ||
+		    ((md->mode & eModifierMode_Render) && (is_render == true)))
 		{
 			const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 			
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 31c05de7778..33a7ddcf2b5 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -714,7 +714,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
 	if ((cache->is_dirty) && (ob->modifiers.first) && (!is_multiedit)) {
 		if (!GP_SIMPLIFY_MODIF(ts, playing)) {
 			if (BKE_gpencil_has_geometry_modifiers(ob)) {
-				BKE_gpencil_geometry_modifiers(&eval_ctx, ob, gpl, derived_gpf);
+				BKE_gpencil_geometry_modifiers(&eval_ctx, ob, gpl, derived_gpf, stl->storage->is_render);
 			}
 		}
 	}
@@ -785,7 +785,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
 			/* apply modifiers (only modify geometry, but not create ) */
 			if ((cache->is_dirty) && (ob->modifiers.first) && (!is_multiedit)) {
 				if (!GP_SIMPLIFY_MODIF(ts, playing)) {
-					BKE_gpencil_stroke_modifiers(&eval_ctx, ob, gpl, derived_gpf, gps);
+					BKE_gpencil_stroke_modifiers(&eval_ctx, ob, gpl, derived_gpf, gps, stl->storage->is_render);
 				}
 			}
 			/* fill */
@@ -1298,8 +1298,8 @@ void gpencil_array_modifiers(GPENCIL_StorageList *stl, Object *ob)
 	}
 
 	for (ModifierData *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_Realtime) && (stl->storage->is_render == false)) ||
+		    ((md->mode & eModifierMode_Render) && (stl->storage->is_render == true)))
 		{
 			if (md->type == eModifierType_GpencilArray) {
 				GpencilArrayModifierData *mmd = (GpencilArrayModifierData *)md;
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 4c34ef8e242..9e088ebf87c 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -284,6 +284,8 @@ static void GPENCIL_cache_init(void *vedata)
 		if (draw_ctx->evil_C) {
 			stl->storage->playing = ED_screen_animation_playing(CTX_wm_manager(draw_ctx->evil_C)) != NULL ? 1 : 0;
 		}
+		/* save render state */
+		stl->storage->is_render = DRW_state_is_image_render();
 		/* detect if painting session */
 		bGPdata *obact_gpd = NULL;
 		if ((obact) && (obact->type == OB_GPENCIL) && (obact->data))
@@ -315,6 +317,10 @@ static void GPENCIL_cache_init(void *vedata)
 			if (stl->storage->playing == 1) {
 				gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
 			}
+			/* if render, set as dirty to update all data */
+			else if (stl->storage->is_render == true) {
+				gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
+			}
 		}
 		bGPDpaletteref *palslot = BKE_gpencil_paletteslot_get_active(gpd);
 		PaletteColor *palcolor = BKE_palette_color_get_active((palslot) ? palslot->palette : NULL);
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index fd5d8e5b954..e082ea2fc95 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -163,6 +163,7 @@ typedef struct GPENCIL_Storage {
 	float obj_scale;
 	int pixfactor;
 	int playing;
+	bool is_render;
 	int uselines;
 	float gridsize[2];
 	float gridcolor[3];
diff --git a/source/blender/draw/engines/gpencil/gpencil_vfx.c b/source/blender/draw/engines/gpencil/gpencil_vfx.c
index bb428eeea0d..24d65e2cbb2 100644
--- a/source/blender/draw/engines/gpencil/gpencil_vfx.c
+++ b/source/blender/draw/engines/gpencil/gpencil_vfx.c
@@ -24,7 +24,6 @@
  */
 
 #include "BKE_modifier.h"
-#include "BKE_global.h"
 #include "BKE_gpencil.h"
 
 #include "DRW_engine.h"
@@ -40,7 +39,7 @@
 #include "gpencil_engine.h"
 
 /* verify if this modifier is  available in the context, return NULL if not available */
-static ModifierData *modifier_available(Object *ob, ModifierType type)
+static ModifierData *modifier_available(Object *ob, ModifierType type, bool is_render)
 {
 	ModifierData *md = modifiers_findByType(ob, type);
 	if (md == NULL) {
@@ -56,8 +55,8 @@ static ModifierData *modifier_available(Object *ob, ModifierType type)
 	if (((md->mode & eModifierMode_Editmode) == 0) && (is_edit)) {
 		return NULL;
 	}
-	if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
-	    ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+	if (((md->mode & eModifierMode_Realtime) && (is_render == false)) ||
+		((md->mode & eModifierMode_Render) && (is_render == true)))
 	{
 		return md;
 	}
@@ -66,7 +65,7 @@ static ModifierData *modifier_available(Object *ob, ModifierType type)
 }
 
 /* verify if this modifier is active */
-static bool modifier_is_active(Object *ob, ModifierData *md)
+static bool modifier_is_active(Object *ob, ModifierData *md, bool is_render)
 {
 	if (md == NULL) {
 		return false;
@@ -82,8 +81,8 @@ static bool modifier_is_active(Object *ob, ModifierData *md)
 		return false;
 	}
 
-	if (((md->mode & eModifierMode_Realtime) && ((G.f & G_RENDER_OGL) == 0)) ||
-	    ((md->mode & eModifierMode_Render) && (G.f & G_RENDER_OGL)))
+	if (((md->mode & eModifierMode_Realtime) && (is_render == false)) ||
+	    ((md->mode & eModifierMode_Render) && (is_render == true)))
 	{
 		return true;
 	}
@@ -427,8 +426,9 @@ void DRW_gpencil_vfx_modifiers(
         int ob_idx, struct GPENCIL_e_data *e_data, struct GPENCIL_Data *vedata,
         struct Object *ob, struct tGPencilObjectCache *cache)
 {
+	GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
 	bool ready = false;
-	ModifierData *md_wave = modifier_available(ob, eModifierType_GpencilWave);
+	ModifierData *md_wave = modifier_available(ob, eModifierType_GpencilWave, stl->storage->is_render);
 
 	if (md_wave) {
 		DRW_gpencil_vfx_wave(md_wave, ob_idx, e_data, vedata, ob, cache);
@@ -441,7 +441,7 @@ void DRW_gpencil_vfx_modifiers(
 	for (ModifierData *md = ob->modifiers.first; md; md = md->next) {
 		switch (md->type) {
 			case eModifierType_GpencilBlur:
-				if (modifier_is_active(ob, md)) {
+				if (modifier_is_active(ob, md, stl->storage->is_render)) {
 					if (!ready) {
 						DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
 						ready = true;
@@ -450,7 +450,7 @@ void DRW_gpencil_vfx_modifiers(
 				}
 				break;
 			case eModifierType_GpencilPixel:
-				if (modifier_is_active(ob, md)) {
+				if (modifier_is_active(ob, md, stl->storage->is_render)) {
 					if (!ready) {
 						DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
 						ready = true;
@@ -459,7 +459,7 @@ void DRW_gpencil_vfx_modifiers(
 				}
 				break;
 			case eModifierType_GpencilSwirl:
-				if (modifier_is_active(ob, md)) {
+				if (modifier_is_active(ob, md, stl->storage->is_render)) {
 					if (!ready) {
 						DRW_gpencil_vfx_copy(ob_idx, e_data, vedata, ob, cache);
 						ready = true;
@@ -468,7 +468,7 @@ void DRW_gpencil_vfx_modifiers(
 				}
 				break;
 			case eModifierType_GpencilFlip:
-				if (modifier_is_active(ob, md)) {
+				if (modifier_is_active(ob, md, s

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list