diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-11-13 01:03:11 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2008-11-13 01:03:11 +0300 |
commit | b3c238e8bc4c38a8f2ba483be2d19c76d03d674c (patch) | |
tree | a86991622fa5582498612cf348d0de58af048a08 /source/blender/blenloader | |
parent | bdfe7d89e2f1292644577972c716931b4ce3c6c3 (diff) | |
parent | 7e4db234cee71ead34ee81a12e27da4bd548eb4b (diff) |
2.5: merge with trunk, previous merge was only up to yesterday.
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r17416:HEAD
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 39 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 8 |
2 files changed, 37 insertions, 10 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 1ecd402bd56..ed53c31dd67 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -1510,6 +1510,7 @@ static void lib_verify_nodetree(Main *main, int open) { Scene *sce; Material *ma; + Tex *tx; bNodeTree *ntree; /* this crashes blender on undo/redo @@ -1534,6 +1535,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); + } } @@ -1570,6 +1576,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); @@ -2476,6 +2485,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; @@ -2501,6 +2513,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; @@ -8395,11 +8412,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) @@ -8412,16 +8441,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; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index a4883087cfa..d84211411fa 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -457,6 +457,8 @@ static void write_nodetree(WriteData *wd, bNodeTree *ntree) write_curvemapping(wd, node->storage); else if(ntree->type==NTREE_COMPOSIT && (node->type==CMP_NODE_TIME || node->type==CMP_NODE_CURVE_VEC || node->type==CMP_NODE_CURVE_RGB)) write_curvemapping(wd, node->storage); + else if(ntree->type==NTREE_TEXTURE && (node->type==TEX_NODE_CURVE_RGB || node->type==TEX_NODE_CURVE_TIME) ) + write_curvemapping(wd, node->storage); else writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage); } @@ -1321,6 +1323,12 @@ static void write_textures(WriteData *wd, ListBase *idbase) if(tex->coba) writestruct(wd, DATA, "ColorBand", 1, tex->coba); if(tex->env) writestruct(wd, DATA, "EnvMap", 1, tex->env); + /* nodetree is integral part of texture, no libdata */ + if(tex->nodetree) { + writestruct(wd, DATA, "bNodeTree", 1, tex->nodetree); + write_nodetree(wd, tex->nodetree); + } + write_previews(wd, tex->preview); } tex= tex->id.next; |