[Bf-blender-cvs] [b38b0cdb0dc] master: Fix T62305: Unconnected group vector inputs are mapped incorrectly

Jacques Lucke noreply at git.blender.org
Thu Mar 7 18:04:07 CET 2019


Commit: b38b0cdb0dc3604c3ec2d7627897ba595de44646
Author: Jacques Lucke
Date:   Thu Mar 7 18:03:20 2019 +0100
Branches: master
https://developer.blender.org/rBb38b0cdb0dc3604c3ec2d7627897ba595de44646

Fix T62305: Unconnected group vector inputs are mapped incorrectly

The issue was that `bNodeSocketValueVector` and `bNodeSocketValueRGBA`
don't store the value at the same location in the struct.

I kept the cases for `SOCK_VECTOR` and `SOCK_RGBA` completely separate
for now, because they only share code by coincidence and not because
they are actually the same. Eventually there could be a "Vector Input"
node similar to the "RGB" node.

Reviewers: fclem

Differential Revision: https://developer.blender.org/D4472

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

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

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

diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index f0fa49ed468..30cc9d512f7 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -445,6 +445,7 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree)
 {
 	bNode *value_node, *group_node;
 	bNodeSocket *value_socket;
+	bNodeSocketValueVector *src_vector;
 	bNodeSocketValueRGBA *src_rgba, *dst_rgba;
 	bNodeSocketValueFloat *src_float, *dst_float;
 	bool link_added = false;
@@ -468,6 +469,14 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree)
 
 			switch (group_socket->type) {
 				case SOCK_VECTOR:
+					value_node = nodeAddStaticNode(NULL, localtree, SH_NODE_RGB);
+					value_socket = ntree_shader_node_find_output(value_node, "Color");
+					BLI_assert(value_socket != NULL);
+					src_vector = group_socket->default_value;
+					dst_rgba = value_socket->default_value;
+					copy_v3_v3(dst_rgba->value, src_vector->value);
+					dst_rgba->value[3] = 1.0f; /* should never be read */
+					break;
 				case SOCK_RGBA:
 					value_node = nodeAddStaticNode(NULL, localtree, SH_NODE_RGB);
 					value_socket = ntree_shader_node_find_output(value_node, "Color");



More information about the Bf-blender-cvs mailing list