Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-03-13 03:20:44 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-03-13 03:20:51 +0300
commitbf9904ec8018db89a8775ef651fadb2ea52457f0 (patch)
tree61d816364b06bcb7f20f8c763c9678172d5f7435 /source/blender/nodes
parentaf0ab15e1dd84aadb32ee8d7a836a08fe6251474 (diff)
Fix T59501: Eevee doesn't use integer node sockets
This is a hacky fix. We just convert the int as a float and use it as such. This works ok for small int but will not be correct for numbers greater than 4194303. Correct support would require deeper change for UBO creation and socket conversion.
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/intern/node_exec.c3
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c10
-rw-r--r--source/blender/nodes/shader/node_shader_util.c2
3 files changed, 14 insertions, 1 deletions
diff --git a/source/blender/nodes/intern/node_exec.c b/source/blender/nodes/intern/node_exec.c
index 08969fe3c0e..97d93ee0fa5 100644
--- a/source/blender/nodes/intern/node_exec.c
+++ b/source/blender/nodes/intern/node_exec.c
@@ -39,7 +39,8 @@
/* supported socket types in old nodes */
int node_exec_socket_use_stack(bNodeSocket *sock)
{
- return ELEM(sock->type, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER);
+ /* NOTE: INT supported as FLOAT. Only for EEVEE. */
+ return ELEM(sock->type, SOCK_INT, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER);
}
/* for a given socket, find the actual stack entry */
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 30cc9d512f7..9c00786dc91 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -448,6 +448,7 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree)
bNodeSocketValueVector *src_vector;
bNodeSocketValueRGBA *src_rgba, *dst_rgba;
bNodeSocketValueFloat *src_float, *dst_float;
+ bNodeSocketValueInt *src_int;
bool link_added = false;
for (group_node = localtree->nodes.first; group_node; group_node = group_node->next) {
@@ -485,6 +486,15 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree)
dst_rgba = value_socket->default_value;
copy_v4_v4(dst_rgba->value, src_rgba->value);
break;
+ case SOCK_INT:
+ /* HACK: Support as float. */
+ value_node = nodeAddStaticNode(NULL, localtree, SH_NODE_VALUE);
+ value_socket = ntree_shader_node_find_output(value_node, "Value");
+ BLI_assert(value_socket != NULL);
+ src_int = group_socket->default_value;
+ dst_float = value_socket->default_value;
+ dst_float->value = (float)(src_int->value);
+ break;
case SOCK_FLOAT:
value_node = nodeAddStaticNode(NULL, localtree, SH_NODE_VALUE);
value_socket = ntree_shader_node_find_output(value_node, "Value");
diff --git a/source/blender/nodes/shader/node_shader_util.c b/source/blender/nodes/shader/node_shader_util.c
index 5488706b87d..cc2032a7ba5 100644
--- a/source/blender/nodes/shader/node_shader_util.c
+++ b/source/blender/nodes/shader/node_shader_util.c
@@ -102,6 +102,8 @@ void node_gpu_stack_from_data(struct GPUNodeStack *gs, int type, bNodeStack *ns)
if (type == SOCK_FLOAT)
gs->type = GPU_FLOAT;
+ else if (type == SOCK_INT)
+ gs->type = GPU_FLOAT; /* HACK: Support as float. */
else if (type == SOCK_VECTOR)
gs->type = GPU_VEC3;
else if (type == SOCK_RGBA)