Dependency Graph: some refactoring which should have no user visible impact
besides performance in some cases. * DAG_scene_sort is now removed and replaced by DAG_relations_tag_update in most cases. This will clear the dependency graph, and only rebuild it right before it's needed again when the scene is re-evaluated. This is done because DAG_scene_sort is slow when called many times from python operators. Further the scene argument is not needed because most operations can potentially affect more than the current scene. * DAG_scene_relations_update will now rebuild the dependency graph if it's not there yet, and DAG_scene_relations_rebuild will force a rebuild for the rare cases that need it. * Remove various places where ob->recalc was set manually. This should go through DAG_id_tag_update() in nearly all cases instead since this is now a fast operation. Also removed DAG_ids_flush_update that goes along with such manual tagging of ob->recalc.
This commit is contained in:
@@ -230,8 +230,7 @@ void DocumentImporter::finish()
|
||||
}
|
||||
|
||||
// update scene
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(mContext, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
}
|
||||
@@ -242,8 +241,7 @@ void DocumentImporter::finish()
|
||||
armature_importer.set_tags_map(this->uid_tags_map);
|
||||
armature_importer.make_armatures(mContext);
|
||||
armature_importer.make_shape_keys();
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
#if 0
|
||||
armature_importer.fix_animation();
|
||||
@@ -277,8 +275,7 @@ void DocumentImporter::finish()
|
||||
}
|
||||
libnode_ob.clear();
|
||||
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -389,7 +386,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
||||
fprintf(stderr, "create <instance_node> under node id=%s from node id=%s\n", instance_node ? instance_node->getOriginalId().c_str() : NULL, source_node ? source_node->getOriginalId().c_str() : NULL);
|
||||
|
||||
Object *obn = BKE_object_copy(source_ob);
|
||||
obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
BKE_scene_base_add(sce, obn);
|
||||
|
||||
if (instance_node) {
|
||||
@@ -416,8 +413,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
||||
anim_importer.read_node_transform(source_node, obn);
|
||||
}
|
||||
|
||||
/*DAG_scene_sort(CTX_data_main(mContext), sce);
|
||||
DAG_ids_flush_update(CTX_data_main(mContext), 0);*/
|
||||
/*DAG_relations_tag_update(CTX_data_main(mContext));*/
|
||||
|
||||
COLLADAFW::NodePointerArray &children = source_node->getChildNodes();
|
||||
if (children.getCount()) {
|
||||
|
||||
Reference in New Issue
Block a user