diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-23 13:13:21 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-05-23 14:21:02 +0300 |
commit | b20449cc08f33fc6b55fc6c326f5ab1b5f240fb9 (patch) | |
tree | ac49c0554144d98392ff68de34d037cf7be391e6 /source/blender/render | |
parent | d59b74adb38f3ac6b85107aa506e471efbd2a20c (diff) |
Cycles/Render API: changes for better copy-on-write support.
Mainly just passing the depsgraph and evaluated scene and camera, instead of
the original one. Patch by Sergey, further modifications by Brecht.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/extern/include/RE_bake.h | 4 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_engine.h | 6 | ||||
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 31 |
3 files changed, 23 insertions, 18 deletions
diff --git a/source/blender/render/extern/include/RE_bake.h b/source/blender/render/extern/include/RE_bake.h index 76228d93e66..542af91c4bf 100644 --- a/source/blender/render/extern/include/RE_bake.h +++ b/source/blender/render/extern/include/RE_bake.h @@ -35,7 +35,7 @@ struct ImBuf; struct Render; struct Mesh; -struct ViewLayer; +struct Depsgraph; typedef struct BakeImage { struct Image *image; @@ -72,7 +72,7 @@ typedef struct BakeHighPolyData { bool RE_bake_has_engine(struct Render *re); bool RE_bake_engine( - struct Render *re, struct ViewLayer *view_layer, struct Object *object, const int object_id, const BakePixel pixel_array[], + struct Render *re, struct Depsgraph *depsgraph, struct Object *object, const int object_id, const BakePixel pixel_array[], const size_t num_pixels, const int depth, const eScenePassType pass_type, const int pass_filter, float result[]); /* bake.c */ diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index b401eb260d8..59a754fcde4 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -41,8 +41,6 @@ struct bNode; struct bNodeTree; struct BakePixel; struct Depsgraph; -struct Depsgraph; -struct Depsgraph; struct IDProperty; struct Main; struct Object; @@ -94,10 +92,10 @@ typedef struct RenderEngineType { char name[64]; int flag; - void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene); + void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph); void (*render_to_image)(struct RenderEngine *engine, struct Depsgraph *depsgraph); void (*bake)(struct RenderEngine *engine, struct Depsgraph *depsgraph, - struct Scene *scene, struct Object *object, const int pass_type, + 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 3777845e4db..7655645f1e7 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -546,7 +546,7 @@ bool RE_bake_has_engine(Render *re) } bool RE_bake_engine( - Render *re, ViewLayer *view_layer, Object *object, + Render *re, Depsgraph *depsgraph, Object *object, const int object_id, const BakePixel pixel_array[], const size_t num_pixels, const int depth, const eScenePassType pass_type, const int pass_filter, @@ -581,16 +581,15 @@ bool RE_bake_engine( engine->tile_x = re->r.tilex; engine->tile_y = re->r.tiley; - /* update is only called so we create the engine.session */ - if (type->update) - type->update(engine, re->main, re->scene); - if (type->bake) { - engine_depsgraph_init(engine, view_layer); + engine->depsgraph = depsgraph; + + /* update is only called so we create the engine.session */ + if (type->update) + type->update(engine, re->main, engine->depsgraph); type->bake(engine, engine->depsgraph, - re->scene, object, pass_type, pass_filter, @@ -600,7 +599,7 @@ bool RE_bake_engine( depth, result); - engine_depsgraph_free(engine); + engine->depsgraph = NULL; } engine->tile_x = 0; @@ -715,10 +714,6 @@ 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); - } - /* Clear UI drawing locks. */ if (re->draw_lock) { re->draw_lock(re->dlh, 0); @@ -727,9 +722,21 @@ int RE_engine_render(Render *re, int do_all) if (type->render_to_image) { FOREACH_VIEW_LAYER_TO_RENDER_BEGIN(re, view_layer_iter) { + if (re->draw_lock) { + re->draw_lock(re->dlh, 1); + } + ViewLayer *view_layer = BLI_findstring(&re->scene->view_layers, view_layer_iter->name, offsetof(ViewLayer, name)); engine_depsgraph_init(engine, view_layer); + if (type->update) { + type->update(engine, re->main, engine->depsgraph); + } + + if (re->draw_lock) { + re->draw_lock(re->dlh, 0); + } + type->render_to_image(engine, engine->depsgraph); engine_depsgraph_free(engine); |