[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