Fix #106760: Bool node socket default value isn't output for shader nodes #109576
|
@ -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:
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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<bNodeSocketValueRGBA *>(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<bNodeSocketValueBoolean *>(socket->default_value);
|
||||
dst_float = static_cast<bNodeSocketValueFloat *>(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);
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue