[Bf-blender-cvs] [1596edd23b2] temp-render-depsgraph: From review: Move depsgraph away from render layer and change render loop

Dalai Felinto noreply at git.blender.org
Fri Feb 23 23:42:07 CET 2018


Commit: 1596edd23b22c513186dec30eccbd625dcedab70
Author: Dalai Felinto
Date:   Fri Feb 23 19:18:39 2018 -0300
Branches: temp-render-depsgraph
https://developer.blender.org/rB1596edd23b22c513186dec30eccbd625dcedab70

>From review: Move depsgraph away from render layer and change render loop

Create depsgraph as part of the render loop and pass a render layer for the
render_to_image. Optionally we could create a single layered render_result
but why would we?

Depsgraph is created from scratch prior to rendering each frame.
So I got rid of most of the partial update calls we had during the render
pipeline.

Also, it's past the time to remove Blender Internal.

Note 1: Cycles doesn't build.

Note 2: Cycles seems to rely on an "empty" render function, where all the
required settings are passed to the update function instead. I would like
to have this cleared out because draw manager is assuming everything is
passed to render_to_image, but we need to have an API that makes sense
to all cases.

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

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/extern/include/RE_pipeline.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/render/intern/source/render_result.c

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

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 3905d24ef48..9eeed0b2a4d 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -410,7 +410,7 @@ struct DefaultTextureList     *DRW_viewport_texture_list_get(void);
 
 void DRW_viewport_request_redraw(void);
 
-void DRW_render_to_image(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
+void DRW_render_to_image(struct RenderEngine *engine, struct Depsgraph *graph, struct RenderLayer *render_layer);
 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 5729e0cf6a6..6958a09aaab 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -35,7 +35,6 @@
 
 #include "BKE_curve.h"
 #include "BKE_global.h"
-#include "BKE_main.h"
 #include "BKE_mesh.h"
 #include "BKE_object.h"
 #include "BKE_pbvh.h"
@@ -101,10 +100,6 @@
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_query.h"
 
-/* -------------------------------------------------------------------- */
-/* Prototypes. */
-static void drw_eval_ctx_to_draw_ctx(EvaluationContext *eval_ctx);
-
 /* -------------------------------------------------------------------- */
 /** \name Local Features
  * \{ */
@@ -3623,8 +3618,10 @@ void DRW_draw_render_loop_offscreen(
 	GPU_offscreen_bind(ofs, false);
 }
 
-void DRW_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
+void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph, RenderLayer *render_layer)
 {
+	Scene *scene = DEG_get_evaluated_scene(depsgraph);
+	ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
 	RenderEngineType *engine_type = engine->type;
 	DrawEngineType *draw_engine_type = engine_type->draw_engine;
 	RenderData *r = &scene->r;
@@ -3637,7 +3634,7 @@ void DRW_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
 	DST.options.draw_background = scene->r.alphamode == R_ADDSKY;
 
 	DST.draw_ctx = (DRWContextState){
-	    NULL, NULL, NULL, scene, NULL, NULL, engine_type, NULL, OB_MODE_OBJECT, NULL,
+	    NULL, NULL, NULL, scene, view_layer, NULL, engine_type, depsgraph, OB_MODE_OBJECT, NULL,
 	};
 	drw_context_state_init();
 
@@ -3654,9 +3651,7 @@ void DRW_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
 	glDisable(GL_SCISSOR_TEST);
 	glViewport(0, 0, size[0], size[1]);
 
-	/* Main rendering loop. */
-
-	const float *render_size = DRW_viewport_size_get();
+	/* Main rendering. */
 	rctf view_rect;
 	rcti render_rect;
 	RE_GetViewPlane(render, &view_rect, &render_rect);
@@ -3664,34 +3659,11 @@ void DRW_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
 		BLI_rcti_init(&render_rect, 0, size[0], 0, size[1]);
 	}
 
-	/* Init render result. */
-	RenderResult *render_result = RE_engine_begin_result(engine, 0, 0, (int)render_size[0], (int)render_size[1], NULL, NULL);
+	engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect);
+	DST.buffer_finish_called = false;
 
-	for (RenderView *render_view = render_result->views.first;
-	     render_view != NULL;
-	     render_view = render_view->next)
-	{
-		RE_SetActiveRenderView(render, render_view->name);
-		for (RenderLayer *render_layer = render_result->layers.first;
-			 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);
-
-			drw_eval_ctx_to_draw_ctx(&render_layer->eval_ctx);
-
-			engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect);
-			DST.buffer_finish_called = false;
-			/* Force cache to reset. */
-			drw_viewport_cache_resize();
-		}
-	}
-
-	RE_engine_end_result(engine, render_result, false, false, false);
+	/* Force cache to reset. */
+	drw_viewport_cache_resize();
 
 	/* TODO grease pencil */
 
