[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59352] branches/soc-2013-depsgraph_mt/ source/blender/blenkernel/intern/scene.c: Experiment: get rid of static in_next_object in mballs traversal

Sergey Sharybin sergey.vfx at gmail.com
Wed Aug 21 11:08:26 CEST 2013


Revision: 59352
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59352
Author:   nazgul
Date:     2013-08-21 09:08:25 +0000 (Wed, 21 Aug 2013)
Log Message:
-----------
Experiment: get rid of static in_next_object in mballs traversal

This check was used to prevent recursion caused by object_dupilist
calling MBall display list creation.

Solved by using object_duplilist_ex with update flag set to false.

>From quick own tests and .blend file form original report seems
everything is fine. But maybe some unforeseen case will break
blender again.

Modified Paths:
--------------
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/scene.c

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/scene.c	2013-08-21 08:32:26 UTC (rev 59351)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/scene.c	2013-08-21 09:08:25 UTC (rev 59352)
@@ -748,7 +748,6 @@
  */
 int BKE_scene_base_iter_next(SceneBaseIter *iter, Scene **scene, int val, Base **base, Object **ob)
 {
-	static int in_next_object = 0;
 	int run_again = 1;
 	
 	/* init */
@@ -756,18 +755,8 @@
 		iter->fase = F_START;
 		iter->dupob = NULL;
 		iter->duplilist = NULL;
-		
-		/* XXX particle systems with metas+dupligroups call this recursively */
-		/* see bug #18725 */
-		if (in_next_object) {
-			printf("ERROR: Metaball generation called recursively, not supported\n");
-			
-			return F_ERROR;
-		}
 	}
 	else {
-		in_next_object = 1;
-		
 		/* run_again is set when a duplilist has been ended */
 		while (run_again) {
 			run_again = 0;
@@ -824,7 +813,7 @@
 						 * this enters eternal loop because of 
 						 * makeDispListMBall getting called inside of group_duplilist */
 						if ((*base)->object->dup_group == NULL) {
-							iter->duplilist = object_duplilist((*scene), (*base)->object, FALSE);
+							iter->duplilist = object_duplilist_ex((*scene), (*base)->object, false, false);
 							
 							iter->dupob = iter->duplilist->first;
 
@@ -866,9 +855,6 @@
 	}
 #endif
 
-	/* reset recursion test */
-	in_next_object = 0;
-	
 	return iter->fase;
 }
 




More information about the Bf-blender-cvs mailing list