diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-04-25 17:18:24 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-04-25 19:03:13 +0300 |
commit | 4122eeb09abcc389915c53fd5017dc853e109279 (patch) | |
tree | 593b1ad6253f1e8b547b07fbc5509a0566ce7bf9 /source | |
parent | 05243a633a7ccf4abf75e3a88d67e2e5cc02a1a6 (diff) |
Cycles: Use depsgraph instead of layers
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/object/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/editors/object/object_bake_api.c | 16 | ||||
-rw-r--r-- | source/blender/editors/render/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/editors/render/render_internal.c | 1 | ||||
-rw-r--r-- | source/blender/editors/render/render_preview.c | 5 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_render.c | 12 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_engine.h | 12 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/include/render_types.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 17 | ||||
-rw-r--r-- | source/blender/render/intern/source/initrender.c | 7 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 3 |
12 files changed, 58 insertions, 21 deletions
diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt index b3d02d45e13..8a880e470c7 100644 --- a/source/blender/editors/object/CMakeLists.txt +++ b/source/blender/editors/object/CMakeLists.txt @@ -24,6 +24,7 @@ set(INC ../../blenlib ../../blentranslation ../../bmesh + ../../depsgraph ../../gpu ../../ikplugin ../../imbuf diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c index 968081818a2..58b14db7c01 100644 --- a/source/blender/editors/object/object_bake_api.c +++ b/source/blender/editors/object/object_bake_api.c @@ -58,6 +58,8 @@ #include "BKE_screen.h" #include "BKE_depsgraph.h" +#include "DEG_depsgraph.h" + #include "RE_engine.h" #include "RE_pipeline.h" @@ -82,6 +84,7 @@ static void bake_set_props(wmOperator *op, Scene *scene); typedef struct BakeAPIRender { Object *ob; Main *main; + Depsgraph *depsgraph; Scene *scene; ReportList *reports; ListBase selected_objects; @@ -630,7 +633,7 @@ static Mesh *bake_mesh_new_from_object(Main *bmain, Scene *scene, Object *ob) } static int bake( - Render *re, Main *bmain, Scene *scene, Object *ob_low, ListBase *selected_objects, ReportList *reports, + Render *re, Main *bmain, Depsgraph *graph, Scene *scene, Object *ob_low, ListBase *selected_objects, ReportList *reports, const ScenePassType pass_type, const int pass_filter, const int margin, const BakeSaveMode save_mode, const bool is_clear, const bool is_split_materials, const bool is_automatic_name, const bool is_selected_to_active, const bool is_cage, @@ -669,7 +672,7 @@ static int bake( size_t num_pixels; int tot_materials; - RE_bake_engine_set_engine_parameters(re, bmain, scene); + RE_bake_engine_set_engine_parameters(re, bmain, graph, scene); if (!RE_bake_has_engine(re)) { BKE_report(reports, RPT_ERROR, "Current render engine does not support baking"); @@ -1117,6 +1120,7 @@ static void bake_init_api_data(wmOperator *op, bContext *C, BakeAPIRender *bkr) bkr->ob = CTX_data_active_object(C); bkr->main = CTX_data_main(C); + bkr->depsgraph = CTX_data_depsgraph(C); bkr->scene = CTX_data_scene(C); bkr->sa = sc ? BKE_screen_find_big_area(sc, SPACE_IMAGE, 10) : NULL; @@ -1197,7 +1201,7 @@ static int bake_exec(bContext *C, wmOperator *op) if (bkr.is_selected_to_active) { result = bake( - bkr.render, bkr.main, bkr.scene, bkr.ob, &bkr.selected_objects, bkr.reports, + bkr.render, bkr.main, bkr.depsgraph, bkr.scene, bkr.ob, &bkr.selected_objects, bkr.reports, bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode, bkr.is_clear, bkr.is_split_materials, bkr.is_automatic_name, true, bkr.is_cage, bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle, @@ -1210,7 +1214,7 @@ static int bake_exec(bContext *C, wmOperator *op) for (link = bkr.selected_objects.first; link; link = link->next) { Object *ob_iter = link->ptr.data; result = bake( - bkr.render, bkr.main, bkr.scene, ob_iter, NULL, bkr.reports, + bkr.render, bkr.main, bkr.depsgraph, bkr.scene, ob_iter, NULL, bkr.reports, bkr.pass_type, bkr.pass_filter, bkr.margin, bkr.save_mode, is_clear, bkr.is_split_materials, bkr.is_automatic_name, false, bkr.is_cage, bkr.cage_extrusion, bkr.normal_space, bkr.normal_swizzle, @@ -1254,7 +1258,7 @@ static void bake_startjob(void *bkv, short *UNUSED(stop), short *do_update, floa if (bkr->is_selected_to_active) { bkr->result = bake( - bkr->render, bkr->main, bkr->scene, bkr->ob, &bkr->selected_objects, bkr->reports, + bkr->render, bkr->main, bkr->depsgraph, bkr->scene, bkr->ob, &bkr->selected_objects, bkr->reports, bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode, bkr->is_clear, bkr->is_split_materials, bkr->is_automatic_name, true, bkr->is_cage, bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle, @@ -1267,7 +1271,7 @@ static void bake_startjob(void *bkv, short *UNUSED(stop), short *do_update, floa for (link = bkr->selected_objects.first; link; link = link->next) { Object *ob_iter = link->ptr.data; bkr->result = bake( - bkr->render, bkr->main, bkr->scene, ob_iter, NULL, bkr->reports, + bkr->render, bkr->main, bkr->depsgraph, bkr->scene, ob_iter, NULL, bkr->reports, bkr->pass_type, bkr->pass_filter, bkr->margin, bkr->save_mode, is_clear, bkr->is_split_materials, bkr->is_automatic_name, false, bkr->is_cage, bkr->cage_extrusion, bkr->normal_space, bkr->normal_swizzle, diff --git a/source/blender/editors/render/CMakeLists.txt b/source/blender/editors/render/CMakeLists.txt index 971ab9f3458..ec00a258ebb 100644 --- a/source/blender/editors/render/CMakeLists.txt +++ b/source/blender/editors/render/CMakeLists.txt @@ -24,6 +24,7 @@ set(INC ../../blenlib ../../blenloader ../../blentranslation + ../../depsgraph ../../gpu ../../imbuf ../../bmesh diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index e91c01bb0eb..2de4b2da023 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -967,6 +967,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even RE_current_scene_update_cb(re, rj, current_scene_update); RE_stats_draw_cb(re, rj, image_renderinfo_cb); RE_progress_cb(re, rj, render_progress_update); + RE_SetDepsgraph(re, CTX_data_depsgraph(C)); rj->re = re; G.is_break = false; diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 9a8e5631b7f..ab7234ed3eb 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -79,6 +79,8 @@ #include "BKE_texture.h" #include "BKE_world.h" +#include "DEG_depsgraph_build.h" + #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" #include "IMB_thumbs.h" @@ -278,7 +280,7 @@ static Scene *preview_get_scene(Main *pr_main) static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_type, ShaderPreview *sp) { Scene *sce; - BaseLegacy *base; + Base *base; Main *pr_main = sp->pr_main; memcpy(pr_main->name, bmain->name, sizeof(pr_main->name)); @@ -534,6 +536,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty } } + DEG_scene_relations_rebuild(pr_main, sce); return sce; } diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 36de2b85619..605fcf1a008 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -32,6 +32,8 @@ #include "BLI_utildefines.h" #include "BLI_path_util.h" +#include "DEG_depsgraph.h" + #include "RNA_define.h" #include "RNA_enum_types.h" @@ -146,7 +148,7 @@ static void engine_unbind_display_space_shader(RenderEngine *UNUSED(engine)) IMB_colormanagement_finish_glsl_draw(); } -static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene) +static void engine_update(RenderEngine *engine, Main *bmain, Depsgraph *graph, Scene *scene) { extern FunctionRNA rna_RenderEngine_update_func; PointerRNA ptr; @@ -158,13 +160,14 @@ static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene) RNA_parameter_list_create(&list, &ptr, func); RNA_parameter_set_lookup(&list, "data", &bmain); + RNA_parameter_set_lookup(&list, "depsgraph", &graph); RNA_parameter_set_lookup(&list, "scene", &scene); engine->type->ext.call(NULL, &ptr, func, &list); RNA_parameter_list_free(&list); } -static void engine_render(RenderEngine *engine, struct Scene *scene) +static void engine_render(RenderEngine *engine, struct Depsgraph *depsgraph) { extern FunctionRNA rna_RenderEngine_render_func; PointerRNA ptr; @@ -175,7 +178,7 @@ static void engine_render(RenderEngine *engine, struct Scene *scene) func = &rna_RenderEngine_render_func; RNA_parameter_list_create(&list, &ptr, func); - RNA_parameter_set_lookup(&list, "scene", &scene); + RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph); engine->type->ext.call(NULL, &ptr, func, &list); RNA_parameter_list_free(&list); @@ -459,12 +462,13 @@ 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", 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, "scene", "Scene", "", ""); + RNA_def_pointer(func, "desgraph", "Depsgraph", "", ""); 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 bac3b5982c4..8d20e36f82a 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -39,6 +39,7 @@ struct bNode; struct bNodeTree; +struct Depsgraph; struct IDProperty; struct Main; struct Object; @@ -91,9 +92,11 @@ typedef struct RenderEngineType { char name[64]; int flag; - void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene); - void (*render)(struct RenderEngine *engine, 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); + void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene); + void (*render)(struct RenderEngine *engine, struct Depsgraph *depsgraph); + 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); void (*view_update)(struct RenderEngine *engine, const struct bContext *context); void (*view_draw)(struct RenderEngine *engine, const struct bContext *context); @@ -177,7 +180,8 @@ RenderEngineType *RE_engines_find(const char *idname); rcti* RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles, bool *r_needs_free); struct RenderData *RE_engine_get_render_data(struct Render *re); -void RE_bake_engine_set_engine_parameters(struct Render *re, struct Main *bmain, struct Scene *scene); +void RE_bake_engine_set_engine_parameters( + struct Render *re, struct Main *bmain, struct Depsgraph *graph, struct Scene *scene); #endif /* __RE_ENGINE_H__ */ diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index eaa4cf2c69c..babb44ed64e 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -37,6 +37,7 @@ struct bMovieHandle; struct bNodeTree; +struct Depsgraph; struct Image; struct ImageFormatData; struct Main; @@ -252,6 +253,7 @@ void RE_ChangeModeFlag(struct Render *re, int flag, bool clear); struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */ void RE_SetOverrideCamera(struct Render *re, struct Object *camera); void RE_SetCamera(struct Render *re, struct Object *camera); +void RE_SetDepsgraph(struct Render *re, struct Depsgraph *graph); void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend); void RE_SetWindow(struct Render *re, const rctf *viewplane, float clipsta, float clipend); void RE_SetOrtho(struct Render *re, const rctf *viewplane, float clipsta, float clipend); diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index f0323340899..b1b95933584 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -185,6 +185,8 @@ struct Render { /* shadow counter, detect shadow-reuse for shaders */ int shadowsamplenr[BLENDER_MAX_THREADS]; + struct Depsgraph *depsgraph; + /* main, scene, and its full copy of renderdata and world */ struct Main *main; Scene *scene; diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index cfc45df29ff..a274d806d33 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -49,6 +49,8 @@ #include "BKE_report.h" #include "BKE_scene.h" +#include "DEG_depsgraph.h" + #include "RNA_access.h" #ifdef WITH_PYTHON @@ -494,8 +496,9 @@ RenderData *RE_engine_get_render_data(Render *re) } /* Bake */ -void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene) +void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Depsgraph *graph, Scene *scene) { + re->depsgraph = graph; re->scene = scene; re->main = bmain; render_copy_renderdata(&re->r, &scene->r); @@ -545,7 +548,7 @@ bool RE_bake_engine( /* update is only called so we create the engine.session */ if (type->update) - type->update(engine, re->main, re->scene); + type->update(engine, re->main, re->depsgraph, re->scene); if (type->bake) { type->bake( @@ -696,16 +699,18 @@ int RE_engine_render(Render *re, int do_all) if (re->result->do_exr_tile) render_result_exr_file_begin(re); - if (type->update) - type->update(engine, re->main, re->scene); + if (type->update) { + type->update(engine, re->main, re->depsgraph, re->scene); + } /* Clear UI drawing locks. */ if (re->draw_lock) { re->draw_lock(re->dlh, 0); } - if (type->render) - type->render(engine, re->scene); + if (type->render) { + type->render(engine, re->depsgraph); + } engine->tile_x = 0; engine->tile_y = 0; diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index 970a3937657..4ac44671871 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -48,6 +48,8 @@ #include "BKE_camera.h" +#include "DEG_depsgraph.h" + #ifdef WITH_QUICKTIME #include "quicktime_export.h" #endif @@ -503,6 +505,11 @@ void RE_SetCamera(Render *re, Object *cam_ob) re_camera_params_get(re, ¶ms, cam_ob); } +void RE_SetDepsgraph(Render *re, Depsgraph *graph) +{ + re->depsgraph = graph; +} + void RE_SetPixelSize(Render *re, float pixsize) { re->viewdx = pixsize; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 93fc2fb7e6e..36abdaf339e 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -551,6 +551,7 @@ void RE_FreeRender(Render *re) /* main dbase can already be invalid now, some database-free code checks it */ re->main = NULL; re->scene = NULL; + re->depsgraph = NULL; RE_Database_Free(re); /* view render can still have full database */ free_sample_tables(re); @@ -1933,6 +1934,7 @@ static void render_scene(Render *re, Scene *sce, int cfra) /* still unsure entity this... */ resc->main = re->main; + resc->depsgraph = re->depsgraph; resc->scene = sce; resc->lay = sce->lay; resc->scene_color_manage = BKE_scene_check_color_management_enabled(sce); @@ -3804,6 +3806,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce) re->scene = sce; re->scene_color_manage = BKE_scene_check_color_management_enabled(sce); re->lay = sce->lay; + re->depsgraph = sce->depsgraph; camera = RE_GetCamera(re); RE_SetCamera(re, camera); |