diff --git a/intern/cycles/blender/shader.cpp b/intern/cycles/blender/shader.cpp index eeec7b97215..7f8cce86776 100644 --- a/intern/cycles/blender/shader.cpp +++ b/intern/cycles/blender/shader.cpp @@ -190,6 +190,7 @@ static SocketType::Type convert_socket_type(BL::NodeSocket &b_socket) switch (b_socket.type()) { case BL::NodeSocket::type_VALUE: return SocketType::FLOAT; + case BL::NodeSocket::type_BOOLEAN: case BL::NodeSocket::type_INT: return SocketType::INT; case BL::NodeSocket::type_VECTOR: diff --git a/source/blender/gpu/intern/gpu_node_graph.cc b/source/blender/gpu/intern/gpu_node_graph.cc index ab67ee07829..a145549df58 100644 --- a/source/blender/gpu/intern/gpu_node_graph.cc +++ b/source/blender/gpu/intern/gpu_node_graph.cc @@ -169,9 +169,10 @@ static void gpu_node_input_link(GPUNode *node, GPUNodeLink *link, const eGPUType static const char *gpu_uniform_set_function_from_type(eNodeSocketDatatype type) { switch (type) { - /* For now INT is supported as float. */ + /* For now INT & BOOL are supported as float. */ case SOCK_INT: case SOCK_FLOAT: + case SOCK_BOOLEAN: return "set_value"; case SOCK_VECTOR: return "set_rgb"; diff --git a/source/blender/nodes/intern/node_exec.cc b/source/blender/nodes/intern/node_exec.cc index 81fb49d22a0..5f80b78ac19 100644 --- a/source/blender/nodes/intern/node_exec.cc +++ b/source/blender/nodes/intern/node_exec.cc @@ -23,8 +23,8 @@ static int node_exec_socket_use_stack(bNodeSocket *sock) { - /* NOTE: INT supported as FLOAT. Only for EEVEE. */ - return ELEM(sock->type, SOCK_INT, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER); + /* NOTE: INT and BOOL supported as FLOAT. Only for EEVEE. */ + return ELEM(sock->type, SOCK_INT, SOCK_BOOLEAN, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER); } bNodeStack *node_get_socket_stack(bNodeStack *stack, bNodeSocket *sock) diff --git a/source/blender/nodes/shader/node_shader_tree.cc b/source/blender/nodes/shader/node_shader_tree.cc index be57665a05d..a40f2cb0dd5 100644 --- a/source/blender/nodes/shader/node_shader_tree.cc +++ b/source/blender/nodes/shader/node_shader_tree.cc @@ -276,6 +276,7 @@ static bool ntree_shader_expand_socket_default(bNodeTree *localtree, bNodeSocketValueRGBA *src_rgba, *dst_rgba; bNodeSocketValueFloat *src_float, *dst_float; bNodeSocketValueInt *src_int; + bNodeSocketValueBoolean *src_bool; switch (socket->type) { case SOCK_VECTOR: @@ -295,6 +296,15 @@ static bool ntree_shader_expand_socket_default(bNodeTree *localtree, dst_rgba = static_cast(value_socket->default_value); copy_v4_v4(dst_rgba->value, src_rgba->value); break; + case SOCK_BOOLEAN: + /* HACK: Support as float. */ + value_node = nodeAddStaticNode(nullptr, localtree, SH_NODE_VALUE); + value_socket = ntree_shader_node_find_output(value_node, "Value"); + BLI_assert(value_socket != nullptr); + src_bool = static_cast(socket->default_value); + dst_float = static_cast(value_socket->default_value); + dst_float->value = float(src_bool->value); + break; case SOCK_INT: /* HACK: Support as float. */ value_node = nodeAddStaticNode(nullptr, localtree, SH_NODE_VALUE); diff --git a/source/blender/nodes/shader/node_shader_util.cc b/source/blender/nodes/shader/node_shader_util.cc index aa738e20c72..6229e6e0d17 100644 --- a/source/blender/nodes/shader/node_shader_util.cc +++ b/source/blender/nodes/shader/node_shader_util.cc @@ -164,6 +164,9 @@ void node_gpu_stack_from_data(GPUNodeStack *gs, int type, bNodeStack *ns) else if (type == SOCK_INT) { gs->type = GPU_FLOAT; /* HACK: Support as float. */ } + else if (type == SOCK_BOOLEAN) { + gs->type = GPU_FLOAT; /* HACK: Support as float. */ + } else if (type == SOCK_VECTOR) { gs->type = GPU_VEC3; } @@ -208,7 +211,9 @@ static void data_from_gpu_stack_list(ListBase *sockets, bNodeStack **ns, GPUNode { int i = 0; LISTBASE_FOREACH (bNodeSocket *, socket, sockets) { - if (ELEM(socket->type, SOCK_FLOAT, SOCK_INT, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER)) { + if (ELEM( + socket->type, SOCK_FLOAT, SOCK_INT, SOCK_BOOLEAN, SOCK_VECTOR, SOCK_RGBA, SOCK_SHADER)) + { node_data_from_gpu_stack(ns[i], &gs[i]); i++; }