[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