From b20449cc08f33fc6b55fc6c326f5ab1b5f240fb9 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 23 May 2018 12:13:21 +0200 Subject: 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. --- source/blender/makesrna/intern/rna_render.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'source/blender/makesrna/intern/rna_render.c') diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index b4fc1b4eeb0..18e29a2de3f 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -113,6 +113,8 @@ const EnumPropertyItem rna_enum_bake_pass_type_items[] = { #include "IMB_colormanagement.h" #include "GPU_extensions.h" +#include "DEG_depsgraph_query.h" + /* RenderEngine Callbacks */ static void engine_tag_redraw(RenderEngine *engine) @@ -148,7 +150,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 *depsgraph) { extern FunctionRNA rna_RenderEngine_update_func; PointerRNA ptr; @@ -160,7 +162,7 @@ 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, "scene", &scene); + RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph); engine->type->ext.call(NULL, &ptr, func, &list); RNA_parameter_list_free(&list); @@ -183,7 +185,7 @@ static void engine_render_to_image(RenderEngine *engine, Depsgraph *depsgraph) RNA_parameter_list_free(&list); } -static void engine_bake(RenderEngine *engine, struct Depsgraph *depsgraph, struct Scene *scene, +static void engine_bake(RenderEngine *engine, struct Depsgraph *depsgraph, 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) @@ -198,7 +200,6 @@ static void engine_bake(RenderEngine *engine, struct Depsgraph *depsgraph, struc 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); RNA_parameter_set_lookup(&list, "pass_filter", &pass_filter); @@ -384,10 +385,11 @@ static PointerRNA rna_RenderEngine_render_get(PointerRNA *ptr) static PointerRNA rna_RenderEngine_camera_override_get(PointerRNA *ptr) { RenderEngine *engine = (RenderEngine *)ptr->data; - + /* TODO(sergey): Shouldn't engine point to an evaluated datablocks already? */ if (engine->re) { Object *cam = RE_GetCamera(engine->re); - return rna_pointer_inherit_refine(ptr, &RNA_Object, cam); + Object *cam_eval = DEG_get_evaluated_object(engine->depsgraph, cam); + return rna_pointer_inherit_refine(ptr, &RNA_Object, cam_eval); } else { return rna_pointer_inherit_refine(ptr, &RNA_Object, engine->camera_override); @@ -485,7 +487,7 @@ 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, "scene", "Scene", "", ""); + RNA_def_pointer(func, "depsgraph", "Depsgraph", "", ""); func = RNA_def_function(srna, "render_to_image", NULL); RNA_def_function_ui_description(func, "Render scene into an image"); @@ -498,8 +500,6 @@ static void rna_def_render_engine(BlenderRNA *brna) 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", "", ""); RNA_def_parameter_flags(parm, 0, PARM_REQUIRED); parm = RNA_def_enum(func, "pass_type", rna_enum_bake_pass_type_items, 0, "Pass", "Pass to bake"); -- cgit v1.2.3