[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