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
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2018-01-30 15:52:25 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-01-30 15:53:09 +0300
commit30a966a726230801d67bfba7ebd2d845bc35f931 (patch)
treec65e59be86b46be6f7ce04119613a8af08c82d91 /source/blender/blenkernel/intern/layer.c
parente83cbf4610d2f5e06e66305b4a7c52cf95c27bc1 (diff)
Fix FOREACH_OBJECT_RENDERABLE recursion going over the roof
This was leading to so much recursion that it was failing here. How to test it: Open wanderer.blend and try to render (F12). Note: This won't fix F12 rendering for wanderer with Eevee. Something else is going wrong there.
Diffstat (limited to 'source/blender/blenkernel/intern/layer.c')
-rw-r--r--source/blender/blenkernel/intern/layer.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index c6515d0c47a..e6ef3c5ce69 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1992,6 +1992,9 @@ void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
{
+ /* Set it early in case we need to exit and we are running from within a loop. */
+ iter->skip = true;
+
ObjectsRenderableIteratorData *data = iter->data;
Base *base = data->iter.base->next;
@@ -2002,8 +2005,8 @@ void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
iter->current = ob;
data->iter.base = base;
- if ((base->flag & BASE_VISIBLED) == 0) {
- BKE_renderable_objects_iterator_next(iter);
+ if ((base->flag & BASE_VISIBLED) != 0) {
+ iter->skip = false;
}
return;
}
@@ -2016,8 +2019,6 @@ void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
Base base_iter = {(Base *)view_layer->object_bases.first, NULL};
data->iter.base = &base_iter;
-
- BKE_renderable_objects_iterator_next(iter);
return;
}
}
@@ -2025,7 +2026,6 @@ void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
/* Setup the "set" for the next iteration. */
Scene scene = {.set = data->scene};
data->iter.set = &scene;
- BKE_renderable_objects_iterator_next(iter);
return;
}
@@ -2035,8 +2035,6 @@ void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
Base base_iter = {(Base *)view_layer->object_bases.first, NULL};
data->iter.base = &base_iter;
-
- BKE_renderable_objects_iterator_next(iter);
return;
}