[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