[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33464] branches/particles-2010/source/ blender/blenloader/intern/readfile.c: Fixed some read/ write and refcount bugs with the node tree datablocks and modifier.
Lukas Toenne
lukas.toenne at googlemail.com
Sat Dec 4 11:06:54 CET 2010
Revision: 33464
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33464
Author: lukastoenne
Date: 2010-12-04 11:06:54 +0100 (Sat, 04 Dec 2010)
Log Message:
-----------
Fixed some read/write and refcount bugs with the node tree datablocks and modifier.
Modified Paths:
--------------
branches/particles-2010/source/blender/blenloader/intern/readfile.c
Modified: branches/particles-2010/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-12-04 09:58:58 UTC (rev 33463)
+++ branches/particles-2010/source/blender/blenloader/intern/readfile.c 2010-12-04 10:06:54 UTC (rev 33464)
@@ -3766,7 +3766,7 @@
if (ntmd)
{
- ntmd->nodetree = newlibadr(fd, ob->id.lib, ntmd->nodetree);
+ ntmd->nodetree = newlibadr_us(fd, ob->id.lib, ntmd->nodetree);
}
}
@@ -4025,13 +4025,6 @@
SWITCH_INT(mmd->bindcos[a])
}
}
- else if (md->type==eModifierType_NodeTree) {
- NodeTreeModifierData *ntmd = (NodeTreeModifierData*) md;
-
- ntmd->nodetree= newdataadr(fd, ntmd->nodetree);
- if(ntmd->nodetree)
- direct_link_nodetree(fd, ntmd->nodetree);
- }
}
}
@@ -4827,18 +4820,23 @@
SpaceNode *snode= (SpaceNode *)sl;
snode->id= newlibadr(fd, sc->id.lib, snode->id);
+ snode->edittree= NULL;
- /* internal data, a bit patchy */
- if(snode->id) {
- if(GS(snode->id->name)==ID_MA)
- snode->nodetree= ((Material *)snode->id)->nodetree;
- else if(GS(snode->id->name)==ID_SCE)
- snode->nodetree= ((Scene *)snode->id)->nodetree;
- else if(GS(snode->id->name)==ID_TE)
- snode->nodetree= ((Tex *)snode->id)->nodetree;
- else if(GS(snode->id->name)==ID_NT)
- snode->nodetree= (bNodeTree *)snode->id;
+ if (ELEM3(snode->treetype, NTREE_COMPOSIT, NTREE_SHADER, NTREE_TEXTURE)) {
+ /* internal data, a bit patchy */
+ snode->nodetree= NULL;
+ if(snode->id) {
+ if(GS(snode->id->name)==ID_MA)
+ snode->nodetree= ((Material *)snode->id)->nodetree;
+ else if(GS(snode->id->name)==ID_SCE)
+ snode->nodetree= ((Scene *)snode->id)->nodetree;
+ else if(GS(snode->id->name)==ID_TE)
+ snode->nodetree= ((Tex *)snode->id)->nodetree;
+ }
}
+ else {
+ snode->nodetree= newlibadr_us(fd, sc->id.lib, snode->nodetree);
+ }
}
}
sa= sa->next;
@@ -5057,15 +5055,19 @@
snode->id= restore_pointer_by_name(newmain, snode->id, 1);
snode->edittree= NULL;
- if(snode->id==NULL)
+ if (ELEM3(snode->treetype, NTREE_COMPOSIT, NTREE_SHADER, NTREE_TEXTURE)) {
snode->nodetree= NULL;
+ if(snode->id) {
+ if(GS(snode->id->name)==ID_MA)
+ snode->nodetree= ((Material *)snode->id)->nodetree;
+ else if(GS(snode->id->name)==ID_SCE)
+ snode->nodetree= ((Scene *)snode->id)->nodetree;
+ else if(GS(snode->id->name)==ID_TE)
+ snode->nodetree= ((Tex *)snode->id)->nodetree;
+ }
+ }
else {
- if(GS(snode->id->name)==ID_MA)
- snode->nodetree= ((Material *)snode->id)->nodetree;
- else if(GS(snode->id->name)==ID_SCE)
- snode->nodetree= ((Scene *)snode->id)->nodetree;
- else if(GS(snode->id->name)==ID_TE)
- snode->nodetree= ((Tex *)snode->id)->nodetree;
+ snode->nodetree= restore_pointer_by_name(newmain, &snode->nodetree->id, 1);
}
}
}
@@ -5293,7 +5295,6 @@
snode->gpd= newdataadr(fd, snode->gpd);
direct_link_gpencil(fd, snode->gpd);
}
- snode->nodetree= snode->edittree= NULL;
}
else if(sl->spacetype==SPACE_TIME) {
SpaceTime *stime= (SpaceTime *)sl;
More information about the Bf-blender-cvs
mailing list