diff options
Diffstat (limited to 'source/blender/depsgraph/intern/depsgraph_eval.cc')
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_eval.cc | 81 |
1 files changed, 27 insertions, 54 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc index 0448dbe2c8d..466808338f8 100644 --- a/source/blender/depsgraph/intern/depsgraph_eval.cc +++ b/source/blender/depsgraph/intern/depsgraph_eval.cc @@ -36,10 +36,9 @@ #include "BLI_ghash.h" extern "C" { -#include "DNA_scene_types.h" - -#include "BKE_depsgraph.h" #include "BKE_scene.h" + +#include "DNA_scene_types.h" } /* extern "C" */ #include "DEG_depsgraph.h" @@ -53,50 +52,16 @@ extern "C" { #include "intern/depsgraph.h" -#ifdef WITH_LEGACY_DEPSGRAPH -static bool use_legacy_depsgraph = true; -#endif - -bool DEG_depsgraph_use_legacy(void) -{ -#ifdef DISABLE_NEW_DEPSGRAPH - return true; -#elif defined(WITH_LEGACY_DEPSGRAPH) - return use_legacy_depsgraph; -#else - BLI_assert(!"Should not be used with new depsgraph"); - return false; -#endif -} - -void DEG_depsgraph_switch_to_legacy(void) -{ -#ifdef WITH_LEGACY_DEPSGRAPH - use_legacy_depsgraph = true; -#else - BLI_assert(!"Should not be used with new depsgraph"); -#endif -} - -void DEG_depsgraph_switch_to_new(void) -{ -#ifdef WITH_LEGACY_DEPSGRAPH - use_legacy_depsgraph = false; -#else - BLI_assert(!"Should not be used with new depsgraph"); -#endif -} - /* ****************** */ /* Evaluation Context */ /* Create new evaluation context. */ -EvaluationContext *DEG_evaluation_context_new(int mode) +EvaluationContext *DEG_evaluation_context_new(eEvaluationMode mode) { EvaluationContext *eval_ctx = (EvaluationContext *)MEM_callocN(sizeof(EvaluationContext), "EvaluationContext"); - eval_ctx->mode = mode; + DEG_evaluation_context_init(eval_ctx, mode); return eval_ctx; } @@ -105,11 +70,28 @@ EvaluationContext *DEG_evaluation_context_new(int mode) * Used by the areas which currently overrides the context or doesn't have * access to a proper one. */ -void DEG_evaluation_context_init(EvaluationContext *eval_ctx, int mode) +void DEG_evaluation_context_init(EvaluationContext *eval_ctx, + eEvaluationMode mode) { eval_ctx->mode = mode; } +void DEG_evaluation_context_init_from_scene( + EvaluationContext *eval_ctx, + Scene *scene, + ViewLayer *view_layer, + RenderEngineType *engine_type, + eObjectMode object_mode, + eEvaluationMode mode) +{ + DEG_evaluation_context_init(eval_ctx, mode); + eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true); + eval_ctx->view_layer = view_layer; + eval_ctx->engine_type = engine_type; + eval_ctx->ctime = BKE_scene_frame_get(scene); + eval_ctx->object_mode = object_mode; +} + /* Free evaluation context. */ void DEG_evaluation_context_free(EvaluationContext *eval_ctx) { @@ -118,29 +100,20 @@ void DEG_evaluation_context_free(EvaluationContext *eval_ctx) /* Evaluate all nodes tagged for updating. */ void DEG_evaluate_on_refresh(EvaluationContext *eval_ctx, - Depsgraph *graph, - Scene *scene) + Depsgraph *graph) { DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph); /* Update time on primary timesource. */ DEG::TimeSourceDepsNode *tsrc = deg_graph->find_time_source(); - tsrc->cfra = BKE_scene_frame_get(scene); - unsigned int layers = deg_graph->layers; - /* XXX(sergey): This works around missing updates in temp scenes used - * by various scripts, but is weak and needs closer investigation. - */ - if (layers == 0) { - layers = scene->lay; - } - DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph, layers); + tsrc->cfra = BKE_scene_frame_get(deg_graph->scene); + DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph); } /* Frame-change happened for root scene that graph belongs to. */ void DEG_evaluate_on_framechange(EvaluationContext *eval_ctx, Main *bmain, Depsgraph *graph, - float ctime, - const unsigned int layers) + float ctime) { DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(graph); /* Update time on primary timesource. */ @@ -149,7 +122,7 @@ void DEG_evaluate_on_framechange(EvaluationContext *eval_ctx, tsrc->tag_update(deg_graph); DEG::deg_graph_flush_updates(bmain, deg_graph); /* Perform recalculation updates. */ - DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph, layers); + DEG::deg_evaluate_on_refresh(eval_ctx, deg_graph); } bool DEG_needs_eval(Depsgraph *graph) |