[Bf-blender-cvs] [a8f31c339fc] temp-render-depsgraph: Store the required depsgraph and eval_ctx in the render layers

Dalai Felinto noreply at git.blender.org
Wed Feb 21 21:51:46 CET 2018


Commit: a8f31c339fcf56a8990edc8b5a703175422d6869
Author: Dalai Felinto
Date:   Tue Feb 20 12:55:02 2018 -0300
Branches: temp-render-depsgraph
https://developer.blender.org/rBa8f31c339fcf56a8990edc8b5a703175422d6869

Store the required depsgraph and eval_ctx in the render layers

Missing: To call the equivalent of BKE_scene_graph_update_tagged() for these depsgraphs.

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

M	intern/cycles/blender/addon/__init__.py
M	source/blender/compositor/CMakeLists.txt
M	source/blender/depsgraph/DEG_depsgraph.h
M	source/blender/depsgraph/intern/depsgraph_eval.cc
M	source/blender/draw/intern/draw_manager.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/render_result.c

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

diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py
index 1cb7835d14d..e5a0cbc316f 100644
--- a/intern/cycles/blender/addon/__init__.py
+++ b/intern/cycles/blender/addon/__init__.py
@@ -79,8 +79,8 @@ class CyclesRender(bpy.types.RenderEngine):
         else:
             engine.reset(self, data, scene)
 
-    def render_to_image(self, depsgraph):
-        engine.render(self, depsgraph)
+    def render_to_image(self, data, scene):
+        engine.render(self, data, scene)
 
     def bake(self, scene, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
         engine.bake(self, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result)
diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt
index 3e1dd83112a..a141495e5ae 100644
--- a/source/blender/compositor/CMakeLists.txt
+++ b/source/blender/compositor/CMakeLists.txt
@@ -31,6 +31,7 @@ set(INC
 	../blenkernel
 	../blenlib
 	../blentranslation
+	../depsgraph
 	../imbuf
 	../makesdna
 	../makesrna
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h
index 8110899048d..e96ef847137 100644
--- a/source/blender/depsgraph/DEG_depsgraph.h
+++ b/source/blender/depsgraph/DEG_depsgraph.h
@@ -224,6 +224,12 @@ void DEG_evaluation_context_init_from_scene(
         const eObjectMode object_mode,
         eEvaluationMode mode);
 
+void DEG_evaluation_context_init_from_view_layer_for_render(
+        struct EvaluationContext *eval_ctx,
+        struct Depsgraph *depsgraph,
+        struct Scene *scene,
+        struct ViewLayer *view_layer);
+
 /* Free evaluation context. */
 void DEG_evaluation_context_free(struct EvaluationContext *eval_ctx);
 
diff --git a/source/blender/depsgraph/intern/depsgraph_eval.cc b/source/blender/depsgraph/intern/depsgraph_eval.cc
index 4fb5a8ff580..2dc36d0d428 100644
--- a/source/blender/depsgraph/intern/depsgraph_eval.cc
+++ b/source/blender/depsgraph/intern/depsgraph_eval.cc
@@ -32,6 +32,7 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "BLI_listbase.h"
 #include "BLI_utildefines.h"
 #include "BLI_ghash.h"
 
@@ -92,6 +93,24 @@ void DEG_evaluation_context_init_from_scene(
 	eval_ctx->object_mode = object_mode;
 }
 
+void DEG_evaluation_context_init_from_view_layer_for_render(
+        EvaluationContext *eval_ctx,
+        Depsgraph *depsgraph,
+        Scene *scene,
+        ViewLayer *view_layer)
+{
+	/* ViewLayer may come from a copy of scene.viewlayers, we need to find the original though. */
+	ViewLayer *view_layer_original = (ViewLayer *)BLI_findstring(&scene->view_layers, view_layer->name, offsetof(ViewLayer, name));
+	BLI_assert(view_layer_original != NULL);
+
+	DEG_evaluation_context_init(eval_ctx, DAG_EVAL_RENDER);
+	eval_ctx->depsgraph = depsgraph;
+	eval_ctx->view_layer = view_layer_original;
+	eval_ctx->engine_type = NULL;
+	eval_ctx->ctime = BKE_scene_frame_get(scene);
+	eval_ctx->object_mode = OB_MODE_OBJECT;
+}
+
 /* Free evaluation context. */
 void DEG_evaluation_context_free(EvaluationContext *eval_ctx)
 {
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 5299fa04e4e..1f848c0d9a7 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -3660,12 +3660,8 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
 			 render_layer != NULL;
 			 render_layer = render_layer->next)
 		{
-			ViewLayer *view_layer = BLI_findstring(&scene->view_layers, render_layer->name, offsetof(ViewLayer, name));
-			DST.draw_ctx.view_layer = view_layer;
-
-			/* TODO(dfelinto/sergey) we should not get depsgraph from scene.
-			 * For rendering depsgraph is to be owned by Render. */
-			DST.draw_ctx.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+			DST.draw_ctx.view_layer = render_layer->eval_ctx.view_layer;
+			DST.draw_ctx.depsgraph = render_layer->depsgraph;
 
 			engine_type->draw_engine->render_to_image(data, engine, render_result, render_layer);
 			DST.buffer_finish_called = false;
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 0557efccc2f..131433f71d0 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -34,6 +34,7 @@
 
 #include "DNA_listBase.h"
 #include "DNA_vec_types.h"
+#include "DEG_depsgraph.h"
 
 struct bMovieHandle;
 struct bNodeTree;
@@ -121,7 +122,10 @@ typedef struct RenderLayer {
 
 	/* optional saved endresult on disk */
 	void *exrhandle;
-	
+
+	struct Depsgraph *depsgraph;
+	struct EvaluationContext eval_ctx;
+
 	ListBase passes;
 	
 } RenderLayer;
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index f97c8fb0b06..af043e83fa2 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -52,6 +52,9 @@
 #include "BKE_camera.h"
 #include "BKE_scene.h"
 
+#include "DNA_object_types.h"
+#include "DEG_depsgraph_query.h"
+
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 #include "IMB_colormanagement.h"
@@ -103,6 +106,9 @@ void render_result_free(RenderResult *res)
 			MEM_freeN(rpass);
 		}
 		BLI_remlink(&res->layers, rl);
+
+		DEG_graph_free(rl->depsgraph);
+
 		MEM_freeN(rl);
 	}
 
@@ -322,7 +328,10 @@ RenderResult *render_result_new(Render *re, rcti *partrct, int crop, int savebuf
 		rl->pass_xor = view_layer->pass_xor;
 		rl->rectx = rectx;
 		rl->recty = recty;
-		
+
+		rl->depsgraph = DEG_graph_new();
+		DEG_evaluation_context_init_from_view_layer_for_render(&rl->eval_ctx, rl->depsgraph, re->scene, view_layer);
+
 		if (rr->do_exr_tile) {
 			rl->display_buffer = MEM_mapallocN((size_t)rectx * recty * sizeof(unsigned int),
 			                                   "Combined display space rgba");
@@ -1492,6 +1501,13 @@ static RenderLayer *duplicate_render_layer(RenderLayer *rl)
 		RenderPass  *new_rpass = duplicate_render_pass(rpass);
 		BLI_addtail(&new_rl->passes, new_rpass);
 	}
+
+	if (rl->eval_ctx.depsgraph != NULL) {
+		Scene *scene = DEG_get_evaluated_scene(rl->eval_ctx.depsgraph);
+		new_rl->depsgraph = DEG_graph_new();
+		DEG_evaluation_context_init_from_view_layer_for_render(&new_rl->eval_ctx, new_rl->depsgraph, scene, new_rl->eval_ctx.view_layer);
+	}
+
 	return new_rl;
 }



More information about the Bf-blender-cvs mailing list