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 */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to