Merging trunk 17342:17457
[blender-staging.git] / source / blender / blenloader / intern / readfile.c
index ea8db51a300cba7b2de8f433eaac71d9ea5e767b..9001e75b55bd62f9a6947d58e756c0676c9e1669 100644 (file)
@@ -1524,6 +1524,7 @@ static void lib_verify_nodetree(Main *main, int open)
 {
        Scene *sce;
        Material *ma;
+       Tex *tx;
        bNodeTree *ntree;
 
        /* this crashes blender on undo/redo
@@ -1548,6 +1549,11 @@ static void lib_verify_nodetree(Main *main, int open)
                if(sce->nodetree)
                        ntreeVerifyTypes(sce->nodetree);
        }
+       /* and texture trees */
+       for(tx= main->tex.first; tx; tx= tx->id.next) {
+               if(tx->nodetree)
+                       ntreeVerifyTypes(tx->nodetree);
+       }
 }
 
 
@@ -1584,6 +1590,9 @@ static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
                                else if(ELEM3(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))
                                        ((ImageUser *)node->storage)->ok= 1;
                        }
+                       else if( ntree->type==NTREE_TEXTURE && (node->type==TEX_NODE_CURVE_RGB || node->type==TEX_NODE_CURVE_TIME) ) {
+                               direct_link_curvemapping(fd, node->storage);
+                       }
                }
                link_list(fd, &node->inputs);
                link_list(fd, &node->outputs);
@@ -2490,6 +2499,9 @@ static void lib_link_texture(FileData *fd, Main *main)
                        tex->ipo= newlibadr_us(fd, tex->id.lib, tex->ipo);
                        if(tex->env) tex->env->object= newlibadr(fd, tex->id.lib, tex->env->object);
 
+                       if(tex->nodetree)
+                               lib_link_ntree(fd, &tex->id, tex->nodetree);
+                       
                        tex->id.flag -= LIB_NEEDLINK;
                }
                tex= tex->id.next;
@@ -2515,6 +2527,11 @@ static void direct_link_texture(FileData *fd, Tex *tex)
                memset(tex->env->cube, 0, 6*sizeof(void *));
                tex->env->ok= 0;
        }
+       
+       tex->nodetree= newdataadr(fd, tex->nodetree);
+       if(tex->nodetree)
+               direct_link_nodetree(fd, tex->nodetree);
+       
        tex->preview = direct_link_preview_image(fd, tex->preview);
 
        tex->iuser.ok= 1;
@@ -8303,11 +8320,23 @@ static void expand_key(FileData *fd, Main *mainvar, Key *key)
        expand_doit(fd, mainvar, key->ipo);
 }
 
+static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree)
+{
+       bNode *node;
+       
+       for(node= ntree->nodes.first; node; node= node->next)
+               if(node->id && node->type!=CMP_NODE_R_LAYERS)
+                       expand_doit(fd, mainvar, node->id);
+
+}
 
 static void expand_texture(FileData *fd, Main *mainvar, Tex *tex)
 {
        expand_doit(fd, mainvar, tex->ima);
        expand_doit(fd, mainvar, tex->ipo);
+       
+       if(tex->nodetree)
+               expand_nodetree(fd, mainvar, tex->nodetree);
 }
 
 static void expand_brush(FileData *fd, Main *mainvar, Brush *brush)
@@ -8320,16 +8349,6 @@ static void expand_brush(FileData *fd, Main *mainvar, Brush *brush)
        expand_doit(fd, mainvar, brush->clone.image);
 }
 
-static void expand_nodetree(FileData *fd, Main *mainvar, bNodeTree *ntree)
-{
-       bNode *node;
-       
-       for(node= ntree->nodes.first; node; node= node->next)
-               if(node->id && node->type!=CMP_NODE_R_LAYERS)
-                       expand_doit(fd, mainvar, node->id);
-
-}
-
 static void expand_material(FileData *fd, Main *mainvar, Material *ma)
 {
        int a;