mirror of
https://github.com/blender/blender
synced 2026-09-29 04:37:17 +03:00
Fix #106760: Cycles OSL boolean socket not working
Pull Request: https://projects.blender.org/blender/blender/pulls/109576
This commit is contained in:
parent
6aa562cf7a
commit
a1bea1df6b
5 changed files with 18 additions and 3 deletions
|
|
@ -189,6 +189,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:
|
||||
|
|
|
|||
|
|
@ -168,9 +168,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";
|
||||
|
|
|
|||
|
|
@ -22,8 +22,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)
|
||||
|
|
|
|||
|
|
@ -270,6 +270,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:
|
||||
|
|
@ -289,6 +290,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);
|
||||
|
|
|
|||
|
|
@ -161,6 +161,9 @@ void node_gpu_stack_from_data(struct 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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue