[Bf-blender-cvs] [8823f851b71] temp-render-depsgraph: Update depsgraph before drawing the render layers

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


Commit: 8823f851b71e7286643af5665bcc9dfdfc6cda12
Author: Dalai Felinto
Date:   Tue Feb 20 15:19:37 2018 -0300
Branches: temp-render-depsgraph
https://developer.blender.org/rB8823f851b71e7286643af5665bcc9dfdfc6cda12

Update depsgraph before drawing the render layers

* Store the required depsgraph and eval_ctx in the render layers
* Call BKE_scene_graph_update_tagged() for these depsgraphs.

Reviewers: sergey

Subscribers: fclem

Differential Revision: https://developer.blender.org/D3073

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

M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blender/render/intern/source/external_engine.c

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

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 82ba2922dd0..b6ce34cc6b6 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -409,7 +409,7 @@ struct DefaultTextureList     *DRW_viewport_texture_list_get(void);
 
 void DRW_viewport_request_redraw(void);
 
-void DRW_render_to_image(struct RenderEngine *re, struct Depsgraph *depsgraph);
+void DRW_render_to_image(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
 void DRW_render_object_iter(
 	void *vedata, struct RenderEngine *engine, struct Depsgraph *graph,
 	void (*callback)(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *graph));
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 1f848c0d9a7..37c54aca106 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -35,6 +35,7 @@
 
 #include "BKE_curve.h"
 #include "BKE_global.h"
+#include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_object.h"
 #include "BKE_pbvh.h"
@@ -3612,9 +3613,8 @@ void DRW_draw_render_loop_offscreen(
 	GPU_offscreen_bind(ofs, false);
 }
 
-void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
+void DRW_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
 {
-	Scene *scene = DEG_get_evaluated_scene(depsgraph);
 	RenderEngineType *engine_type = engine->type;
 	DrawEngineType *draw_engine_type = engine_type->draw_engine;
 	RenderData *r = &scene->r;
@@ -3628,7 +3628,7 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
 	DST.options.draw_background = scene->r.alphamode == R_ADDSKY;
 
 	DST.draw_ctx = (DRWContextState){
-	    NULL, NULL, NULL, scene, NULL, NULL, engine_type, depsgraph, eval_ctx->object_mode, NULL,
+	    NULL, NULL, NULL, scene, NULL, NULL, engine_type, NULL, eval_ctx->object_mode, NULL,
 	};
 	drw_context_state_init();
 
@@ -3660,6 +3660,12 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
 			 render_layer != NULL;
 			 render_layer = render_layer->next)
 		{
+			BKE_scene_graph_update_tagged(&render_layer->eval_ctx,
+			                              render_layer->depsgraph,
+			                              bmain,
+			                              scene,
+			                              render_layer->eval_ctx.view_layer);
+
 			DST.draw_ctx.view_layer = render_layer->eval_ctx.view_layer;
 			DST.draw_ctx.depsgraph = render_layer->depsgraph;
 
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 15487082217..d88ff98eb58 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -166,7 +166,7 @@ static void engine_update(RenderEngine *engine, Main *bmain, Depsgraph *graph, S
 	RNA_parameter_list_free(&list);
 }
 
-static void engine_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
+static void engine_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
 {
 	extern FunctionRNA rna_RenderEngine_render_to_image_func;
 	PointerRNA ptr;
@@ -177,7 +177,8 @@ static void engine_render_to_image(RenderEngine *engine, struct Depsgraph *depsg
 	func = &rna_RenderEngine_render_to_image_func;
 
 	RNA_parameter_list_create(&list, &ptr, func);
-	RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
+	RNA_parameter_set_lookup(&list, "data", &bmain);
+	RNA_parameter_set_lookup(&list, "scene", &scene);
 	engine->type->ext.call(NULL, &ptr, func, &list);
 
 	RNA_parameter_list_free(&list);
@@ -518,7 +519,8 @@ static void rna_def_render_engine(BlenderRNA *brna)
 	func = RNA_def_function(srna, "render_to_image", NULL);
 	RNA_def_function_ui_description(func, "Render scene into an image");
 	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE);
-	RNA_def_pointer(func, "desgraph", "Depsgraph", "", "");
+	RNA_def_pointer(func, "data", "BlendData", "", "");
+	RNA_def_pointer(func, "scene", "Scene", "", "");
 
 	func = RNA_def_function(srna, "bake", NULL);
 	RNA_def_function_ui_description(func, "Bake passes");
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index f789ab702fe..fd3e5d5a558 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -93,7 +93,7 @@ typedef struct RenderEngineType {
 	int flag;
 
 	void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene);
-	void (*render_to_image)(struct RenderEngine *engine, struct Depsgraph *depsgraph);
+	void (*render_to_image)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
 	void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type,
 	             const int pass_filter, const int object_id, const struct BakePixel *pixel_array, const int num_pixels,
 	             const int depth, void *result);
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index ddf128c0fbc..467f26f59e3 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -740,7 +740,7 @@ int RE_engine_render(Render *re, int do_all)
 	}
 
 	if (type->render_to_image) {
-		type->render_to_image(engine, re->depsgraph);
+		type->render_to_image(engine, re->main, re->scene);
 	}
 
 	engine->tile_x = 0;



More information about the Bf-blender-cvs mailing list