[Bf-blender-cvs] [85779228d02] temp-gpencil-eval: Cleanup: Split assign pointers
Antonio Vazquez
noreply at git.blender.org
Tue Jan 14 11:02:11 CET 2020
Commit: 85779228d02d84ddb262a78fa00fcb1a63121f87
Author: Antonio Vazquez
Date: Tue Jan 14 11:02:04 2020 +0100
Branches: temp-gpencil-eval
https://developer.blender.org/rB85779228d02d84ddb262a78fa00fcb1a63121f87
Cleanup: Split assign pointers
===================================================================
M source/blender/blenkernel/BKE_gpencil_modifier.h
M source/blender/blenkernel/intern/gpencil_modifier.c
M source/blender/blenkernel/intern/object_update.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 7c9b0f59488..b7dbd388357 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -319,5 +319,8 @@ void BKE_gpencil_modifiers_calc(struct Depsgraph *depsgraph,
struct Object *ob);
void BKE_gpencil_prepare_eval_data(struct Depsgraph *depsgraph, struct Object *ob);
+void BKE_gpencil_update_refences(struct Depsgraph *depsgraph,
+ struct Scene *scene,
+ struct Object *ob);
#endif /* __BKE_GPENCIL_MODIFIER_H__ */
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 2a1d880c3b0..3b9434d581a 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -924,7 +924,66 @@ void BKE_gpencil_prepare_eval_data(Depsgraph *depsgraph, Object *ob)
}
}
-static void gpencil_update_reference_pointers(bGPDframe *gpf_orig, bGPDframe *gpf_eval)
+/* Calculate gpencil modifiers */
+void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
+{
+ bGPdata *gpd = (bGPdata *)ob->data;
+
+ const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
+ const bool is_render = (bool)(DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
+ const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
+ int cfra_eval = (int)DEG_get_ctime(depsgraph);
+
+ /* Init general modifiers data. */
+ if (ob->greasepencil_modifiers.first) {
+ BKE_gpencil_lattice_init(ob);
+ }
+
+ /* *****************************************************************
+ * Loop all layers in eval datablock and apply modifiers.
+ * ******************************************************************/
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ /* Remap frame (Time modifier) */
+ int remap_cfra = cfra_eval;
+ if (time_remap) {
+ remap_cfra = BKE_gpencil_time_modifier(depsgraph, scene, ob, gpl, cfra_eval, is_render);
+ }
+ bGPDframe *gpf = BKE_gpencil_layer_frame_get(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
+
+ if (gpf == NULL) {
+ continue;
+ }
+
+ /* Apply geometry modifiers (create new geometry). */
+ if (BKE_gpencil_has_geometry_modifiers(ob)) {
+ BKE_gpencil_geometry_modifiers(depsgraph, ob, gpl, gpf, is_render);
+ }
+
+ /* Apply deform modifiers (only change geometry). */
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+ /* Apply modifiers that only deform geometry */
+ BKE_gpencil_stroke_modifiers(depsgraph, ob, gpl, gpf, gps, is_render);
+ }
+
+ /* Generate triangulation for filling in eval copy and verify if any updated is required.
+ * Usually, this is only required the first time because if the stroke is copied by depsgraph,
+ * the original stroke is already ready and don't need more work except if some modifiers
+ * tagged the stroke to be recalc. */
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+ MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
+ if (gp_style) {
+ BKE_gpencil_recalc_geometry_caches(ob, gpl, gp_style, gps);
+ }
+ }
+ }
+
+ /* Clear any lattice data. */
+ if (ob->greasepencil_modifiers.first) {
+ BKE_gpencil_lattice_clear(ob);
+ }
+}
+
+static void gpencil_update_frame_reference_pointers(bGPDframe *gpf_orig, bGPDframe *gpf_eval)
{
int stroke_idx = -1;
for (bGPDstroke *gps = gpf_orig->strokes.first; gps; gps = gps->next) {
@@ -947,16 +1006,14 @@ static void gpencil_update_reference_pointers(bGPDframe *gpf_orig, bGPDframe *gp
}
}
-/* Calculate gpencil modifiers */
-void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
+void BKE_gpencil_update_refences(Depsgraph *depsgraph, Scene *scene, Object *ob)
{
- bGPdata *gpd = (bGPdata *)ob->data;
+ bGPdata *gpd_eval = (bGPdata *)ob->data;
/* use original data to set reference pointers to original data */
Object *ob_orig = DEG_get_original_object(ob);
bGPdata *gpd_orig = (bGPdata *)ob_orig->data;
- const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
const bool is_render = (bool)(DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
int cfra_eval = (int)DEG_get_ctime(depsgraph);
@@ -980,7 +1037,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
}
/* Retry evaluated layer. */
- bGPDlayer *gpl_eval = BLI_findlink(&gpd->layers, layer_idx);
+ bGPDlayer *gpl_eval = BLI_findlink(&gpd_eval->layers, layer_idx);
if (gpl_eval == NULL) {
continue;
}
@@ -990,55 +1047,7 @@ void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
if (gpf_eval == NULL) {
continue;
}
- /* Update reference pointers. */
- gpencil_update_reference_pointers(gpf_orig, gpf_eval);
- }
-
- /* Init general modifiers data. */
- if (ob->greasepencil_modifiers.first) {
- BKE_gpencil_lattice_init(ob);
- }
-
- /* *****************************************************************
- * Loop all layers in eval datablock and apply modifiers.
- * ******************************************************************/
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- /* Remap frame (Time modifier) */
- int remap_cfra = cfra_eval;
- if (time_remap) {
- remap_cfra = BKE_gpencil_time_modifier(depsgraph, scene, ob, gpl, cfra_eval, is_render);
- }
- bGPDframe *gpf = BKE_gpencil_layer_frame_get(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
-
- if (gpf == NULL) {
- continue;
- }
-
- /* Apply geometry modifiers (create new geometry). */
- if (BKE_gpencil_has_geometry_modifiers(ob)) {
- BKE_gpencil_geometry_modifiers(depsgraph, ob, gpl, gpf, is_render);
- }
-
- /* Apply deform modifiers (only change geometry). */
- for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- /* Apply modifiers that only deform geometry */
- BKE_gpencil_stroke_modifiers(depsgraph, ob, gpl, gpf, gps, is_render);
- }
-
- /* Generate triangulation for filling in eval copy and verify if any updated is required.
- * Usually, this is only required the first time because if the stroke is copied by depsgraph,
- * the original stroke is already ready and don't need more work except if some modifiers
- * tagged the stroke to be recalc. */
- for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
- if (gp_style) {
- BKE_gpencil_recalc_geometry_caches(ob, gpl, gp_style, gps);
- }
- }
- }
-
- /* Clear any lattice data. */
- if (ob->greasepencil_modifiers.first) {
- BKE_gpencil_lattice_clear(ob);
+ /* Update frame reference pointers. */
+ gpencil_update_frame_reference_pointers(gpf_orig, gpf_eval);
}
}
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 071402815d5..0e010ae469a 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -216,6 +216,7 @@ void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *o
break;
case OB_GPENCIL: {
BKE_gpencil_prepare_eval_data(depsgraph, ob);
+ BKE_gpencil_update_refences(depsgraph, scene, ob);
BKE_gpencil_modifiers_calc(depsgraph, scene, ob);
break;
}
More information about the Bf-blender-cvs
mailing list