Matrix operations and sockets for geometry nodes #105408
|
@ -311,8 +311,9 @@ static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket
|
|||
case SOCK_CUSTOM:
|
||||
case SOCK_SHADER:
|
||||
case SOCK_GEOMETRY:
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -452,10 +453,13 @@ static void write_node_socket_default_value(BlendWriter *writer, bNodeSocket *so
|
|||
case SOCK_MATERIAL:
|
||||
BLO_write_struct(writer, bNodeSocketValueMaterial, sock->default_value);
|
||||
break;
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX_2X2:
|
||||
BLO_write_struct(writer, bNodeSocketValueMatrix2x2, sock->default_value);
|
||||
break;
|
||||
case SOCK_MATRIX_3X3:
|
||||
BLO_write_struct(writer, bNodeSocketValueMatrix3x3, sock->default_value);
|
||||
break;
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_4X4:
|
||||
BLO_write_struct(writer, bNodeSocketValueMatrix4x4, sock->default_value);
|
||||
break;
|
||||
case SOCK_CUSTOM:
|
||||
|
@ -881,8 +885,8 @@ static void lib_link_node_socket(BlendLibReader *reader, Library *lib, bNodeSock
|
|||
case SOCK_CUSTOM:
|
||||
case SOCK_SHADER:
|
||||
case SOCK_GEOMETRY:
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -978,8 +982,9 @@ static void expand_node_socket(BlendExpander *expander, bNodeSocket *sock)
|
|||
case SOCK_CUSTOM:
|
||||
case SOCK_SHADER:
|
||||
case SOCK_GEOMETRY:
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1595,8 +1600,9 @@ static void socket_id_user_increment(bNodeSocket *sock)
|
|||
case SOCK_CUSTOM:
|
||||
case SOCK_SHADER:
|
||||
case SOCK_GEOMETRY:
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1656,8 +1662,9 @@ static bool socket_id_user_decrement(bNodeSocket *sock)
|
|||
case SOCK_CUSTOM:
|
||||
case SOCK_SHADER:
|
||||
case SOCK_GEOMETRY:
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
|
@ -1802,9 +1809,11 @@ const char *nodeStaticSocketType(int type, int subtype)
|
|||
return "NodeSocketTexture";
|
||||
case SOCK_MATERIAL:
|
||||
return "NodeSocketMaterial";
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX_2X2:
|
||||
return "NodeSocketMatrix2x2";
|
||||
case SOCK_MATRIX_3X3:
|
||||
return "NodeSocketMatrix3x3";
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_4X4:
|
||||
return "NodeSocketMatrix4x4";
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -1883,9 +1892,11 @@ const char *nodeStaticSocketInterfaceType(int type, int subtype)
|
|||
return "NodeSocketInterfaceTexture";
|
||||
case SOCK_MATERIAL:
|
||||
return "NodeSocketInterfaceMaterial";
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX_2X2:
|
||||
return "NodeSocketInterfaceMatrix2x2";
|
||||
case SOCK_MATRIX_3X3:
|
||||
return "NodeSocketInterfaceMatrix3x3";
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_4X4:
|
||||
return "NodeSocketInterfaceMatrix4x4";
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -1920,10 +1931,12 @@ const char *nodeStaticSocketLabel(int type, int /*subtype*/)
|
|||
return "Texture";
|
||||
case SOCK_MATERIAL:
|
||||
return "Material";
|
||||
case SOCK_MATRIX3x3:
|
||||
return "Matrix3x3";
|
||||
case SOCK_MATRIX4x4:
|
||||
return "Matrix4x4";
|
||||
case SOCK_MATRIX_2X2:
|
||||
return "2x2 Matrix";
|
||||
case SOCK_MATRIX_3X3:
|
||||
return "3x3 Matrix";
|
||||
case SOCK_MATRIX_4X4:
|
||||
return "4x4 Matrix";
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ namespace node_field_inferencing {
|
|||
|
||||
static bool is_field_socket_type(eNodeSocketDatatype type)
|
||||
{
|
||||
return ELEM(type, SOCK_FLOAT, SOCK_INT, SOCK_BOOLEAN, SOCK_VECTOR, SOCK_RGBA, SOCK_MATRIX3x3, SOCK_MATRIX4x4);
|
||||
return ELEM(type, SOCK_FLOAT, SOCK_INT, SOCK_BOOLEAN, SOCK_VECTOR, SOCK_RGBA, SOCK_MATRIX_2X2, SOCK_MATRIX_3X3, SOCK_MATRIX_4X4);
|
||||
}
|
||||
|
||||
static bool is_field_socket_type(const bNodeSocket &socket)
|
||||
|
|
|
@ -1200,8 +1200,9 @@ static const float std_node_socket_colors[][4] = {
|
|||
{0.96, 0.96, 0.96, 1.0}, /* SOCK_COLLECTION */
|
||||
{0.62, 0.31, 0.64, 1.0}, /* SOCK_TEXTURE */
|
||||
{0.92, 0.46, 0.51, 1.0}, /* SOCK_MATERIAL */
|
||||
{0.01, 0.61, 0.66, 1.0}, /* SOCK_MATRIX3x3 */
|
||||
{0.01, 0.36, 0.62, 1.0}, /* SOCK_MATRIX4x4 */
|
||||
{0.01, 0.61, 0.66, 1.0}, /* SOCK_MATRIX_2X2 */
|
||||
{0.01, 0.61, 0.66, 1.0}, /* SOCK_MATRIX_3X3 */
|
||||
{0.01, 0.61, 0.66, 1.0}, /* SOCK_MATRIX_4X4 */
|
||||
};
|
||||
|
||||
/* common color callbacks for standard types */
|
||||
|
@ -1322,16 +1323,9 @@ static void std_node_socket_draw(
|
|||
}
|
||||
}
|
||||
break;
|
||||
case SOCK_MATRIX3x3:
|
||||
if (sock->flag & SOCK_COMPACT) {
|
||||
uiTemplateComponentMenu(layout, ptr, "default_value", text);
|
||||
}
|
||||
else {
|
||||
uiLayout *column = uiLayoutColumn(layout, true);
|
||||
uiItemR(column, ptr, "default_value", DEFAULT_FLAGS, text, ICON_NONE);
|
||||
}
|
||||
break;
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
if (sock->flag & SOCK_COMPACT) {
|
||||
uiTemplateComponentMenu(layout, ptr, "default_value", text);
|
||||
}
|
||||
|
@ -1470,14 +1464,9 @@ static void std_node_socket_interface_draw(bContext * /*C*/, uiLayout *layout, P
|
|||
uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
uiItemR(col, ptr, "default_value", DEFAULT_FLAGS, IFACE_("Default"), ICON_NONE);
|
||||
uiLayout *sub = uiLayoutColumn(col, true);
|
||||
uiItemR(sub, ptr, "min_value", DEFAULT_FLAGS, IFACE_("Min"), ICON_NONE);
|
||||
uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4: {
|
||||
uiItemR(col, ptr, "default_value", DEFAULT_FLAGS, IFACE_("Default"), ICON_NONE);
|
||||
uiLayout *sub = uiLayoutColumn(col, true);
|
||||
uiItemR(sub, ptr, "min_value", DEFAULT_FLAGS, IFACE_("Min"), ICON_NONE);
|
||||
|
|
|
@ -451,9 +451,11 @@ static eCustomDataType socket_type_to_custom_data_type(const eNodeSocketDatatype
|
|||
return CD_PROP_INT32;
|
||||
case SOCK_VECTOR:
|
||||
return CD_PROP_FLOAT3;
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX_2X2:
|
||||
return CD_PROP_FLOAT2x2;
|
||||
case SOCK_MATRIX_3X3:
|
||||
return CD_PROP_FLOAT3x3;
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_4X4:
|
||||
return CD_PROP_FLOAT4x4;
|
||||
case SOCK_BOOLEAN:
|
||||
return CD_PROP_BOOL;
|
||||
|
@ -2074,12 +2076,8 @@ static int get_main_socket_priority(const bNodeSocket *socket)
|
|||
return 3;
|
||||
case SOCK_VECTOR:
|
||||
return 4;
|
||||
case SOCK_MATRIX3x3:
|
||||
return 5;
|
||||
case SOCK_MATRIX4x4:
|
||||
return 6;
|
||||
case SOCK_RGBA:
|
||||
return 7;
|
||||
return 5;
|
||||
case SOCK_STRING:
|
||||
case SOCK_SHADER:
|
||||
case SOCK_OBJECT:
|
||||
|
@ -2088,7 +2086,10 @@ static int get_main_socket_priority(const bNodeSocket *socket)
|
|||
case SOCK_COLLECTION:
|
||||
case SOCK_TEXTURE:
|
||||
case SOCK_MATERIAL:
|
||||
return 8;
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
return 6;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -383,10 +383,10 @@ static Vector<NodeLinkItem> ui_node_link_items(NodeLinkArg *arg,
|
|||
item.socket_type = SOCK_VECTOR;
|
||||
}
|
||||
else if (dynamic_cast<const decl::Matrix3x3 *>(&socket_decl)) {
|
||||
item.socket_type = SOCK_MATRIX3x3;
|
||||
item.socket_type = SOCK_MATRIX_3X3;
|
||||
}
|
||||
else if (dynamic_cast<const decl::Matrix4x4 *>(&socket_decl)) {
|
||||
item.socket_type = SOCK_MATRIX4x4;
|
||||
item.socket_type = SOCK_MATRIX_4X4;
|
||||
}
|
||||
else if (dynamic_cast<const decl::Color *>(&socket_decl)) {
|
||||
item.socket_type = SOCK_RGBA;
|
||||
|
@ -868,8 +868,9 @@ static void ui_node_draw_input(
|
|||
else {
|
||||
switch (input.type) {
|
||||
case SOCK_VECTOR:
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_2X2:
|
||||
case SOCK_MATRIX_3X3:
|
||||
case SOCK_MATRIX_4X4:
|
||||
uiItemS(sub);
|
||||
sub = uiLayoutColumn(sub, true);
|
||||
ATTR_FALLTHROUGH;
|
||||
|
|
|
@ -232,8 +232,9 @@ typedef enum eNodeSocketDatatype {
|
|||
SOCK_COLLECTION = 11,
|
||||
SOCK_TEXTURE = 12,
|
||||
SOCK_MATERIAL = 13,
|
||||
SOCK_MATRIX3x3 = 14,
|
||||
SOCK_MATRIX4x4 = 15,
|
||||
SOCK_MATRIX_2X2 = 14,
|
||||
SOCK_MATRIX_3X3 = 15,
|
||||
SOCK_MATRIX_4X4 = 16,
|
||||
} eNodeSocketDatatype;
|
||||
|
||||
/** Socket shape. */
|
||||
|
@ -676,6 +677,21 @@ typedef struct bNodeSocketValueVector {
|
|||
float min, max;
|
||||
} bNodeSocketValueVector;
|
||||
|
||||
typedef struct bNodeSocketValueMatrix2x2 {
|
||||
float value[2][2];
|
||||
float min, max;
|
||||
} bNodeSocketValueMatrix2x2;
|
||||
|
||||
typedef struct bNodeSocketValueMatrix3x3 {
|
||||
float value[3][3];
|
||||
float min, max;
|
||||
} bNodeSocketValueMatrix3x3;
|
||||
|
||||
typedef struct bNodeSocketValueMatrix4x4 {
|
||||
float value[4][4];
|
||||
float min, max;
|
||||
} bNodeSocketValueMatrix4x4;
|
||||
|
||||
typedef struct bNodeSocketValueRGBA {
|
||||
float value[4];
|
||||
} bNodeSocketValueRGBA;
|
||||
|
|
|
@ -62,8 +62,9 @@ static const EnumPropertyItem node_socket_data_type_items[] = {
|
|||
{SOCK_INT, "INT", 0, "Integer", ""},
|
||||
{SOCK_BOOLEAN, "BOOLEAN", 0, "Boolean", ""},
|
||||
{SOCK_VECTOR, "VECTOR", 0, "Vector", ""},
|
||||
{SOCK_MATRIX3x3, "MATRIX3x3", 0, "3x3 Matrix", ""},
|
||||
{SOCK_MATRIX4x4, "MATRIX4x4", 0, "4x4 Matrix", ""},
|
||||
{SOCK_MATRIX_2X2, "MATRIX2x2", 0, "2x2 Matrix", ""},
|
||||
{SOCK_MATRIX_3X3, "MATRIX3x3", 0, "3x3 Matrix", ""},
|
||||
{SOCK_MATRIX_4X4, "MATRIX4x4", 0, "4x4 Matrix", ""},
|
||||
{SOCK_STRING, "STRING", 0, "String", ""},
|
||||
{SOCK_RGBA, "RGBA", 0, "Color", ""},
|
||||
{SOCK_OBJECT, "OBJECT", 0, "Object", ""},
|
||||
|
@ -91,8 +92,9 @@ static const EnumPropertyItem node_socket_type_items[] = {
|
|||
{SOCK_INT, "INT", 0, "Integer", ""},
|
||||
{SOCK_BOOLEAN, "BOOLEAN", 0, "Boolean", ""},
|
||||
{SOCK_VECTOR, "VECTOR", 0, "Vector", ""},
|
||||
{SOCK_MATRIX3x3, "MATRIX3x3", 0, "3x3 Matrix", ""},
|
||||
{SOCK_MATRIX4x4, "MATRIX4x4", 0, "4x4 Matrix", ""},
|
||||
{SOCK_MATRIX_2X2, "MATRIX2x2", 0, "2x2 Matrix", ""},
|
||||
{SOCK_MATRIX_3X3, "MATRIX3x3", 0, "3x3 Matrix", ""},
|
||||
{SOCK_MATRIX_4X4, "MATRIX4x4", 0, "4x4 Matrix", ""},
|
||||
{SOCK_STRING, "STRING", 0, "String", ""},
|
||||
{SOCK_RGBA, "RGBA", 0, "RGBA", ""},
|
||||
{SOCK_SHADER, "SHADER", 0, "Shader", ""},
|
||||
|
@ -3219,6 +3221,54 @@ static void rna_NodeSocketStandard_vector_range(
|
|||
*softmax = dval->max;
|
||||
}
|
||||
|
||||
static void rna_NodeSocketStandard_matrix3x3_range(
|
||||
PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
|
||||
{
|
||||
bNodeSocket *sock = ptr->data;
|
||||
bNodeSocketValueMatrix3x3 *dval = sock->default_value;
|
||||
|
||||
if (dval->max < dval->min) {
|
||||
dval->max = dval->min;
|
||||
}
|
||||
|
||||
*min = -FLT_MAX;
|
||||
*max = FLT_MAX;
|
||||
*softmin = dval->min;
|
||||
*softmax = dval->max;
|
||||
}
|
||||
|
||||
static void rna_NodeSocketStandard_matrix4x4_range(
|
||||
PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
|
||||
{
|
||||
bNodeSocket *sock = ptr->data;
|
||||
bNodeSocketValueMatrix4x4 *dval = sock->default_value;
|
||||
|
||||
if (dval->max < dval->min) {
|
||||
dval->max = dval->min;
|
||||
}
|
||||
|
||||
*min = -FLT_MAX;
|
||||
*max = FLT_MAX;
|
||||
*softmin = dval->min;
|
||||
*softmax = dval->max;
|
||||
}
|
||||
|
||||
static void rna_NodeSocketStandard_matrix2x2_range(
|
||||
PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
|
||||
{
|
||||
bNodeSocket *sock = ptr->data;
|
||||
bNodeSocketValueMatrix2x2 *dval = sock->default_value;
|
||||
|
||||
if (dval->max < dval->min) {
|
||||
dval->max = dval->min;
|
||||
}
|
||||
|
||||
*min = -FLT_MAX;
|
||||
*max = FLT_MAX;
|
||||
*softmin = dval->min;
|
||||
*softmax = dval->max;
|
||||
}
|
||||
|
||||
/* using a context update function here, to avoid searching the node if possible */
|
||||
static void rna_NodeSocketStandard_value_update(struct bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
|
@ -11488,38 +11538,24 @@ static void rna_def_node_socket_vector(BlenderRNA *brna,
|
|||
RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
|
||||
}
|
||||
|
||||
static void rna_def_node_socket_matrix3x3(BlenderRNA *brna,
|
||||
static void rna_def_node_socket_matrix2x2(BlenderRNA *brna,
|
||||
const char *identifier,
|
||||
const char *interface_idname)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
const float *value_default;
|
||||
|
||||
/* choose sensible common default based on subtype */
|
||||
switch (subtype) {
|
||||
case PROP_DIRECTION: {
|
||||
static const float default_direction[3] = {0.0f, 0.0f, 1.0f};
|
||||
value_default = default_direction;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
static const float default_vector[3] = {0.0f, 0.0f, 0.0f};
|
||||
value_default = default_vector;
|
||||
break;
|
||||
}
|
||||
}
|
||||
const float value_default[] = {1.0f, 0.0f, 0.0f, 1.0f};
|
||||
|
||||
srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
|
||||
RNA_def_struct_ui_text(srna, "Vector Node Socket", "3D vector socket of a node");
|
||||
RNA_def_struct_ui_text(srna, "Matrix 2x2 Node Socket", "2x2 matrix socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "default_value");
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueMatrix2x2", "default_value");
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
|
||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||
RNA_def_property_float_array_default(prop, value_default);
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_vector_range");
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_matrix2x2_range");
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
|
||||
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
|
||||
|
@ -11528,15 +11564,136 @@ static void rna_def_node_socket_matrix3x3(BlenderRNA *brna,
|
|||
|
||||
/* socket interface */
|
||||
srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
|
||||
RNA_def_struct_ui_text(srna, "Vector Node Socket Interface", "3D vector socket of a node");
|
||||
RNA_def_struct_ui_text(srna, "Matrix 2x2 Node Socket Interface", "2x2 matrix socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "default_value");
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueMatrix2x2", "default_value");
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
|
||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_vector_range");
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_matrix2x2_range");
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "min");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "max");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
|
||||
}
|
||||
|
||||
static void rna_def_node_socket_matrix3x3(BlenderRNA *brna,
|
||||
const char *identifier,
|
||||
const char *interface_idname)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
const float value_default[] = {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f};
|
||||
|
||||
srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
|
||||
RNA_def_struct_ui_text(srna, "Matrix 3x3 Node Socket", "3x3 matrix socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueMatrix3x3", "default_value");
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
|
||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||
RNA_def_property_float_array_default(prop, value_default);
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_matrix3x3_range");
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
|
||||
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
|
||||
|
||||
/* socket interface */
|
||||
srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
|
||||
RNA_def_struct_ui_text(srna, "Matrix 3x3 Node Socket Interface", "3x3 matrix socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueMatrix3x3", "default_value");
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
|
||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_matrix3x3_range");
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "min");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "max");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
|
||||
}
|
||||
|
||||
static void rna_def_node_socket_matrix4x4(BlenderRNA *brna,
|
||||
const char *identifier,
|
||||
const char *interface_idname)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
const float value_default[] = {1.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f};
|
||||
|
||||
srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
|
||||
RNA_def_struct_ui_text(srna, "Matrix 4x4 Node Socket", "4x4 matrix socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueMatrix4x4", "default_value");
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
|
||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||
RNA_def_property_float_array_default(prop, value_default);
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_matrix4x4_range");
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
|
||||
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
|
||||
|
||||
/* socket interface */
|
||||
srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
|
||||
RNA_def_struct_ui_text(srna, "Matrix 4x4 Node Socket Interface", "4x4 matrix socket of a node");
|
||||
RNA_def_struct_sdna(srna, "bNodeSocket");
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "bNodeSocketValueMatrix4x4", "default_value");
|
||||
|
||||
prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_MATRIX);
|
||||
RNA_def_property_float_sdna(prop, NULL, "value");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_float_funcs(prop, NULL, NULL, "rna_NodeSocketStandard_matrix4x4_range");
|
||||
RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
|
||||
|
||||
|
@ -11996,6 +12153,10 @@ static void rna_def_node_socket_standard_types(BlenderRNA *brna)
|
|||
rna_def_node_socket_vector(
|
||||
brna, "NodeSocketVectorXYZ", "NodeSocketInterfaceVectorXYZ", PROP_XYZ);
|
||||
|
||||
rna_def_node_socket_matrix2x2(brna, "NodeSocketMatrix2x2", "NodeSocketInterfaceMatrix2x2");
|
||||
rna_def_node_socket_matrix3x3(brna, "NodeSocketMatrix3x3", "NodeSocketInterfaceMatrix3x3");
|
||||
rna_def_node_socket_matrix4x4(brna, "NodeSocketMatrix4x4", "NodeSocketInterfaceMatrix4x4");
|
||||
|
||||
rna_def_node_socket_color(brna, "NodeSocketColor", "NodeSocketInterfaceColor");
|
||||
|
||||
rna_def_node_socket_string(brna, "NodeSocketString", "NodeSocketInterfaceString");
|
||||
|
|
|
@ -421,7 +421,7 @@ static const std::string attribute_name_suffix = "_attribute_name";
|
|||
*/
|
||||
static bool socket_type_has_attribute_toggle(const bNodeSocket &socket)
|
||||
{
|
||||
return ELEM(socket.type, SOCK_FLOAT, SOCK_VECTOR, SOCK_BOOLEAN, SOCK_RGBA, SOCK_INT, SOCK_MATRIX3x3, SOCK_MATRIX4x4);
|
||||
return ELEM(socket.type, SOCK_FLOAT, SOCK_VECTOR, SOCK_BOOLEAN, SOCK_RGBA, SOCK_INT, SOCK_MATRIX_3X3, SOCK_MATRIX_4X4);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -479,10 +479,11 @@ id_property_create_from_socket(const bNodeSocket &socket)
|
|||
}
|
||||
return property;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
case SOCK_MATRIX_3X3: {
|
||||
const bNodeSocketValueMatrix3x3 *value = static_cast<const bNodeSocketValueMatrix3x3 *>(
|
||||
socket.default_value);
|
||||
auto property = bke::idprop::create(socket.identifier, Span<float>(value->value, 9));
|
||||
const Span<float> default_value_span((float *)value->value, 9);
|
||||
auto property = bke::idprop::create(socket.identifier, default_value_span);
|
||||
IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)IDP_ui_data_ensure(property.get());
|
||||
ui_data->base.rna_subtype = PROP_MATRIX;
|
||||
ui_data->min = ui_data->soft_min = double(value->min);
|
||||
|
@ -490,14 +491,15 @@ id_property_create_from_socket(const bNodeSocket &socket)
|
|||
ui_data->default_array = (double *)MEM_mallocN(sizeof(double[9]), "mod_prop_default");
|
||||
ui_data->default_array_len = 9;
|
||||
for (const int i : IndexRange(9)) {
|
||||
ui_data->default_array[i] = double(value->value[i]);
|
||||
ui_data->default_array[i] = double(default_value_span[i]);
|
||||
}
|
||||
return property;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_4X4: {
|
||||
const bNodeSocketValueMatrix4x4 *value = static_cast<const bNodeSocketValueMatrix4x4 *>(
|
||||
socket.default_value);
|
||||
auto property = bke::idprop::create(socket.identifier, Span<float>(value->value, 16));
|
||||
const Span<float> default_value_span((float *)value->value, 16);
|
||||
auto property = bke::idprop::create(socket.identifier, default_value_span);
|
||||
IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)IDP_ui_data_ensure(property.get());
|
||||
ui_data->base.rna_subtype = PROP_MATRIX;
|
||||
ui_data->min = ui_data->soft_min = double(value->min);
|
||||
|
@ -505,7 +507,7 @@ id_property_create_from_socket(const bNodeSocket &socket)
|
|||
ui_data->default_array = (double *)MEM_mallocN(sizeof(double[16]), "mod_prop_default");
|
||||
ui_data->default_array_len = 16;
|
||||
for (const int i : IndexRange(16)) {
|
||||
ui_data->default_array[i] = double(value->value[i]);
|
||||
ui_data->default_array[i] = double(default_value_span[i]);
|
||||
}
|
||||
return property;
|
||||
}
|
||||
|
@ -585,9 +587,9 @@ static bool id_property_type_matches_socket(const bNodeSocket &socket, const IDP
|
|||
return property.type == IDP_INT;
|
||||
case SOCK_VECTOR:
|
||||
return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && property.len == 3;
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX_3X3:
|
||||
return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && property.len == 9;
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_4X4:
|
||||
return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && property.len == 16;
|
||||
case SOCK_RGBA:
|
||||
return property.type == IDP_ARRAY && property.subtype == IDP_FLOAT && property.len == 4;
|
||||
|
@ -633,13 +635,13 @@ static void init_socket_cpp_value_from_property(const IDProperty &property,
|
|||
new (r_value) ValueOrField<float3>(value);
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
case SOCK_MATRIX_3X3: {
|
||||
float3x3 value;
|
||||
copy_m3_m3(value.ptr(), (const float (*)[3])IDP_Array(&property));
|
||||
new (r_value) ValueOrField<float3x3>(value);
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_4X4: {
|
||||
float4x4 value;
|
||||
copy_m4_m4(value.ptr(), (const float(*)[4])IDP_Array(&property));
|
||||
new (r_value) ValueOrField<float4x4>(value);
|
||||
|
|
|
@ -101,8 +101,8 @@ static bool geometry_node_tree_socket_type_valid(bNodeTreeType * /*treetype*/,
|
|||
SOCK_TEXTURE,
|
||||
SOCK_IMAGE,
|
||||
SOCK_MATERIAL,
|
||||
SOCK_MATRIX3x3,
|
||||
SOCK_MATRIX4x4);
|
||||
SOCK_MATRIX_3X3,
|
||||
SOCK_MATRIX_4X4);
|
||||
}
|
||||
|
||||
void register_node_tree_type_geo()
|
||||
|
|
|
@ -21,9 +21,9 @@ std::optional<eCustomDataType> node_data_type_to_custom_data_type(const eNodeSoc
|
|||
return CD_PROP_FLOAT;
|
||||
case SOCK_VECTOR:
|
||||
return CD_PROP_FLOAT3;
|
||||
case SOCK_MATRIX3x3:
|
||||
case SOCK_MATRIX_3X3:
|
||||
return CD_PROP_MATRIX3;
|
||||
case SOCK_MATRIX4x4:
|
||||
case SOCK_MATRIX_4X4:
|
||||
return CD_PROP_MATRIX4;
|
||||
case SOCK_RGBA:
|
||||
return CD_PROP_COLOR;
|
||||
|
|
|
@ -79,20 +79,49 @@ struct bNodeSocket *node_add_socket_from_template(struct bNodeTree *ntree,
|
|||
dval->max = stemp->max;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
bNodeSocketValueMatrix3x3 *dval = (bNodeSocketValueMatrix3x3 *)sock->default_value;
|
||||
dval->value[0] = stemp->val1;
|
||||
dval->value[1] = stemp->val2;
|
||||
dval->value[2] = stemp->val3;
|
||||
case SOCK_MATRIX_2X2: {
|
||||
bNodeSocketValueMatrix2x2 *dval = (bNodeSocketValueMatrix2x2 *)sock->default_value;
|
||||
dval->value[0][0] = stemp->val1;
|
||||
dval->value[0][1] = 0.0f;
|
||||
dval->value[1][0] = 0.0f;
|
||||
dval->value[1][1] = stemp->val1;
|
||||
dval->min = stemp->min;
|
||||
dval->max = stemp->max;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_3X3: {
|
||||
bNodeSocketValueMatrix3x3 *dval = (bNodeSocketValueMatrix3x3 *)sock->default_value;
|
||||
dval->value[0][0] = stemp->val1;
|
||||
dval->value[0][1] = 0.0f;
|
||||
dval->value[0][2] = 0.0f;
|
||||
dval->value[1][0] = 0.0f;
|
||||
dval->value[1][1] = stemp->val1;
|
||||
dval->value[1][2] = 0.0f;
|
||||
dval->value[2][0] = 0.0f;
|
||||
dval->value[2][1] = 0.0f;
|
||||
dval->value[2][2] = stemp->val1;
|
||||
dval->min = stemp->min;
|
||||
dval->max = stemp->max;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX_4X4: {
|
||||
bNodeSocketValueMatrix4x4 *dval = (bNodeSocketValueMatrix4x4 *)sock->default_value;
|
||||
dval->value[0] = stemp->val1;
|
||||
dval->value[1] = stemp->val2;
|
||||
dval->value[2] = stemp->val3;
|
||||
dval->value[0][0] = stemp->val1;
|
||||
dval->value[0][1] = 0.0f;
|
||||
dval->value[0][2] = 0.0f;
|
||||
dval->value[0][3] = 0.0f;
|
||||
dval->value[1][0] = 0.0f;
|
||||
dval->value[1][1] = stemp->val1;
|
||||
dval->value[1][2] = 0.0f;
|
||||
dval->value[1][3] = 0.0f;
|
||||
dval->value[2][0] = 0.0f;
|
||||
dval->value[2][1] = 0.0f;
|
||||
dval->value[2][2] = stemp->val1;
|
||||
dval->value[2][3] = 0.0f;
|
||||
dval->value[3][0] = 0.0f;
|
||||
dval->value[3][1] = 0.0f;
|
||||
dval->value[3][2] = 0.0f;
|
||||
dval->value[3][3] = stemp->val1;
|
||||
dval->min = stemp->min;
|
||||
dval->max = stemp->max;
|
||||
break;
|
||||
|
@ -350,12 +379,22 @@ void node_socket_init_default_value(bNodeSocket *sock)
|
|||
sock->default_value = dval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
case SOCK_MATRIX_2X2: {
|
||||
static float default_value[][2] = {{1.0f, 0.0f}, {0.0f, 1.0f}};
|
||||
bNodeSocketValueMatrix2x2 *dval = MEM_cnew<bNodeSocketValueMatrix2x2>(
|
||||
"node socket value matrix 2x2");
|
||||
copy_m2_m2(dval->value, default_value);
|
||||
dval->min = -FLT_MAX;
|
||||
dval->max = FLT_MAX;
|
||||
|
||||
sock->default_value = dval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX_3X3: {
|
||||
static float default_value[][3] = {
|
||||
{1.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}};
|
||||
bNodeSocketValueMatrix3x3 *dval = MEM_cnew<bNodeSocketValueMatrix3x3>(
|
||||
"node socket value matrix 3x3");
|
||||
dval->subtype = subtype;
|
||||
copy_m3_m3(dval->value, default_value);
|
||||
dval->min = -FLT_MAX;
|
||||
dval->max = FLT_MAX;
|
||||
|
@ -363,14 +402,13 @@ void node_socket_init_default_value(bNodeSocket *sock)
|
|||
sock->default_value = dval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_4X4: {
|
||||
static float default_value[][4] = {{1.0f, 0.0f, 0.0f, 0.0f},
|
||||
{0.0f, 1.0f, 0.0f, 0.0f},
|
||||
{0.0f, 0.0f, 1.0f, 0.0f},
|
||||
{0.0f, 0.0f, 0.0f, 1.0f}};
|
||||
bNodeSocketValueMatrix4x4 *dval = MEM_cnew<bNodeSocketValueMatrix4x4>(
|
||||
"node socket value vector");
|
||||
dval->subtype = subtype;
|
||||
copy_m4_m4(dval->value, default_value);
|
||||
dval->min = -FLT_MAX;
|
||||
dval->max = FLT_MAX;
|
||||
|
@ -478,13 +516,19 @@ void node_socket_copy_default_value(bNodeSocket *to, const bNodeSocket *from)
|
|||
*toval = *fromval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
case SOCK_MATRIX_2X2: {
|
||||
bNodeSocketValueMatrix2x2 *toval = (bNodeSocketValueMatrix2x2 *)to->default_value;
|
||||
bNodeSocketValueMatrix2x2 *fromval = (bNodeSocketValueMatrix2x2 *)from->default_value;
|
||||
*toval = *fromval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX_3X3: {
|
||||
bNodeSocketValueMatrix3x3 *toval = (bNodeSocketValueMatrix3x3 *)to->default_value;
|
||||
bNodeSocketValueMatrix3x3 *fromval = (bNodeSocketValueMatrix3x3 *)from->default_value;
|
||||
*toval = *fromval;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_4X4: {
|
||||
bNodeSocketValueMatrix4x4 *toval = (bNodeSocketValueMatrix4x4 *)to->default_value;
|
||||
bNodeSocketValueMatrix4x4 *fromval = (bNodeSocketValueMatrix4x4 *)from->default_value;
|
||||
*toval = *fromval;
|
||||
|
@ -650,18 +694,26 @@ static void standard_node_socket_interface_verify_socket(bNodeTree * /*ntree*/,
|
|||
toval->max = fromval->max;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX3x3: {
|
||||
bNodeSocketValueMatrix3x3 *toval = (bNodeSocketValueMatrix3x3 *)sock->default_value;
|
||||
const bNodeSocketValueMatrix3x3 *fromval = (const bNodeSocketValueMatrix3x3 *)
|
||||
interface_socket->default_value;
|
||||
case SOCK_MATRIX_2X2: {
|
||||
bNodeSocketValueMatrix2x2 *toval = (bNodeSocketValueMatrix2x2 *)sock->default_value;
|
||||
const bNodeSocketValueMatrix2x2 *fromval = (const bNodeSocketValueMatrix2x2 *)
|
||||
interface_socket->default_value;
|
||||
toval->min = fromval->min;
|
||||
toval->max = fromval->max;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX4x4: {
|
||||
case SOCK_MATRIX_3X3: {
|
||||
bNodeSocketValueMatrix3x3 *toval = (bNodeSocketValueMatrix3x3 *)sock->default_value;
|
||||
const bNodeSocketValueMatrix3x3 *fromval = (const bNodeSocketValueMatrix3x3 *)
|
||||
interface_socket->default_value;
|
||||
toval->min = fromval->min;
|
||||
toval->max = fromval->max;
|
||||
break;
|
||||
}
|
||||
case SOCK_MATRIX_4X4: {
|
||||
bNodeSocketValueMatrix4x4 *toval = (bNodeSocketValueMatrix4x4 *)sock->default_value;
|
||||
const bNodeSocketValueMatrix4x4 *fromval = (const bNodeSocketValueMatrix4x4 *)
|
||||
interface_socket->default_value;
|
||||
interface_socket->default_value;
|
||||
toval->min = fromval->min;
|
||||
toval->max = fromval->max;
|
||||
break;
|
||||
|
@ -820,9 +872,9 @@ static bNodeSocketType *make_socket_type_vector(PropertySubType subtype)
|
|||
return socktype;
|
||||
}
|
||||
|
||||
static bNodeSocketType *make_socket_type_matrix3()
|
||||
static bNodeSocketType *make_socket_type_matrix3x3()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_MATRIX3x3, PROP_MATRIX);
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_MATRIX_3X3, PROP_MATRIX);
|
||||
socktype->base_cpp_type = &blender::CPPType::get<blender::float3x3>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(blender::float3x3 *)r_value = ((bNodeSocketValueMatrix3x3 *)socket.default_value)->value;
|
||||
|
@ -836,9 +888,9 @@ static bNodeSocketType *make_socket_type_matrix3()
|
|||
return socktype;
|
||||
}
|
||||
|
||||
static bNodeSocketType *make_socket_type_matrix4()
|
||||
static bNodeSocketType *make_socket_type_matrix4x4()
|
||||
{
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_MATRIX4x4, PROP_MATRIX);
|
||||
bNodeSocketType *socktype = make_standard_socket_type(SOCK_MATRIX_4X4, PROP_MATRIX);
|
||||
socktype->base_cpp_type = &blender::CPPType::get<blender::float4x4>();
|
||||
socktype->get_base_cpp_value = [](const bNodeSocket &socket, void *r_value) {
|
||||
*(blender::float4x4 *)r_value = ((bNodeSocketValueMatrix4x4 *)socket.default_value)->value;
|
||||
|
@ -986,6 +1038,10 @@ void register_standard_node_socket_types()
|
|||
nodeRegisterSocketType(make_socket_type_vector(PROP_EULER));
|
||||
nodeRegisterSocketType(make_socket_type_vector(PROP_XYZ));
|
||||
|
||||
nodeRegisterSocketType(make_standard_socket_type(SOCK_MATRIX_2X2, PROP_MATRIX));
|
||||
nodeRegisterSocketType(make_socket_type_matrix3x3());
|
||||
nodeRegisterSocketType(make_socket_type_matrix4x4());
|
||||
|
||||
nodeRegisterSocketType(make_socket_type_rgba());
|
||||
|
||||
nodeRegisterSocketType(make_socket_type_string());
|
||||
|
|
|
@ -255,7 +255,7 @@ bNodeSocket &Vector::update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket
|
|||
bNodeSocket &Matrix3x3::build(bNodeTree &ntree, bNode &node) const
|
||||
{
|
||||
bNodeSocket &socket = *nodeAddStaticSocket(
|
||||
&ntree, &node, in_out_, SOCK_MATRIX3x3, PROP_MATRIX, identifier_.c_str(), name_.c_str());
|
||||
&ntree, &node, in_out_, SOCK_MATRIX_3X3, PROP_MATRIX, identifier_.c_str(), name_.c_str());
|
||||
this->set_common_flags(socket);
|
||||
bNodeSocketValueMatrix3x3 &value = *(bNodeSocketValueMatrix3x3 *)socket.default_value;
|
||||
copy_m3_m3(value.value, default_value_.ptr());
|
||||
|
@ -269,7 +269,7 @@ bool Matrix3x3::matches(const bNodeSocket &socket) const
|
|||
if (!this->matches_common_data(socket)) {
|
||||
return false;
|
||||
}
|
||||
if (socket.type != SOCK_MATRIX3x3) {
|
||||
if (socket.type != SOCK_MATRIX_3X3) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -277,12 +277,12 @@ bool Matrix3x3::matches(const bNodeSocket &socket) const
|
|||
|
||||
bool Matrix3x3::can_connect(const bNodeSocket &socket) const
|
||||
{
|
||||
return sockets_can_connect(*this, socket) && socket.type == SOCK_MATRIX3x3;
|
||||
return sockets_can_connect(*this, socket) && socket.type == SOCK_MATRIX_3X3;
|
||||
}
|
||||
|
||||
bNodeSocket &Matrix3x3::update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const
|
||||
{
|
||||
if (socket.type != SOCK_MATRIX3x3) {
|
||||
if (socket.type != SOCK_MATRIX_3X3) {
|
||||
BLI_assert(socket.in_out == in_out_);
|
||||
return this->build(ntree, node);
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ bNodeSocket &Matrix3x3::update_or_build(bNodeTree &ntree, bNode &node, bNodeSock
|
|||
bNodeSocket &Matrix4x4::build(bNodeTree &ntree, bNode &node) const
|
||||
{
|
||||
bNodeSocket &socket = *nodeAddStaticSocket(
|
||||
&ntree, &node, in_out_, SOCK_MATRIX4x4, PROP_MATRIX, identifier_.c_str(), name_.c_str());
|
||||
&ntree, &node, in_out_, SOCK_MATRIX_4X4, PROP_MATRIX, identifier_.c_str(), name_.c_str());
|
||||
this->set_common_flags(socket);
|
||||
bNodeSocketValueMatrix4x4 &value = *(bNodeSocketValueMatrix4x4 *)socket.default_value;
|
||||
copy_m4_m4(value.value, default_value_.ptr());
|
||||
|
@ -315,7 +315,7 @@ bool Matrix4x4::matches(const bNodeSocket &socket) const
|
|||
if (!this->matches_common_data(socket)) {
|
||||
return false;
|
||||
}
|
||||
if (socket.type != SOCK_MATRIX4x4) {
|
||||
if (socket.type != SOCK_MATRIX_4X4) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -323,12 +323,12 @@ bool Matrix4x4::matches(const bNodeSocket &socket) const
|
|||
|
||||
bool Matrix4x4::can_connect(const bNodeSocket &socket) const
|
||||
{
|
||||
return sockets_can_connect(*this, socket) && socket.type == SOCK_MATRIX4x4;
|
||||
return sockets_can_connect(*this, socket) && socket.type == SOCK_MATRIX_4X4;
|
||||
}
|
||||
|
||||
bNodeSocket &Matrix4x4::update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const
|
||||
{
|
||||
if (socket.type != SOCK_MATRIX4x4) {
|
||||
if (socket.type != SOCK_MATRIX_4X4) {
|
||||
BLI_assert(socket.in_out == in_out_);
|
||||
return this->build(ntree, node);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue