[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30277] trunk/blender/source/blender: group refcount checking was inconsistent.
Campbell Barton
ideasman42 at gmail.com
Tue Jul 13 18:53:18 CEST 2010
Revision: 30277
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30277
Author: campbellbarton
Date: 2010-07-13 18:53:17 +0200 (Tue, 13 Jul 2010)
Log Message:
-----------
group refcount checking was inconsistent.
- if a group has one or more objects in it, it gets a refcount of 1 on load (unchanged from before)
- dupli-groups, and materials no longer add/remove a reference.
- now groups are only freed when they contain no objects or when manually unlinked.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/anim.c
trunk/blender/source/blender/blenkernel/intern/material.c
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/editors/object/object_add.c
trunk/blender/source/blender/editors/object/object_edit.c
trunk/blender/source/blender/editors/object/object_relations.c
trunk/blender/source/blender/editors/space_outliner/outliner.c
trunk/blender/source/blender/makesrna/intern/rna_main_api.c
Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/blenkernel/intern/anim.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -741,7 +741,7 @@
if(go->ob->transflag & OB_DUPLI) {
copy_m4_m4(dob->ob->obmat, dob->mat);
- object_duplilist_recursive((ID *)group, scene, go->ob, lb, ob->obmat, level+1, animated);
+ object_duplilist_recursive(&group->id, scene, go->ob, lb, ob->obmat, level+1, animated);
copy_m4_m4(dob->ob->obmat, dob->omat);
}
}
Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/blenkernel/intern/material.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -210,7 +210,7 @@
#if 0 // XXX old animation system
id_us_plus((ID *)man->ipo);
#endif // XXX old animation system
- id_us_plus((ID *)man->group);
+ id_lib_extern((ID *)man->group);
for(a=0; a<MAX_MTEX; a++) {
if(ma->mtex[a]) {
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -283,7 +283,6 @@
ob->path= 0;
if(ob->adt) BKE_free_animdata((ID *)ob);
if(ob->poselib) ob->poselib->id.us--;
- if(ob->dup_group) ob->dup_group->id.us--;
if(ob->gpd) ob->gpd->id.us--;
if(ob->defbase.first)
BLI_freelistN(&ob->defbase);
@@ -1320,7 +1319,7 @@
/* increase user numbers */
id_us_plus((ID *)obn->data);
- id_us_plus((ID *)obn->dup_group);
+ id_lib_extern((ID *)obn->dup_group);
for(a=0; a<obn->totcol; a++) id_us_plus((ID *)obn->mat[a]);
Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/object/object_add.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -754,9 +754,8 @@
rename_id(&ob->id, group->id.name+2);
ob->dup_group= group;
ob->transflag |= OB_DUPLIGROUP;
- id_us_plus(&group->id);
+ id_lib_extern(&group->id);
-
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
return OPERATOR_FINISHED;
Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/object/object_edit.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -1408,7 +1408,7 @@
base->object->dup_group= ob->dup_group;
if(ob->dup_group)
- id_us_plus((ID *)ob->dup_group);
+ id_lib_extern(&ob->dup_group->id);
}
else if(event==7) { /* mass */
base->object->mass= ob->mass;
Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/object/object_relations.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -1250,10 +1250,9 @@
BKE_copy_animdata_id((ID *)obt->data, (ID *)ob->data);
break;
case MAKE_LINKS_DUPLIGROUP:
- if(ob->dup_group) ob->dup_group->id.us--;
obt->dup_group= ob->dup_group;
if(obt->dup_group) {
- id_us_plus((ID *)obt->dup_group);
+ id_lib_extern(&obt->dup_group->id);
obt->transflag |= OB_DUPLIGROUP;
}
break;
Modified: trunk/blender/source/blender/editors/space_outliner/outliner.c
===================================================================
--- trunk/blender/source/blender/editors/space_outliner/outliner.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/editors/space_outliner/outliner.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -1411,7 +1411,7 @@
GroupObject *go;
for(group= mainvar->group.first; group; group= group->id.next) {
- if(group->id.us) {
+ if(group->gobject.first) {
te= outliner_add_element(soops, &soops->tree, group, NULL, 0, 0);
tselem= TREESTORE(te);
@@ -3124,7 +3124,6 @@
if( GS(tsep->id->name)==ID_OB) {
Object *ob= (Object *)tsep->id;
ob->dup_group= NULL;
- group->id.us--;
}
}
else {
Modified: trunk/blender/source/blender/makesrna/intern/rna_main_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_main_api.c 2010-07-13 16:53:01 UTC (rev 30276)
+++ trunk/blender/source/blender/makesrna/intern/rna_main_api.c 2010-07-13 16:53:17 UTC (rev 30277)
@@ -397,7 +397,6 @@
void rna_Main_groups_remove(Main *bmain, ReportList *reports, Group *group)
{
unlink_group(group);
- group->id.us= 0;
free_libblock(&bmain->group, group);
/* XXX python now has invalid pointer? */
}
More information about the Bf-blender-cvs
mailing list