From 828f54521301e42c1ff4ce791cb0caec3eb54d3f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 26 Feb 2018 16:46:48 +0100 Subject: Fix Cycles to mostly work with render layer / depsgraph changes. Point density texture and motion blur are still broken, and many more changes are needed in general to used evaluated datablocks. --- source/blender/makesrna/intern/rna_render.c | 9 ++++-- source/blender/render/extern/include/RE_engine.h | 3 +- .../blender/render/intern/source/external_engine.c | 37 +++++++++++++++------- 3 files changed, 34 insertions(+), 15 deletions(-) (limited to 'source/blender') diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 99567872103..6afcc73e16d 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -182,7 +182,7 @@ static void engine_render_to_image(RenderEngine *engine, Depsgraph *depsgraph) RNA_parameter_list_free(&list); } -static void engine_bake(RenderEngine *engine, struct Scene *scene, +static void engine_bake(RenderEngine *engine, struct Depsgraph *depsgraph, 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) @@ -196,6 +196,7 @@ static void engine_bake(RenderEngine *engine, struct Scene *scene, func = &rna_RenderEngine_bake_func; RNA_parameter_list_create(&list, &ptr, func); + RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph); RNA_parameter_set_lookup(&list, "scene", &scene); RNA_parameter_set_lookup(&list, "object", &object); RNA_parameter_set_lookup(&list, "pass_type", &pass_type); @@ -501,17 +502,19 @@ static void rna_def_render_engine(BlenderRNA *brna) RNA_def_function_ui_description(func, "Export scene data for render"); RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE); RNA_def_pointer(func, "data", "BlendData", "", ""); - RNA_def_pointer(func, "depsgraph", "Depsgraph", "", ""); RNA_def_pointer(func, "scene", "Scene", "", ""); 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, "depsgraph", "Depsgraph", "", ""); + parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", ""); + RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); func = RNA_def_function(srna, "bake", NULL); RNA_def_function_ui_description(func, "Bake passes"); RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL | FUNC_ALLOW_WRITE); + parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", ""); + RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); parm = RNA_def_pointer(func, "scene", "Scene", "", ""); RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); parm = RNA_def_pointer(func, "object", "Object", "", ""); diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index b1e5ff9890b..ad0cb34d382 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -94,7 +94,8 @@ typedef struct RenderEngineType { void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene); void (*render_to_image)(struct RenderEngine *engine, struct Depsgraph *depsgraph); - void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type, + void (*bake)(struct RenderEngine *engine, struct Depsgraph *depsgraph, + 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 61ed19a1c9a..1b8ab4d8121 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -584,17 +584,32 @@ bool RE_bake_engine( type->update(engine, re->main, re->scene); if (type->bake) { - type->bake( - engine, - re->scene, - object, - pass_type, - pass_filter, - object_id, - pixel_array, - num_pixels, - depth, - result); + EvaluationContext *eval_ctx = DEG_evaluation_context_new(DAG_EVAL_RENDER); + Depsgraph *depsgraph = DEG_graph_new(); + ViewLayer *view_layer = BLI_findlink(&re->scene->view_layers, re->scene->active_view_layer); + + DEG_evaluation_context_init_from_view_layer_for_render( + eval_ctx, + depsgraph, + re->scene, + view_layer); + + BKE_scene_graph_update_tagged(eval_ctx, depsgraph, re->main, re->scene, view_layer); + + type->bake(engine, + depsgraph, + re->scene, + object, + pass_type, + pass_filter, + object_id, + pixel_array, + num_pixels, + depth, + result); + + DEG_graph_free(depsgraph); + DEG_evaluation_context_free(eval_ctx); } engine->tile_x = 0; -- cgit v1.2.3