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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs