[Bf-blender-cvs] [2290a4e8ed5] greasepencil-object: Fix: Pass a usable EvaluationContext to GP Modifiers

Joshua Leung noreply at git.blender.org
Sat Nov 4 09:55:52 CET 2017


Commit: 2290a4e8ed5dc0052f1cd5bdd46286d8d21768f9
Author: Joshua Leung
Date:   Sat Nov 4 21:55:39 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB2290a4e8ed5dc0052f1cd5bdd46286d8d21768f9

Fix: Pass a usable EvaluationContext to GP Modifiers

This is needed for some modifiers (e.g. Build), which rely on time

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

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

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 53061f0961d..48ad56c74af 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -32,6 +32,7 @@
  */
 
 struct bContext;
+struct EvaluationContext;
 struct ToolSettings;
 struct ListBase;
 struct bGPdata;
@@ -188,8 +189,13 @@ void BKE_gpencil_stroke_weights_duplicate(struct bGPDstroke *gps_src, struct bGP
 
 /* modifiers */
 bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
-void BKE_gpencil_stroke_modifiers(struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps);
-void BKE_gpencil_geometry_modifiers(struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf);
+
+void BKE_gpencil_stroke_modifiers(
+		struct EvaluationContext *eval_ctx, struct Object *ob, 
+		struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps);
+void BKE_gpencil_geometry_modifiers(
+		struct EvaluationContext *eval_ctx, struct Object *ob, 
+		struct bGPDlayer *gpl, struct bGPDframe *gpf);
 
 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 8e530dd434b..7d50e9cb454 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -313,7 +313,7 @@ bool BKE_gpencil_has_geometry_modifiers(Object *ob)
 }
 
 /* apply stroke modifiers */
-void BKE_gpencil_stroke_modifiers(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)
 {
 	ModifierData *md;
 	bGPdata *gpd = ob->data;
@@ -330,15 +330,14 @@ void BKE_gpencil_stroke_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *UNUSED(
 			}
 			
 			if (mti && mti->deformStroke) {
-				EvaluationContext eval_ctx = {0}; /* XXX */
-				mti->deformStroke(md, &eval_ctx, ob, gpl, gps);
+				mti->deformStroke(md, eval_ctx, ob, gpl, gps);
 			}
 		}
 	}
 }
 
 /* apply stroke geometry modifiers */
-void BKE_gpencil_geometry_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
+void BKE_gpencil_geometry_modifiers(EvaluationContext *eval_ctx, Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 {
 	ModifierData *md;
 	bGPdata *gpd = ob->data;
@@ -356,8 +355,7 @@ void BKE_gpencil_geometry_modifiers(Object *ob, bGPDlayer *gpl, bGPDframe *gpf)
 			}
 
 			if (mti->generateStrokes) {
-				EvaluationContext eval_ctx = {0}; /* XXX */
-				mti->generateStrokes(md, &eval_ctx, ob, gpl, gpf, id);
+				mti->generateStrokes(md, eval_ctx, ob, gpl, gpf, id);
 			}
 		}
 		id++;
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 9fb276c50a9..19660781068 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -43,6 +43,9 @@
 #include "GPU_shader.h"
 #include "GPU_texture.h"
 
+/* For EvaluationContext... */
+#include "DEG_depsgraph.h"
+
 #include "IMB_imbuf_types.h"
 
 #include "draw_cache_impl.h"
@@ -666,6 +669,11 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache, GPENCIL_e_data *e_dat
 	bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
 	bool playing = (bool)stl->storage->playing;
 
+	/* Get evaluation context */
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	const bContext *C = draw_ctx->evil_C;
+	EvaluationContext eval_ctx;
+	CTX_data_eval_ctx(C, &eval_ctx);
 
 	/* get parent matrix and save as static data */
 	ED_gpencil_parent_location(ob, gpd, gpl, viewmatrix);
@@ -675,7 +683,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(ob, gpl, derived_gpf);
+				BKE_gpencil_geometry_modifiers(&eval_ctx, ob, gpl, derived_gpf);
 			}
 		}
 	}
@@ -745,7 +753,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(ob, gpl, derived_gpf, gps);
+					BKE_gpencil_stroke_modifiers(&eval_ctx, ob, gpl, derived_gpf, gps);
 				}
 			}
 			/* fill */



More information about the Bf-blender-cvs mailing list