[Bf-blender-cvs] [b5cbc8bb606] blender2.8: Fix FOREACH_OBJECT_RENDERABLE going over the same object twice

Dalai Felinto noreply at git.blender.org
Tue Jan 30 14:27:27 CET 2018


Commit: b5cbc8bb606654a21e25cb616d60c89ac61c65a9
Author: Dalai Felinto
Date:   Tue Jan 30 11:23:50 2018 -0200
Branches: blender2.8
https://developer.blender.org/rBb5cbc8bb606654a21e25cb616d60c89ac61c65a9

Fix FOREACH_OBJECT_RENDERABLE going over the same object twice

Which is really silly because we were already tagging the ids, but simply
never checking them back.

===================================================================

M	source/blender/blenkernel/intern/layer.c

===================================================================

diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index e6ef3c5ce69..d9794ecbd69 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1970,10 +1970,11 @@ void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
 {
 	ObjectsRenderableIteratorData *data = data_in;
 
+	/* Tag objects to prevent going over the same object twice. */
 	for (Scene *scene = data->scene; scene; scene = scene->set) {
 		for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
 			for (Base *base = view_layer->object_bases.first; base; base = base->next) {
-				 base->object->id.flag |=  LIB_TAG_DOIT;
+				 base->object->id.flag |= LIB_TAG_DOIT;
 			}
 		}
 	}
@@ -2002,11 +2003,17 @@ void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
 	if (base != NULL) {
 		Object *ob = base->object;
 
-		iter->current = ob;
+		/* We need to set the iter.base even if the rest fail otherwise
+		 * we keep checking the exactly same base over and over again. */
 		data->iter.base = base;
 
-		if ((base->flag & BASE_VISIBLED) != 0) {
-			iter->skip = false;
+		if (ob->id.flag & LIB_TAG_DOIT) {
+			ob->id.flag &= ~LIB_TAG_DOIT;
+
+			if ((base->flag & BASE_VISIBLED) != 0) {
+				iter->skip = false;
+				iter->current = ob;
+			}
 		}
 		return;
 	}



More information about the Bf-blender-cvs mailing list