Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-06-10 17:53:38 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-06-10 17:53:38 +0400
commitab52b15964243c7424f61ae0472bcff2e5571464 (patch)
tree04d06f19cfe2986ca60f80a7a04748bb43f9f55a /source
parent4863feb95640bffa0a2c250f1b9da13100643fd2 (diff)
Fix #35681: cycles excluded layers still got evaluated before and after
rendering even if they were not used on any render layers.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/render/render_internal.c2
-rw-r--r--source/blender/makesrna/intern/rna_render.c4
-rw-r--r--source/blender/render/extern/include/RE_engine.h1
-rw-r--r--source/blender/render/intern/source/external_engine.c26
4 files changed, 30 insertions, 3 deletions
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);