Commit: 34b8d22275280963cb89471346a211e069780cb9
Author: Antony Riakiotakis
Date:   Wed Jun 18 20:40:27 2014 +0300
https://developer.blender.org/rB34b8d22275280963cb89471346a211e069780cb9

Fix T40585, group textures cannot be selected for painting.

Issue here is that if there's a texture in the tree, chances are it has
already been set as active texture so groups are never traversed.

Now changed logic so that if a group node is active, its own active
texture takes priority over the parent group active texture.

===================================================================

M       source/blender/nodes/shader/node_shader_util.c

===================================================================

diff --git a/source/blender/nodes/shader/node_shader_util.c 
b/source/blender/nodes/shader/node_shader_util.c
index b00d96d..4988138 100644
--- a/source/blender/nodes/shader/node_shader_util.c
+++ b/source/blender/nodes/shader/node_shader_util.c
@@ -195,24 +195,48 @@ static void data_from_gpu_stack_list(ListBase *sockets, 
bNodeStack **ns, GPUNode
 bNode *nodeGetActiveTexture(bNodeTree *ntree)
 {
        /* this is the node we texture paint and draw in textured draw */
-       bNode *node, *tnode, *inactivenode = NULL;
+       bNode *node, *tnode, *inactivenode = NULL, *activetexnode = NULL, 
*activegroup = NULL;
+       bool hasgroup = false;
 
        if (!ntree)
                return NULL;
 
        for (node = ntree->nodes.first; node; node = node->next) {
-               if (node->flag & NODE_ACTIVE_TEXTURE)
-                       return node;
+               if (node->flag & NODE_ACTIVE_TEXTURE) {
+                       activetexnode = node;
+                       /* if active we can return immediately */
+                       if (node->flag & NODE_ACTIVE)
+                               return node;
+               }
                else if (!inactivenode && node->typeinfo->nclass == 
NODE_CLASS_TEXTURE)
                        inactivenode = node;
+               else if (node->type == NODE_GROUP) {
+                       if (node->flag & NODE_ACTIVE)
+                               activegroup = node;
+                       else
+                               hasgroup = true;
+               }
+       }
+
+       /* first, check active group for textures */
+       if (activegroup) {
+               tnode = nodeGetActiveTexture((bNodeTree *)activegroup->id);
+               /* active node takes priority, so ignore any other possible 
nodes here */
+               if (tnode)
+                       return tnode;
        }
+
+       if (activetexnode)
+               return activetexnode;
        
-       /* node active texture node in this tree, look inside groups */
-       for (node = ntree->nodes.first; node; node = node->next) {
-               if (node->type == NODE_GROUP) {
-                       tnode = nodeGetActiveTexture((bNodeTree *)node->id);
-                       if (tnode && ((tnode->flag & NODE_ACTIVE_TEXTURE) || 
!inactivenode))
-                               return tnode;
+       if (hasgroup) {
+               /* node active texture node in this tree, look inside groups */
+               for (node = ntree->nodes.first; node; node = node->next) {
+                       if (node->type == NODE_GROUP) {
+                               tnode = nodeGetActiveTexture((bNodeTree 
*)node->id);
+                               if (tnode && ((tnode->flag & 
NODE_ACTIVE_TEXTURE) || !inactivenode))
+                                       return tnode;
+                       }
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to