[Bf-blender-cvs] [d325e6f0e84] blender2.8: Depsgraph: Make dependency graph to be built from scene layer

Sergey Sharybin noreply at git.blender.org
Thu Nov 9 11:26:58 CET 2017


Commit: d325e6f0e845d710abe4847a57be8e30920911a9
Author: Sergey Sharybin
Date:   Thu Nov 9 11:20:17 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBd325e6f0e845d710abe4847a57be8e30920911a9

Depsgraph: Make dependency graph to be built from scene layer

This is a final step of having proper ownership. Now selecting different
layers in the "top bar" will actually do what this is expected to do.

Surely, there are still things to be done under the hood, that will happen
in a less intrusive way.

===================================================================

M	source/blender/alembic/intern/abc_exporter.cc
M	source/blender/alembic/intern/abc_exporter.h
M	source/blender/alembic/intern/alembic_capi.cc
M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/anim.c
M	source/blender/blenkernel/intern/pointcache.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/depsgraph/CMakeLists.txt
M	source/blender/depsgraph/DEG_depsgraph_build.h
M	source/blender/depsgraph/DEG_depsgraph_debug.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
R085	source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc	source/blender/depsgraph/intern/builder/deg_builder_nodes_scene_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h
R089	source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc	source/blender/depsgraph/intern/builder/deg_builder_relations_scene_layer.cc
M	source/blender/depsgraph/intern/depsgraph.cc
M	source/blender/depsgraph/intern/depsgraph.h
M	source/blender/depsgraph/intern/depsgraph_build.cc
M	source/blender/depsgraph/intern/depsgraph_debug.cc
M	source/blender/depsgraph/intern/depsgraph_query.cc
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/object/object_add.c
M	source/blender/editors/physics/dynamicpaint_ops.c
M	source/blender/editors/physics/physics_fluid.c
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/render/render_opengl.c
M	source/blender/editors/render/render_preview.c
M	source/blender/editors/scene/scene_edit.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/sound/sound_ops.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/makesrna/intern/rna_scene_api.c
M	source/blender/render/intern/source/convertblender.c
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/pipeline.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_operators.c
M	source/creator/creator_args.c
M	tests/gtests/alembic/abc_export_test.cc

===================================================================

diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc
index 51e2e7040f9..af6cf655652 100644
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@ -168,7 +168,8 @@ static bool export_object(const ExportSettings * const settings, const Base * co
 
 /* ************************************************************************** */
 
-AbcExporter::AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene, Depsgraph *depsgraph,
+AbcExporter::AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene, SceneLayer *scene_layer,
+                         Depsgraph *depsgraph,
                          const char *filename, ExportSettings &settings)
     : m_bmain(bmain)
     , m_settings(settings)
@@ -177,6 +178,7 @@ AbcExporter::AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene,
     , m_shape_sampling_index(0)
     , m_eval_ctx(eval_ctx)
     , m_scene(scene)
+    , m_scene_layer(scene_layer)
     , m_depsgraph(depsgraph)
     , m_writer(NULL)
 {}
@@ -655,5 +657,5 @@ void AbcExporter::setCurrentFrame(Main *bmain, double t)
 {
 	m_scene->r.cfra = static_cast<int>(t);
 	m_scene->r.subframe = static_cast<float>(t) - m_scene->r.cfra;
-	BKE_scene_graph_update_for_newframe(bmain->eval_ctx, m_depsgraph, bmain, m_scene);
+	BKE_scene_graph_update_for_newframe(bmain->eval_ctx, m_depsgraph, bmain, m_scene, m_scene_layer);
 }
diff --git a/source/blender/alembic/intern/abc_exporter.h b/source/blender/alembic/intern/abc_exporter.h
index d0f3964abd5..816e2db725b 100644
--- a/source/blender/alembic/intern/abc_exporter.h
+++ b/source/blender/alembic/intern/abc_exporter.h
@@ -95,6 +95,7 @@ class AbcExporter {
 
 	EvaluationContext *m_eval_ctx;
 	Scene *m_scene;
+	SceneLayer *m_scene_layer;
 	Depsgraph *m_depsgraph;
 
 	ArchiveWriter *m_writer;
@@ -106,7 +107,8 @@ class AbcExporter {
 	std::vector<AbcObjectWriter *> m_shapes;
 
 public:
-	AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene, Depsgraph *depsgraph,
+	AbcExporter(Main *bmain, EvaluationContext *eval_ctx, Scene *scene, SceneLayer *scene_layer,
+	            Depsgraph *depsgraph,
 	            const char *filename, ExportSettings &settings);
 	~AbcExporter();
 
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index d17182a0d65..e4d6357a1be 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -232,6 +232,7 @@ static void find_iobject(const IObject &object, IObject &ret,
 struct ExportJobData {
 	EvaluationContext eval_ctx;
 	Scene *scene;
+	SceneLayer *scene_layer;
 	Depsgraph *depsgraph;
 	Main *bmain;
 
@@ -264,7 +265,8 @@ static void export_startjob(void *customdata, short *stop, short *do_update, flo
 
 	try {
 		Scene *scene = data->scene;
-		AbcExporter exporter(data->bmain, &data->eval_ctx, scene, data->depsgraph, data->filename, data->settings);
+		SceneLayer *scene_layer = data->scene_layer;
+		AbcExporter exporter(data->bmain, &data->eval_ctx, scene, scene_layer, data->depsgraph, data->filename, data->settings);
 
 		const int orig_frame = CFRA;
 
@@ -274,7 +276,7 @@ static void export_startjob(void *customdata, short *stop, short *do_update, flo
 		if (CFRA != orig_frame) {
 			CFRA = orig_frame;
 
-			BKE_scene_graph_update_for_newframe(data->bmain->eval_ctx, data->depsgraph, data->bmain, scene);
+			BKE_scene_graph_update_for_newframe(data->bmain->eval_ctx, data->depsgraph, data->bmain, scene, data->scene_layer);
 		}
 
 		data->export_ok = !data->was_canceled;
@@ -316,6 +318,7 @@ bool ABC_export(
 	CTX_data_eval_ctx(C, &job->eval_ctx);
 
 	job->scene = scene;
+	job->scene_layer = CTX_data_scene_layer(C);
 	job->depsgraph = CTX_data_depsgraph(C);
 	job->bmain = CTX_data_main(C);
 	job->export_ok = false;
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 04761b3fa9e..fac11edea75 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -144,12 +144,14 @@ void  BKE_scene_frame_set(struct Scene *scene, double cfra);
 void BKE_scene_graph_update_tagged(struct EvaluationContext *eval_ctx,
                                    struct Depsgraph *depsgraph,
                                    struct Main *bmain,
-                                   struct Scene *scene);
+                                   struct Scene *scene,
+                                   struct SceneLayer *scene_layer);
 
 void BKE_scene_graph_update_for_newframe(struct EvaluationContext *eval_ctx,
                                          struct Depsgraph *depsgraph,
                                          struct Main *bmain,
-                                         struct Scene *sce);
+                                         struct Scene *scene,
+                                         struct SceneLayer *scene_layer);
 
 struct SceneRenderLayer *BKE_scene_add_render_layer(struct Scene *sce, const char *name);
 bool BKE_scene_remove_render_layer(struct Main *main, struct Scene *scene, struct SceneRenderLayer *srl);
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 23fbcf583ad..eb63ea5250d 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -276,7 +276,10 @@ void animviz_get_object_motionpaths(Object *ob, ListBase *targets)
 /* ........ */
 
 /* update scene for current frame */
-static void motionpaths_calc_update_scene(Main *bmain, Scene *scene, struct Depsgraph *depsgraph)
+static void motionpaths_calc_update_scene(Main *bmain,
+                                          Scene *scene,
+                                          SceneLayer *scene_layer,
+                                          struct Depsgraph *depsgraph)
 {
 	/* Do all updates
 	 *  - if this is too slow, resort to using a more efficient way
@@ -288,7 +291,7 @@ static void motionpaths_calc_update_scene(Main *bmain, Scene *scene, struct Deps
 	 *
 	 * TODO(sergey): Use evaluation context dedicated to motion paths.
 	 */
-	BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene);
+	BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, scene_layer);
 }
 
 /* ........ */
@@ -344,6 +347,8 @@ void animviz_calc_motionpaths(bContext *C, Scene *scene, ListBase *targets)
 	int sfra, efra;
 	int cfra;
 	Main *bmain = CTX_data_main(C);
+	/* TODO(sergey): Should we mabe pass scene layer explicitly? */
+	SceneLayer *scene_layer = CTX_data_scene_layer(C);
 	struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
 	
 	/* sanity check */
@@ -367,7 +372,7 @@ void animviz_calc_motionpaths(bContext *C, Scene *scene, ListBase *targets)
 	/* calculate path over requested range */
 	for (CFRA = sfra; CFRA <= efra; CFRA++) {
 		/* update relevant data for new frame */
-		motionpaths_calc_update_scene(bmain, scene, depsgraph);
+		motionpaths_calc_update_scene(bmain, scene, scene_layer, depsgraph);
 		
 		/* perform baking for targets */
 		motionpaths_calc_bake_targets(scene, targets);
@@ -375,7 +380,7 @@ void animviz_calc_motionpaths(bContext *C, Scene *scene, ListBase *targets)
 	
 	/* reset original environment */
 	CFRA = cfra;
-	motionpaths_calc_update_scene(bmain, scene, depsgraph);
+	motionpaths_calc_update_scene(bmain, scene, scene_layer, depsgraph);
 	
 	/* clear recalc flags from targets */
 	for (mpt = targets->first; mpt; mpt = mpt->next) {
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 4d1c2d8454b..abe8c8f8981 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -3662,7 +3662,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
 	stime = ptime = PIL_check_seconds_timer();
 
 	for (int fr = CFRA; fr <= endframe; fr += baker->quick_step, CFRA = fr) {
-		BKE_scene_graph_update_for_newframe(G.main->eval_ctx, depsgraph, bmain, scene);
+		BKE_scene_graph_update_for_newframe(G.main->eval_ctx, depsgraph, bmain, scene, scene_layer);
 
 		if (baker->update_progress) {
 			float progress = ((float)(CFRA - startframe)/(float)(endframe - startframe));
@@ -3748,7 +3748,7 @@ void BKE_ptcache_bake(PTCacheBaker *baker)
 	CFRA = cfrao;
 	
 	if (bake) { /* already on cfra unless baking */
-		BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene);
+		BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene, scene_layer);
 	}
 
 	/* TODO: call redraw all windows somehow */
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 95f10cc9846..ccdd785986d 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1537,13 +1537,19 @@ static void prepare_mesh_for_viewport_render(Main *bmain, Scene *scene)
 void BKE_scene_graph_update_tagged(EvaluationContext *eval_ctx,
                                    Depsgraph *depsgraph,
                                    Main *bmain,
-                                   Scene *scene)
+                                   Scene *scene,
+                                   SceneLayer *scene_layer)
 {
+	/* TODO(sergey): Temporary solution for until pipeline.c is ported. */
+	if (scene_layer == NULL) {
+		scene_layer = DEG_get_evaluated_scene_layer(depsgraph);
+		BLI_assert(scene_layer != NULL);
+	}
 	/* TODO(sergey): Some functions here are changing global state,
 	 * for example, clearing update tags from bmain.
 	 */
 	/* (Re-)build dependency graph if needed. */
-	DEG_graph_relations_update(depsgraph, bmain, scene);
+	DEG_graph_relations_update(depsgraph, bmain, scene, scene_layer);
 	/* Uncomment this to check if graph was properly tagged for update. */
 	// DEG_debug_graph_relations_validate(depsgraph, bmain, scene);
 	/* Flush editing data if needed. */
@@ -1566,8 +1572,14 @@ void BKE_scene_graph_update_tagged(EvaluationContext *eval_ctx,
 void BKE_scene_graph_update_for_newframe(EvaluationContext *eval_ctx,
                                          Depsgraph *depsgraph,
                                          

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list