diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-06-10 17:53:38 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-06-10 17:53:38 +0400 |
commit | ab52b15964243c7424f61ae0472bcff2e5571464 (patch) | |
tree | 04d06f19cfe2986ca60f80a7a04748bb43f9f55a | |
parent | 4863feb95640bffa0a2c250f1b9da13100643fd2 (diff) |
Fix #35681: cycles excluded layers still got evaluated before and after
rendering even if they were not used on any render layers.
-rw-r--r-- | intern/cycles/blender/addon/__init__.py | 1 | ||||
-rw-r--r-- | source/blender/editors/render/render_internal.c | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_render.c | 4 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_engine.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 26 |
5 files changed, 31 insertions, 3 deletions
diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py index 526c5658b93..e1015fa3cee 100644 --- a/intern/cycles/blender/addon/__init__.py +++ b/intern/cycles/blender/addon/__init__.py @@ -40,6 +40,7 @@ class CyclesRender(bpy.types.RenderEngine): bl_label = "Cycles Render" bl_use_shading_nodes = True bl_use_preview = True + bl_use_exclude_layers = True def __init__(self): self.session = None diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 4b62eb7c645..da2f8bd2f9d 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -422,7 +422,7 @@ static void render_endjob(void *rjv) free_main(rj->main); /* else the frame will not update for the original value */ - if (!(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) { + if (rj->anim && !(rj->scene->r.scemode & R_NO_FRAME_UPDATE)) { /* possible this fails of loading new file while rendering */ if (G.main->wm.first) { ED_update_for_newframe(G.main, rj->scene, 1); diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c index 8cf352311f7..90c0282545c 100644 --- a/source/blender/makesrna/intern/rna_render.c +++ b/source/blender/makesrna/intern/rna_render.c @@ -452,6 +452,10 @@ static void rna_def_render_engine(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_SHADING_NODES); RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + prop = RNA_def_property(srna, "bl_use_exclude_layers", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_USE_EXCLUDE_LAYERS); + RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); + RNA_define_verify_sdna(1); } diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index 7c1bc4d12d6..b6c3668512b 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -56,6 +56,7 @@ struct Scene; #define RE_USE_PREVIEW 4 #define RE_USE_POSTPROCESS 8 #define RE_USE_SHADING_NODES 16 +#define RE_USE_EXCLUDE_LAYERS 32 /* RenderEngine.flag */ #define RE_ENGINE_ANIMATION 1 diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index b76e67dd634..551f3686370 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -410,8 +410,30 @@ int RE_engine_render(Render *re, int do_all) /* update animation here so any render layer animation is applied before * creating the render result */ - if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) - BKE_scene_update_for_newframe(re->main, re->scene, re->lay); + if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) { + unsigned int lay = re->lay; + + /* don't update layers excluded on all render layers */ + if (type->flag & RE_USE_EXCLUDE_LAYERS) { + SceneRenderLayer *srl; + unsigned int non_excluded_lay = 0; + + if (re->r.scemode & R_SINGLE_LAYER) { + srl = BLI_findlink(&re->r.layers, re->r.actlay); + if (srl) + non_excluded_lay |= ~srl->lay_exclude; + } + else { + for (srl = re->r.layers.first; srl; srl = srl->next) + if (!(srl->layflag & SCE_LAY_DISABLE)) + non_excluded_lay |= ~srl->lay_exclude; + } + + lay &= non_excluded_lay; + } + + BKE_scene_update_for_newframe(re->main, re->scene, lay); + } /* create render result */ BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); |