From ba1197fe5e27f1cb7be281b3f20166a69050a273 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 7 Nov 2017 16:29:31 +0100 Subject: Depsgraph: Simplify some workarounds and make API closer to final --- source/blender/blenkernel/BKE_scene.h | 2 +- source/blender/blenkernel/intern/context.c | 2 +- source/blender/blenkernel/intern/scene.c | 10 ++++++++-- source/blender/blenkernel/intern/sequencer.c | 6 +----- source/blender/depsgraph/intern/depsgraph_build.cc | 5 ++++- source/blender/depsgraph/intern/depsgraph_eval.cc | 2 +- source/blender/depsgraph/intern/depsgraph_tag.cc | 10 ++++++++-- source/blender/editors/object/object_add.c | 2 +- source/blender/editors/render/render_preview.c | 6 +----- source/blender/editors/scene/scene_edit.c | 6 +----- source/blender/editors/space_view3d/view3d_draw.c | 3 ++- source/blender/editors/transform/transform_conversions.c | 10 ++++++++-- source/blender/makesrna/intern/rna_layer.c | 2 +- source/blender/makesrna/intern/rna_scene_api.c | 12 ++---------- source/blender/render/intern/source/pipeline.c | 4 ++-- source/creator/creator_args.c | 11 ++++------- 16 files changed, 46 insertions(+), 47 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index a27e743763d..3b550bd845d 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -230,7 +230,7 @@ void BKE_scene_allocate_depsgraph_hash(struct Scene *scene); void BKE_scene_ensure_depsgraph_hash(struct Scene *scene); void BKE_scene_free_depsgraph_hash(struct Scene *scene); -struct Depsgraph *BKE_scene_get_depsgraph(struct Scene *scene, struct SceneLayer *scene_layer); +struct Depsgraph *BKE_scene_get_depsgraph(struct Scene *scene, struct SceneLayer *scene_layer, bool allocate); #ifdef __cplusplus } diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 00ad060dd1c..0bd79a50673 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -1260,7 +1260,7 @@ Depsgraph *CTX_data_depsgraph(const bContext *C) { Scene *scene = CTX_data_scene(C); SceneLayer *scene_layer = CTX_data_scene_layer(C); - return BKE_scene_get_depsgraph(scene, scene_layer); + return BKE_scene_get_depsgraph(scene, scene_layer, true); } void CTX_data_eval_ctx(const bContext *C, EvaluationContext *eval_ctx) diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 9583719dca9..4b2e7eff866 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -2453,8 +2453,14 @@ void BKE_scene_free_depsgraph_hash(Scene *scene) /* Query depsgraph for a specific contexts. */ -Depsgraph *BKE_scene_get_depsgraph(Scene *scene, SceneLayer *scene_layer) +Depsgraph *BKE_scene_get_depsgraph(Scene *scene, + SceneLayer *scene_layer, + bool allocate) { (void) scene_layer; - return scene->depsgraph_legacy; + Depsgraph *depsgraph = scene->depsgraph_legacy; + if (depsgraph == NULL && allocate) { + scene->depsgraph_legacy = depsgraph = DEG_graph_new(); + } + return depsgraph; } diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 9026baee183..11c3a5658e8 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -3264,11 +3264,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq /* Get depsgraph and scene layer for the strip. */ SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(scene); - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); - /* TODO(sergey): This is a temporary solution. */ - if (depsgraph == NULL) { - scene->depsgraph_legacy = depsgraph = DEG_graph_new(); - } + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true); orig_data.scemode = scene->r.scemode; orig_data.cfra = scene->r.cfra; diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc index e58a5707bc9..b6bf6c6fa78 100644 --- a/source/blender/depsgraph/intern/depsgraph_build.cc +++ b/source/blender/depsgraph/intern/depsgraph_build.cc @@ -275,7 +275,10 @@ void DEG_relations_tag_update(Main *bmain) DEG_DEBUG_PRINTF("%s: Tagging relations for update.\n", __func__); LINKLIST_FOREACH(Scene *, scene, &bmain->scene) { LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) { - Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, scene_layer); + Depsgraph *depsgraph = + (Depsgraph *)BKE_scene_get_depsgraph(scene, + scene_layer, + false); if (depsgraph != NULL) { DEG_graph_tag_relations_update(depsgraph); } diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc index 820be5179b5..6dbbba0391b 100644 --- a/source/blender/depsgraph/intern/depsgraph_eval.cc +++ b/source/blender/depsgraph/intern/depsgraph_eval.cc @@ -85,7 +85,7 @@ void DEG_evaluation_context_init_from_scene(EvaluationContext *eval_ctx, eEvaluationMode mode) { DEG_evaluation_context_init(eval_ctx, mode); - eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); + eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, false); eval_ctx->scene_layer = scene_layer; eval_ctx->engine = engine; eval_ctx->ctime = BKE_scene_frame_get(scene); diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc index 13f1506eadb..39505d256ec 100644 --- a/source/blender/depsgraph/intern/depsgraph_tag.cc +++ b/source/blender/depsgraph/intern/depsgraph_tag.cc @@ -353,7 +353,10 @@ void deg_id_tag_update(Main *bmain, ID *id, int flag) lib_id_recalc_tag_flag(bmain, id, flag); LINKLIST_FOREACH(Scene *, scene, &bmain->scene) { LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) { - Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, scene_layer); + Depsgraph *depsgraph = + (Depsgraph *)BKE_scene_get_depsgraph(scene, + scene_layer, + false); if (depsgraph != NULL) { deg_graph_id_tag_update(bmain, depsgraph, id, flag); } @@ -461,7 +464,10 @@ void DEG_on_visible_update(Main *bmain, const bool UNUSED(do_time)) { LINKLIST_FOREACH(Scene *, scene, &bmain->scene) { LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) { - Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, scene_layer); + Depsgraph *depsgraph = + (Depsgraph *)BKE_scene_get_depsgraph(scene, + scene_layer, + false); if (depsgraph != NULL) { DEG_graph_on_visible_update(bmain, depsgraph); } diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index d527e64e6c5..a761caab29b 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1762,7 +1762,7 @@ static int convert_exec(bContext *C, wmOperator *op) DEG_id_tag_update(&base->object->id, OB_RECALC_DATA); } - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl); + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl, true); uint64_t customdata_mask_prev = scene->customdata_mask; scene->customdata_mask |= CD_MASK_MESH; BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene); diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 9bcc6f49b6f..84c843af020 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -604,11 +604,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty } } - Depsgraph *depsgraph = BKE_scene_get_depsgraph(sce, scene_layer); - /* TODO(sergey): This is a temporary solution. */ - if (depsgraph == NULL) { - sce->depsgraph_legacy = depsgraph = DEG_graph_new(); - } + Depsgraph *depsgraph = BKE_scene_get_depsgraph(sce, scene_layer, true); /* TODO(sergey): Use proper flag for tagging here. */ DEG_graph_id_tag_update(pr_main, depsgraph, &sce->id, 0); DEG_relations_tag_update(pr_main); diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c index 3799fed8ac2..4a104a330a4 100644 --- a/source/blender/editors/scene/scene_edit.c +++ b/source/blender/editors/scene/scene_edit.c @@ -124,11 +124,7 @@ void ED_scene_changed_update(Main *bmain, bContext *C, Scene *scene_new, const b * but workspace should remember the last one set. Could store render-layer * per window-workspace combination (using WorkSpaceDataRelation) */ SceneLayer *layer_new = BLI_findlink(&scene_new->render_layers, scene_new->active_layer); - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene_new, layer_new); - /* TODO(sergey): This is a temporary solution. */ - if (depsgraph == NULL) { - scene_new->depsgraph_legacy = depsgraph = DEG_graph_new(); - } + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene_new, layer_new, true); CTX_data_scene_set(C, scene_new); BKE_workspace_render_layer_set(CTX_wm_workspace(C), layer_new); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index ec2dcc75bc0..75d064bbbac 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2057,7 +2057,8 @@ void ED_view3d_draw_offscreen( } else { /* XXX, should take depsgraph as arg */ - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, false); + BLI_assert(depsgraph != NULL); DRW_draw_render_loop_offscreen(depsgraph, eval_ctx->engine, ar, v3d, ofs); } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index b1013140711..ed215a84dc7 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5540,7 +5540,10 @@ static void set_trans_object_base_flags(TransInfo *t) Main *bmain = G.main; SceneLayer *sl = t->scene_layer; Scene *scene = t->scene; - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl); + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl, false); + + /* Transform tool is expected to be executed from an evaluated scene. */ + BLI_assert(depsgraph != NULL); /* * if Base selected and has parent selected: @@ -5641,9 +5644,12 @@ static int count_proportional_objects(TransInfo *t) Main *bmain = G.main; SceneLayer *sl = t->scene_layer; Scene *scene = t->scene; - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl); + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl, false); Base *base; + /* Transform tool is expected to be executed from an evaluated scene. */ + BLI_assert(depsgraph != NULL); + /* rotations around local centers are allowed to propagate, so we take all objects */ if (!((t->around == V3D_AROUND_LOCAL_ORIGINS) && (t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL))) diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c index 1c7ce4fecf1..2fffc3a6c8f 100644 --- a/source/blender/makesrna/intern/rna_layer.c +++ b/source/blender/makesrna/intern/rna_layer.c @@ -850,7 +850,7 @@ static PointerRNA rna_SceneLayer_depsgraph_get(PointerRNA *ptr) { Scene *scene = (Scene *)ptr->id.data; SceneLayer *scene_layer = (SceneLayer *)ptr->data; - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, false); return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, depsgraph); } diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 6b315ddf1c9..78afba0e426 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -89,11 +89,7 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf scene_layer != NULL; scene_layer = scene_layer->next) { - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); - /* TODO(sergey): This is a temporary solution. */ - if (depsgraph == NULL) { - scene->depsgraph_legacy = depsgraph = DEG_graph_new(); - } + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true); BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene); } @@ -139,11 +135,7 @@ static void rna_Scene_update_tagged(Scene *scene, Main *bmain) scene_layer != NULL; scene_layer = scene_layer->next) { - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); - /* TODO(sergey): This is a temporary solution. */ - if (depsgraph == NULL) { - scene->depsgraph_legacy = depsgraph = DEG_graph_new(); - } + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true); BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene); } diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index c05b48cc4a9..7a8f0d3ada7 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -3144,7 +3144,7 @@ static void update_physics_cache(Render *re, Scene *scene, SceneLayer *scene_lay baker.main = re->main; baker.scene = scene; baker.scene_layer = scene_layer; - baker.depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); + baker.depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true); baker.bake = 0; baker.render = 1; baker.anim_init = 1; @@ -3862,7 +3862,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce, ViewRender *view_rend re->scene = sce; re->scene_color_manage = BKE_scene_check_color_management_enabled(sce); re->lay = sce->lay; - re->depsgraph = BKE_scene_get_depsgraph(sce, scene_layer); + re->depsgraph = BKE_scene_get_depsgraph(sce, scene_layer, false); re->eval_ctx->scene_layer = scene_layer; camera = RE_GetCamera(re); diff --git a/source/creator/creator_args.c b/source/creator/creator_args.c index f16383f3a0a..c3f355f3937 100644 --- a/source/creator/creator_args.c +++ b/source/creator/creator_args.c @@ -440,13 +440,10 @@ static void render_set_depgraph(bContext *C, Render *re) * is NULL for old files, and there is no workspace). */ SceneLayer *scene_layer = scene->render_layers.first; - Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer); - /* TODO(sergey): This is a temporary solution. */ - if (depsgraph == NULL) { - scene->depsgraph_legacy = depsgraph = DEG_graph_new(); - DEG_graph_build_from_scene(depsgraph, bmain, scene); - DEG_graph_on_visible_update(bmain, depsgraph); - } + Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true); + DEG_graph_relations_update(depsgraph, bmain, scene); + DEG_graph_on_visible_update(bmain, depsgraph); + RE_SetDepsgraph(re, depsgraph); } -- cgit v1.2.3