[Bf-blender-cvs] [34b8d22] master: Fix T40585, group textures cannot be selected for painting.

Antony Riakiotakis noreply at git.blender.org
Wed Jun 18 19:41:10 CEST 2014


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;
+			}
 		}
 	}




More information about the Bf-blender-cvs mailing list