Fix #119617: crash because node sockets depend on experimental feature flag #119620
@ -31,6 +31,7 @@
|
||||
#include "BKE_addon.h"
|
||||
#include "BKE_appdir.hh"
|
||||
#include "BKE_callbacks.h"
|
||||
#include "BKE_node_tree_update.hh"
|
||||
#include "BKE_sound.h"
|
||||
#include "BKE_studiolight.h"
|
||||
|
||||
@ -49,6 +50,8 @@
|
||||
|
||||
#include "BLT_lang.h"
|
||||
|
||||
#include "ED_node.hh"
|
||||
|
||||
const EnumPropertyItem rna_enum_preference_section_items[] = {
|
||||
{USER_SECTION_INTERFACE, "INTERFACE", 0, "Interface", ""},
|
||||
{USER_SECTION_THEME, "THEMES", 0, "Themes", ""},
|
||||
@ -638,6 +641,18 @@ static void rna_userdef_keyconfig_reload_update(bContext *C,
|
||||
USERDEF_TAG_DIRTY;
|
||||
}
|
||||
|
||||
static void rna_userdef_use_grease_pencil_version3_update(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
rna_userdef_keyconfig_reload_update(C, bmain, nullptr, ptr);
|
||||
/* Update nodes because some sockets may only exist depending on whether grease pencil 3 is
|
||||
* enabled. */
|
||||
LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) {
|
||||
BKE_ntree_update_tag_all(ntree);
|
||||
}
|
||||
ED_node_tree_propagate_change(C, bmain, nullptr);
|
||||
}
|
||||
|
||||
static void rna_userdef_timecode_style_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
UserDef *userdef = (UserDef *)ptr->data;
|
||||
@ -7170,7 +7185,7 @@ static void rna_def_userdef_experimental(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Grease Pencil 3.0", "Enable the new grease pencil 3.0 codebase");
|
||||
/* The key-map depends on this setting, it needs to be reloaded. */
|
||||
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_keyconfig_reload_update");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_use_grease_pencil_version3_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_viewport_debug", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, nullptr, "use_viewport_debug", 1);
|
||||
|
@ -11,9 +11,7 @@ static void node_declare(NodeDeclarationBuilder &b)
|
||||
b.add_input<decl::Geometry>("Geometry");
|
||||
b.add_output<decl::Geometry>("Mesh").propagate_all();
|
||||
b.add_output<decl::Geometry>("Curve").propagate_all();
|
||||
if (U.experimental.use_grease_pencil_version3) {
|
||||
b.add_output<decl::Geometry>("Grease Pencil").propagate_all();
|
||||
}
|
||||
b.add_output<decl::Geometry>("Grease Pencil").propagate_all();
|
||||
b.add_output<decl::Geometry>("Point Cloud").propagate_all();
|
||||
b.add_output<decl::Geometry>("Volume")
|
||||
.translation_context(BLT_I18NCONTEXT_ID_ID)
|
||||
@ -21,6 +19,16 @@ static void node_declare(NodeDeclarationBuilder &b)
|
||||
b.add_output<decl::Geometry>("Instances").propagate_all();
|
||||
}
|
||||
|
||||
static void node_update(bNodeTree *ntree, bNode *node)
|
||||
{
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) {
|
||||
if (STREQ(socket->identifier, "Grease Pencil")) {
|
||||
bke::nodeSetSocketAvailability(ntree, socket, U.experimental.use_grease_pencil_version3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void node_geo_exec(GeoNodeExecParams params)
|
||||
{
|
||||
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
|
||||
@ -69,6 +77,7 @@ static void node_register()
|
||||
&ntype, GEO_NODE_SEPARATE_COMPONENTS, "Separate Components", NODE_CLASS_GEOMETRY);
|
||||
ntype.declare = node_declare;
|
||||
ntype.geometry_node_execute = node_geo_exec;
|
||||
ntype.updatefunc = node_update;
|
||||
nodeRegisterType(&ntype);
|
||||
}
|
||||
NOD_REGISTER_NODE(node_register)
|
||||
|
Loading…
Reference in New Issue
Block a user