diff options
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/colortools.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 46 |
2 files changed, 45 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c index f9854fae98c..ce0db15603f 100644 --- a/source/blender/blenkernel/intern/colortools.c +++ b/source/blender/blenkernel/intern/colortools.c @@ -584,7 +584,7 @@ void curvemapping_do_image(CurveMapping *cumap, Image *ima) pixc[0]= FTOCHAR(col[0]); pixc[1]= FTOCHAR(col[1]); pixc[2]= FTOCHAR(col[2]); - /* assume alpha was set */ + pixc[3]= FTOCHAR(pixf[3]); } } diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index f7d0be1ac33..fc23758c4b3 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -33,6 +33,7 @@ #include "DNA_ID.h" #include "DNA_node_types.h" #include "DNA_material_types.h" +#include "DNA_scene_types.h" #include "BKE_blender.h" #include "BKE_colortools.h" @@ -498,12 +499,12 @@ bNode *nodeMakeGroupFromSelected(bNodeTree *ntree) /* should become callbackable... */ void nodeVerifyGroup(bNodeTree *ngroup) { - Material *ma; /* group changed, so we rebuild the type definition */ ntreeMakeOwnType(ngroup); if(ngroup->type==NTREE_SHADER) { + Material *ma; for(ma= G.main->mat.first; ma; ma= ma->id.next) { if(ma->nodetree) { bNode *node; @@ -524,6 +525,28 @@ void nodeVerifyGroup(bNodeTree *ngroup) } } } + else if(ngroup->type==NTREE_COMPOSIT) { + Scene *sce; + for(sce= G.main->scene.first; sce; sce= sce->id.next) { + if(sce->nodetree) { + bNode *node; + + /* find if group is in tree */ + for(node= sce->nodetree->nodes.first; node; node= node->next) + if(node->id == (ID *)ngroup) + break; + + if(node) { + /* set all type pointers OK */ + ntreeInitTypes(sce->nodetree); + + for(node= sce->nodetree->nodes.first; node; node= node->next) + if(node->id == (ID *)ngroup) + nodeVerifyType(sce->nodetree, node); + } + } + } + } } /* also to check all users of groups. Now only used in editor for hide/unhide */ @@ -532,7 +555,6 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup) { bNode *node; bNodeSocket *sock; - Material *ma; /* clear flags */ for(node= ngroup->nodes.first; node; node= node->next) { @@ -544,6 +566,7 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup) /* tag all thats in use */ if(ngroup->type==NTREE_SHADER) { + Material *ma; for(ma= G.main->mat.first; ma; ma= ma->id.next) { if(ma->nodetree) { for(node= ma->nodetree->nodes.first; node; node= node->next) { @@ -561,6 +584,25 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup) } } } + else if(ngroup->type==NTREE_COMPOSIT) { + Scene *sce; + for(sce= G.main->scene.first; sce; sce= sce->id.next) { + if(sce->nodetree) { + for(node= sce->nodetree->nodes.first; node; node= node->next) { + if(node->id==(ID *)ngroup) { + for(sock= node->inputs.first; sock; sock= sock->next) + if(sock->link) + if(sock->tosock) + sock->tosock->flag |= SOCK_IN_USE; + for(sock= node->outputs.first; sock; sock= sock->next) + if(nodeCountSocketLinks(sce->nodetree, sock)) + if(sock->tosock) + sock->tosock->flag |= SOCK_IN_USE; + } + } + } + } + } } static void find_node_with_socket(bNodeTree *ntree, bNodeSocket *sock, bNode **nodep, int *sockindex) |