@@ -4064,12 +4036,6 @@ const DRWContextState *DRW_context_state_get(void)
 	return &DST.draw_ctx;
 }
 
-static void drw_eval_ctx_to_draw_ctx(EvaluationContext *eval_ctx)
-{
-	DST.draw_ctx.view_layer = eval_ctx->view_layer;
-	DST.draw_ctx.depsgraph = eval_ctx->depsgraph;
-}
-
 /** \} */
 
 
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index e96d2424b8c..f420852b7e4 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -165,7 +165,7 @@ static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
 	RNA_parameter_list_free(&list);
 }
 
-static void engine_render_to_image(RenderEngine *engine, Main *bmain, Scene *scene)
+static void engine_render_to_image(RenderEngine *engine, Depsgraph *depsgraph, RenderLayer *render_layer)
 {
 	extern FunctionRNA rna_RenderEngine_render_to_image_func;
 	PointerRNA ptr;
@@ -176,8 +176,8 @@ static void engine_render_to_image(RenderEngine *engine, Main *bmain, Scene *sce
 	func = &rna_RenderEngine_render_to_image_func;
 
 	RNA_parameter_list_create(&list, &ptr, func);
-	RNA_parameter_set_lookup(&list, "data", &bmain);
-	RNA_parameter_set_lookup(&list, "scene", &scene);
+	RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
+	RNA_parameter_set_lookup(&list, "render_layer", &render_layer);
 	engine->type->ext.call(NULL, &ptr, func, &list);
 
 	RNA_parameter_list_free(&list);
@@ -508,8 +508,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, "data", "BlendData", "", "");
-	RNA_def_pointer(func, "scene", "Scene", "", "");
+	RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
+	RNA_def_pointer(func, "render_layer", "RenderLayer", "", "");
 
 	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 d263515f09f..30228b70137 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 Scene *scene);
-	void (*render_to_image)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
+	void (*render_to_image)(struct RenderEngine *engine, struct Depsgraph *depsgraph, struct RenderLayer *render_layer);
 	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/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index bec2c825fd8..822993a2372 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -123,7 +123,6 @@ typedef struct RenderLayer {
 	/* optional saved endresult on disk */
 	void *exrhandle;
 
-	struct Depsgraph *depsgraph;
 	struct EvaluationContext eval_ctx;
 
 	ListBase passes;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 3738503b0a3..6727844d0a8 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -5216,12 +5216,6 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
 	
 	/* applies changes fully */
 	if ((re->r.scemode & (R_NO_FRAME_UPDATE|R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0) {
-		for (RenderLayer *render_layer = re->result->layers.first;
-		     render_layer != NULL;
-		     render_layer = render_layer->next)
-		{
-			BKE_scene_graph_update_for_newframe(&render_layer->eval_ctx, render_layer->depsgraph, re->main, re->scene, NULL);
-		}
 		render_update_anim_renderdata(re, &re->scene->r, &re->scene->view_layers);
 	}
 	
@@ -5258,12 +5252,12 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
 	set_node_shader_lamp_loop(shade_material_loop);
 
 	/* MAKE RENDER DATA */
-	for (RenderLayer *render_layer = re->result->layers.first;
-	     render_layer != NULL;
-	     render_layer = render_layer->next)
-	{
-		database_init_objects(&render_layer->eval_ctx, re, lay, 0, 0, NULL, 0);
-	}
+	EvaluationContext *eval_ctx = NULL;
+	BLI_assert(eval_ctx);
+	/* This will break things, and it should because honestly this function is deprecated and no one uses it.
+	 * maybe freestyle? But even so, this need to change. Even freestyle need to get data from depsgraph
+	 * so we can't create the database only once. */
+	database_init_objects(eval_ctx, re, lay, 0, 0, NULL, 0);
 	
 	if (!re->test_break(re->tbh)) {
 		set_material_lightgroups(re);
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index 400dfa1ace0..53a60cb13e6 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -631,17 +631,6 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
 	BPy_BEGIN_ALLOW_THREADS;
 #endif
 
-	for (RenderLayer *render_layer = re->result->layers.first;
-	     render_layer != NULL;
-	     render_layer = render_layer->next)
-	{
-		BKE_scene_graph_update_for_newframe(&render_layer->eval_ctx,
-		                                    render_layer->depsgraph,
-		                                    re->main,
-		                                    re->scene,
-		                    

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list