diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-01-30 15:52:25 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-01-30 15:53:09 +0300 |
commit | 30a966a726230801d67bfba7ebd2d845bc35f931 (patch) | |
tree | c65e59be86b46be6f7ce04119613a8af08c82d91 /source/blender/blenkernel/intern/layer.c | |
parent | e83cbf4610d2f5e06e66305b4a7c52cf95c27bc1 (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.c | 12 |
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; } |