Nodes: add boilerplate for texture and material sockets
The sockets are not exposed in any nodes yet. They work similar to the Object/Collection sockets, which also just reference a data block. This is part of D11222.
This commit is contained in:
@@ -291,6 +291,22 @@ void node_socket_init_default_value(bNodeSocket *sock)
|
||||
sizeof(bNodeSocketValueCollection), "node socket value object");
|
||||
dval->value = nullptr;
|
||||
|
||||
sock->default_value = dval;
|
||||
break;
|
||||
}
|
||||
case SOCK_TEXTURE: {
|
||||
bNodeSocketValueTexture *dval = (bNodeSocketValueTexture *)MEM_callocN(
|
||||
sizeof(bNodeSocketValueTexture), "node socket value texture");
|
||||
dval->value = nullptr;
|
||||
|
||||
sock->default_value = dval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATERIAL: {
|
||||
bNodeSocketValueMaterial *dval = (bNodeSocketValueMaterial *)MEM_callocN(
|
||||
sizeof(bNodeSocketValueMaterial), "node socket value material");
|
||||
dval->value = nullptr;
|
||||
|
||||
sock->default_value = dval;
|
||||
break;
|
||||
}
|
||||
@@ -373,6 +389,13 @@ void node_socket_copy_default_value(bNodeSocket *to, const bNodeSocket *from)
|
||||
id_us_plus(&toval->value->id);
|
||||
break;
|
||||
}
|
||||
case SOCK_TEXTURE: {
|
||||
bNodeSocketValueTexture *toval = (bNodeSocketValueTexture *)to->default_value;
|
||||
bNodeSocketValueTexture *fromval = (bNodeSocketValueTexture *)from->default_value;
|
||||
*toval = *fromval;
|
||||
id_us_plus(&toval->value->id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
to->flag |= (from->flag & SOCK_HIDE_VALUE);
|
||||
@@ -633,6 +656,8 @@ static bNodeSocketType *make_socket_type_string()
|
||||
|
||||
MAKE_CPP_TYPE(Object, Object *)
|
||||
MAKE_CPP_TYPE(Collection, Collection *)
|
||||
MAKE_CPP_TYPE(Texture, Tex *)
|
||||
MAKE_CPP_TYPE(Material, Material *)
|
||||
|
||||
static bNodeSocketType *make_socket_type_object()
|
||||
{
|
||||
@@ -664,6 +689,26 @@ static bNodeSocketType *make_socket_type_collection()
|
||||
return socktype;
|
||||
}
|
||||
|
||||
static bNodeSocketType *make_socket_type_texture()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_TEXTURE, PROP_NONE);
|
||||
socktype->get_cpp_type = []() { return &blender::fn::CPPType::get<Tex *>(); };
|
||||
socktype->get_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Tex **)r_value = ((bNodeSocketValueTexture *)socket.default_value)->value;
|
||||
};
|
||||
return socktype;
|
||||
}
|
||||
|
||||
static bNodeSocketType *make_socket_type_material()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_MATERIAL, PROP_NONE);
|
||||
socktype->get_cpp_type = []() { return &blender::fn::CPPType::get<Material *>(); };
|
||||
socktype->get_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(Material **)r_value = ((bNodeSocketValueMaterial *)socket.default_value)->value;
|
||||
};
|
||||
return socktype;
|
||||
}
|
||||
|
||||
void register_standard_node_socket_types(void)
|
||||
{
|
||||
/* draw callbacks are set in drawnode.c to avoid bad-level calls */
|
||||
@@ -705,5 +750,9 @@ void register_standard_node_socket_types(void)
|
||||
|
||||
nodeRegisterSocketType(make_socket_type_collection());
|
||||
|
||||
nodeRegisterSocketType(make_socket_type_texture());
|
||||
|
||||
nodeRegisterSocketType(make_socket_type_material());
|
||||
|
||||
nodeRegisterSocketType(make_socket_type_virtual());
|
||||
}
|
||||
|
@@ -459,6 +459,22 @@ static int node_datatype_priority(eNodeSocketDatatype from, eNodeSocketDatatype
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
case SOCK_TEXTURE: {
|
||||
switch (from) {
|
||||
case SOCK_TEXTURE:
|
||||
return 1;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
case SOCK_MATERIAL: {
|
||||
switch (from) {
|
||||
case SOCK_MATERIAL:
|
||||
return 1;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user