[Bf-blender-cvs] [0ba0993f18c] blender2.8: Depsgraph: Port more areas to direct depsgraph API

Sergey Sharybin noreply at git.blender.org
Fri Nov 3 15:01:06 CET 2017


Commit: 0ba0993f18c135f260a8278a911185452011fea4
Author: Sergey Sharybin
Date:   Fri Nov 3 14:36:49 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB0ba0993f18c135f260a8278a911185452011fea4

Depsgraph: Port more areas to direct depsgraph API

This is a lots of changes, but they are boiling down to a simple API
changes where we are no longer relying on implicit usage of scene's
depsgraph and pass depsgraph explicitly.

There should be no user measurable difference, render_layer* tests
are also passing.

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

M	source/blender/blenkernel/intern/anim.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/collada/AnimationExporter.cpp
M	source/blender/editors/include/ED_screen.h
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/scene/scene_edit.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/space_clip/tracking_ops_track.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
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

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

diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 758bf588a9c..23fbcf583ad 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -276,7 +276,7 @@ void animviz_get_object_motionpaths(Object *ob, ListBase *targets)
 /* ........ */
 
 /* update scene for current frame */
-static void motionpaths_calc_update_scene(Scene *scene)
+static void motionpaths_calc_update_scene(Main *bmain, Scene *scene, struct Depsgraph *depsgraph)
 {
 	/* Do all updates
 	 *  - if this is too slow, resort to using a more efficient way
@@ -285,8 +285,10 @@ static void motionpaths_calc_update_scene(Scene *scene)
 	 *
 	 * TODO(segey): Bring back partial updates, which became impossible
 	 * with the new depsgraph due to unsorted nature of bases.
+	 *
+	 * TODO(sergey): Use evaluation context dedicated to motion paths.
 	 */
-	BKE_scene_update_for_newframe(G.main->eval_ctx, G.main, scene);
+	BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene);
 }
 
 /* ........ */
@@ -336,11 +338,13 @@ static void motionpaths_calc_bake_targets(Scene *scene, ListBase *targets)
  *	- recalc: whether we need to
  */
 /* TODO: include reports pointer? */
-void animviz_calc_motionpaths(bContext *UNUSED(C), Scene *scene, ListBase *targets)
+void animviz_calc_motionpaths(bContext *C, Scene *scene, ListBase *targets)
 {
 	MPathTarget *mpt;
 	int sfra, efra;
 	int cfra;
+	Main *bmain = CTX_data_main(C);
+	struct Depsgraph *depsgraph = CTX_data_depsgraph(C);
 	
 	/* sanity check */
 	if (ELEM(NULL, targets, targets->first))
@@ -363,7 +367,7 @@ void animviz_calc_motionpaths(bContext *UNUSED(C), Scene *scene, ListBase *targe
 	/* calculate path over requested range */
 	for (CFRA = sfra; CFRA <= efra; CFRA++) {
 		/* update relevant data for new frame */
-		motionpaths_calc_update_scene(scene);
+		motionpaths_calc_update_scene(bmain, scene, depsgraph);
 		
 		/* perform baking for targets */
 		motionpaths_calc_bake_targets(scene, targets);
@@ -371,7 +375,7 @@ void animviz_calc_motionpaths(bContext *UNUSED(C), Scene *scene, ListBase *targe
 	
 	/* reset original environment */
 	CFRA = cfra;
-	motionpaths_calc_update_scene(scene);
+	motionpaths_calc_update_scene(bmain, scene, depsgraph);
 	
 	/* clear recalc flags from targets */
 	for (mpt = targets->first; mpt; mpt = mpt->next) {
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 1e034a27e64..6ae826a20b1 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -2464,5 +2464,8 @@ void BKE_scene_free_depsgraph_hash(Scene *scene)
 Depsgraph *BKE_scene_get_depsgraph(Scene *scene, SceneLayer *scene_layer)
 {
 	(void) scene_layer;
+	if (scene->depsgraph_legacy == NULL) {
+		scene->depsgraph_legacy = DEG_graph_new();
+	}
 	return scene->depsgraph_legacy;
 }
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp
index 299c94a6a81..6e59a404e47 100644
--- a/source/blender/collada/AnimationExporter.cpp
+++ b/source/blender/collada/AnimationExporter.cpp
@@ -939,7 +939,7 @@ std::string AnimationExporter::create_4x4_source(std::vector<float> &frames, Obj
 
 		float ctime = BKE_scene_frame_get_from_ctime(scene, *it);
 		CFRA = BKE_scene_frame_get_from_ctime(scene, *it);
-		//BKE_scene_update_for_newframe(G.main->eval_ctx, G.main,scene);
+		//BKE_scene_graph_update_for_newframe(G.main->eval_ctx, depsgraph, G.main,scene);
 		BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, ctime, ADT_RECALC_ALL);
 				
 		if (bone) {
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 93786a484f2..8a1c7239955 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -39,6 +39,7 @@
 
 #include "BLI_compiler_attrs.h"
 
+struct Depsgraph;
 struct wmWindowManager;
 struct wmWindow;
 struct wmNotifier;
@@ -163,7 +164,7 @@ bool ED_workspace_layout_cycle(
         struct bContext *C) ATTR_NONNULL();
 
 /* anim */
-void    ED_update_for_newframe(struct Main *bmain, struct Scene *scene);
+void    ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct Depsgraph *depsgraph);
 
 void    ED_refresh_viewport_fps(struct bContext *C);
 int		ED_screen_animation_play(struct bContext *C, int sync, int mode);
diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c
index 7de94be0c7a..210d8351945 100644
--- a/source/blender/editors/physics/dynamicpaint_ops.c
+++ b/source/blender/editors/physics/dynamicpaint_ops.c
@@ -289,6 +289,7 @@ typedef struct DynamicPaintBakeJob {
 	struct Main *bmain;
 	Scene *scene;
 	SceneLayer *scene_layer;
+	Depsgraph *depsgraph;
 	Object *ob;
 
 	DynamicPaintSurface *surface;
@@ -364,7 +365,7 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
 	frame = surface->start_frame;
 	orig_frame = scene->r.cfra;
 	scene->r.cfra = (int)frame;
-	ED_update_for_newframe(job->bmain, scene);
+	ED_update_for_newframe(job->bmain, scene, job->depsgraph);
 
 	/* Init surface	*/
 	if (!dynamicPaint_createUVSurface(scene, surface, job->progress, job->do_update)) {
@@ -390,7 +391,7 @@ static void dynamicPaint_bakeImageSequence(DynamicPaintBakeJob *job)
 
 		/* calculate a frame */
 		scene->r.cfra = (int)frame;
-		ED_update_for_newframe(job->bmain, scene);
+		ED_update_for_newframe(job->bmain, scene, job->depsgraph);
 		if (!dynamicPaint_calculateFrame(surface, job->eval_ctx, scene, cObject, frame)) {
 			job->success = 0;
 			return;
@@ -491,6 +492,7 @@ static int dynamicpaint_bake_exec(struct bContext *C, struct wmOperator *op)
 	job->bmain = CTX_data_main(C);
 	job->scene = scene;
 	job->scene_layer = sl;
+	job->depsgraph = CTX_data_depsgraph(C);
 	job->ob = ob;
 	job->canvas = canvas;
 	job->surface = surface;
diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c
index 060ac046ba1..a5e92802c6f 100644
--- a/source/blender/editors/physics/physics_fluid.c
+++ b/source/blender/editors/physics/physics_fluid.c
@@ -332,6 +332,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
 {
 	Scene *scene = CTX_data_scene(C);
 	SceneLayer *sl = CTX_data_scene_layer(C);
+	Depsgraph *depsgraph = CTX_data_depsgraph(C);
 	EvaluationContext eval_ctx;
 	Base *base;
 	int i;
@@ -408,7 +409,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
 		/* Modifying the global scene isn't nice, but we can do it in 
 		 * this part of the process before a threaded job is created */
 		scene->r.cfra = (int)eval_time;
-		ED_update_for_newframe(CTX_data_main(C), scene);
+		ED_update_for_newframe(CTX_data_main(C), scene, depsgraph);
 		
 		/* now scene data should be current according to animation system, so we fill the channels */
 		
@@ -846,6 +847,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor
 {
 	Scene *scene = CTX_data_scene(C);
 	SceneLayer *sl = CTX_data_scene_layer(C);
+	Depsgraph *depsgraph = CTX_data_depsgraph(C);
 	int i;
 	FluidsimSettings *domainSettings;
 
@@ -957,7 +959,7 @@ static int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain, shor
 
 	/* reset to original current frame */
 	scene->r.cfra = origFrame;
-	ED_update_for_newframe(CTX_data_main(C), scene);
+	ED_update_for_newframe(CTX_data_main(C), scene, depsgraph);
 		
 	/* ******** init domain object's matrix ******** */
 	copy_m4_m4(domainMat, fsDomain->obmat);
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 77381b43b22..61ff9264e95 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -102,6 +102,10 @@ typedef struct RenderJob {
 	Main *main;
 	Scene *scene;
 	Scene *current_scene;
+	/* TODO(sergey): Should not be needed once engine will have own
+	 * depsgraph and copy-on-write will be implemented.
+	 */
+	Depsgraph *depsgraph;
 	Render *re;
 	SceneRenderLayer *srl;
 	struct Object *camera_override;
@@ -338,7 +342,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
 	RE_SetReports(re, NULL);
 
 	// no redraw needed, we leave state as we entered it
-	ED_update_for_newframe(mainp, scene);
+	ED_update_for_newframe(mainp, scene, CTX_data_depsgraph(C));
 
 	WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, scene);
 
@@ -652,7 +656,7 @@ static void render_endjob(void *rjv)
 	if (rj->anim && !(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) {
 		/* possible this fails of loading new file while rendering */
 		if (G.main->wm.first) {
-			ED_update_for_newframe(G.main, rj->scene);
+			ED_update_for_newframe(G.main, rj->scene, rj->depsgraph);
 		}
 	}
 	
@@ -915,6 +919,8 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
 	rj->main = mainp;
 	rj->scene = scene;
 	rj->current_scene = rj->scene;
+	/* TODO(sergey): Render engine should be using own depsgraph. */
+	rj->depsgraph = CTX_data_depsgraph(C);
 	rj->srl = srl;
 	rj->camera_override = camera_override;
 	rj->lay_override = 0;
diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index 061a783930d..1bbc6b3e91a 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -124,15 +124,17 @@ 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);
 
 	CTX_data_scene_set(C, scene_new);
 	BKE_workspace_render_layer_set(CTX_wm_workspace(C), layer_new);
 	BKE_scene_set_background(bmain, scene_new);
+	DEG_graph_relations_update(depsgraph, bmain, scene_new);
 	DEG_on_visible_update(bmain, false);
 
 	ED_screen_update_after_scene_change(active_screen, scene_new);
 	ED_render_engine_changed

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list