Geometry Nodes: move bundle and closure nodes out of experimental
This moves the bundles and closures features out of experimental, making them an official part of Blender 5.0. Also see #134029. Pull Request: https://projects.blender.org/blender/blender/pulls/143750
This commit is contained in:
@@ -658,9 +658,8 @@ class NODE_MT_category_GEO_UTILITIES(Menu):
|
|||||||
layout.menu("NODE_MT_category_GEO_TEXT")
|
layout.menu("NODE_MT_category_GEO_TEXT")
|
||||||
layout.menu("NODE_MT_category_GEO_VECTOR")
|
layout.menu("NODE_MT_category_GEO_VECTOR")
|
||||||
layout.separator()
|
layout.separator()
|
||||||
if context.preferences.experimental.use_bundle_and_closure_nodes:
|
layout.menu("NODE_MT_category_utilities_bundle")
|
||||||
layout.menu("NODE_MT_category_utilities_bundle")
|
layout.menu("NODE_MT_category_utilities_closure")
|
||||||
layout.menu("NODE_MT_category_utilities_closure")
|
|
||||||
layout.menu("NODE_MT_category_GEO_UTILITIES_FIELD")
|
layout.menu("NODE_MT_category_GEO_UTILITIES_FIELD")
|
||||||
if context.preferences.experimental.use_geometry_nodes_lists:
|
if context.preferences.experimental.use_geometry_nodes_lists:
|
||||||
layout.menu("NODE_MT_category_utilities_list")
|
layout.menu("NODE_MT_category_utilities_list")
|
||||||
|
|||||||
@@ -2868,7 +2868,6 @@ class USERPREF_PT_experimental_new_features(ExperimentalPanel, Panel):
|
|||||||
("blender/blender/projects/10", "Pipeline, Assets & IO Project Page")),
|
("blender/blender/projects/10", "Pipeline, Assets & IO Project Page")),
|
||||||
({"property": "use_new_volume_nodes"}, ("blender/blender/issues/103248", "#103248")),
|
({"property": "use_new_volume_nodes"}, ("blender/blender/issues/103248", "#103248")),
|
||||||
({"property": "use_shader_node_previews"}, ("blender/blender/issues/110353", "#110353")),
|
({"property": "use_shader_node_previews"}, ("blender/blender/issues/110353", "#110353")),
|
||||||
({"property": "use_bundle_and_closure_nodes"}, ("blender/blender/issues/134029", "#134029")),
|
|
||||||
({"property": "use_geometry_nodes_lists"}, ("blender/blender/issues/140918", "#140918")),
|
({"property": "use_geometry_nodes_lists"}, ("blender/blender/issues/140918", "#140918")),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -225,9 +225,8 @@ typedef struct UserDef_Experimental {
|
|||||||
char use_sculpt_texture_paint;
|
char use_sculpt_texture_paint;
|
||||||
char use_new_volume_nodes;
|
char use_new_volume_nodes;
|
||||||
char use_shader_node_previews;
|
char use_shader_node_previews;
|
||||||
char use_bundle_and_closure_nodes;
|
|
||||||
char use_geometry_nodes_lists;
|
char use_geometry_nodes_lists;
|
||||||
char _pad[5];
|
char _pad[6];
|
||||||
} UserDef_Experimental;
|
} UserDef_Experimental;
|
||||||
|
|
||||||
#define USER_EXPERIMENTAL_TEST(userdef, member) \
|
#define USER_EXPERIMENTAL_TEST(userdef, member) \
|
||||||
|
|||||||
@@ -431,12 +431,6 @@ static bool is_socket_type_supported(blender::bke::bNodeTreeType *ntreetype,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!U.experimental.use_bundle_and_closure_nodes) {
|
|
||||||
if (ELEM(socket_type->type, SOCK_BUNDLE, SOCK_CLOSURE)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7606,10 +7606,6 @@ static void rna_def_userdef_experimental(BlenderRNA *brna)
|
|||||||
prop, "Shader Node Previews", "Enables previews in the shader node editor");
|
prop, "Shader Node Previews", "Enables previews in the shader node editor");
|
||||||
RNA_def_property_update(prop, 0, "rna_userdef_ui_update");
|
RNA_def_property_update(prop, 0, "rna_userdef_ui_update");
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "use_bundle_and_closure_nodes", PROP_BOOLEAN, PROP_NONE);
|
|
||||||
RNA_def_property_ui_text(
|
|
||||||
prop, "Bundle and Closure Nodes", "Enables bundle and closure nodes in Geometry Nodes");
|
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "use_geometry_nodes_lists", PROP_BOOLEAN, PROP_NONE);
|
prop = RNA_def_property(srna, "use_geometry_nodes_lists", PROP_BOOLEAN, PROP_NONE);
|
||||||
RNA_def_property_ui_text(prop, "Geometry Nodes Lists", "Enable new list types and nodes");
|
RNA_def_property_ui_text(prop, "Geometry Nodes Lists", "Enable new list types and nodes");
|
||||||
|
|
||||||
|
|||||||
@@ -105,11 +105,6 @@ static void node_operators()
|
|||||||
|
|
||||||
static void node_geo_exec(GeoNodeExecParams params)
|
static void node_geo_exec(GeoNodeExecParams params)
|
||||||
{
|
{
|
||||||
if (!U.experimental.use_bundle_and_closure_nodes) {
|
|
||||||
params.set_default_remaining_outputs();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bNode &node = params.node();
|
const bNode &node = params.node();
|
||||||
const NodeCombineBundle &storage = node_storage(node);
|
const NodeCombineBundle &storage = node_storage(node);
|
||||||
|
|
||||||
|
|||||||
@@ -334,11 +334,6 @@ static void node_rna(StructRNA *srna)
|
|||||||
*r_free = true;
|
*r_free = true;
|
||||||
return enum_items_filter(rna_enum_node_socket_data_type_items,
|
return enum_items_filter(rna_enum_node_socket_data_type_items,
|
||||||
[](const EnumPropertyItem &item) -> bool {
|
[](const EnumPropertyItem &item) -> bool {
|
||||||
if (!U.experimental.use_bundle_and_closure_nodes) {
|
|
||||||
if (ELEM(item.value, SOCK_BUNDLE, SOCK_CLOSURE)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ELEM(item.value,
|
return ELEM(item.value,
|
||||||
SOCK_FLOAT,
|
SOCK_FLOAT,
|
||||||
SOCK_INT,
|
SOCK_INT,
|
||||||
|
|||||||
@@ -109,11 +109,6 @@ static void node_operators()
|
|||||||
|
|
||||||
static void node_geo_exec(GeoNodeExecParams params)
|
static void node_geo_exec(GeoNodeExecParams params)
|
||||||
{
|
{
|
||||||
if (!U.experimental.use_bundle_and_closure_nodes) {
|
|
||||||
params.set_default_remaining_outputs();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
nodes::BundlePtr bundle = params.extract_input<nodes::BundlePtr>("Bundle");
|
nodes::BundlePtr bundle = params.extract_input<nodes::BundlePtr>("Bundle");
|
||||||
if (!bundle) {
|
if (!bundle) {
|
||||||
params.set_default_remaining_outputs();
|
params.set_default_remaining_outputs();
|
||||||
|
|||||||
@@ -592,9 +592,7 @@ class LazyFunctionForSimulationOutputNode final : public LazyFunction {
|
|||||||
if (geo_eval_log::GeoTreeLogger *tree_logger = local_user_data.try_get_tree_logger(
|
if (geo_eval_log::GeoTreeLogger *tree_logger = local_user_data.try_get_tree_logger(
|
||||||
user_data))
|
user_data))
|
||||||
{
|
{
|
||||||
const StringRefNull message = U.experimental.use_bundle_and_closure_nodes ?
|
const StringRefNull message = TIP_("Simulation must not be in a loop or closure");
|
||||||
TIP_("Simulation must not be in a loop or closure") :
|
|
||||||
TIP_("Simulation must not be in a loop");
|
|
||||||
tree_logger->node_warnings.append(*tree_logger->allocator,
|
tree_logger->node_warnings.append(*tree_logger->allocator,
|
||||||
{node_.identifier, {NodeWarningType::Error, message}});
|
{node_.identifier, {NodeWarningType::Error, message}});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,11 +242,6 @@ static void node_rna(StructRNA *srna)
|
|||||||
*r_free = true;
|
*r_free = true;
|
||||||
return enum_items_filter(rna_enum_node_socket_data_type_items,
|
return enum_items_filter(rna_enum_node_socket_data_type_items,
|
||||||
[](const EnumPropertyItem &item) -> bool {
|
[](const EnumPropertyItem &item) -> bool {
|
||||||
if (!U.experimental.use_bundle_and_closure_nodes) {
|
|
||||||
if (ELEM(item.value, SOCK_BUNDLE, SOCK_CLOSURE)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ELEM(item.value,
|
return ELEM(item.value,
|
||||||
SOCK_FLOAT,
|
SOCK_FLOAT,
|
||||||
SOCK_INT,
|
SOCK_INT,
|
||||||
|
|||||||
@@ -141,11 +141,6 @@ class LazyFunctionForClosureZone : public LazyFunction {
|
|||||||
for (const int i : zone_.border_links.index_range()) {
|
for (const int i : zone_.border_links.index_range()) {
|
||||||
params.set_output(zone_info_.indices.outputs.border_link_usages[i], true);
|
params.set_output(zone_info_.indices.outputs.border_link_usages[i], true);
|
||||||
}
|
}
|
||||||
if (!U.experimental.use_bundle_and_closure_nodes) {
|
|
||||||
params.set_output(zone_info_.indices.outputs.main[0],
|
|
||||||
bke::SocketValueVariant::From(ClosurePtr()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto &storage = *static_cast<const NodeClosureOutput *>(output_bnode_.storage);
|
const auto &storage = *static_cast<const NodeClosureOutput *>(output_bnode_.storage);
|
||||||
|
|
||||||
|
|||||||
@@ -5,18 +5,10 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import bpy
|
|
||||||
|
|
||||||
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
|
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
|
||||||
from modules.mesh_test import BlendFileTest
|
from modules.mesh_test import BlendFileTest
|
||||||
|
|
||||||
if "closure" in bpy.data.filepath:
|
|
||||||
if bpy.app.version_cycle == "alpha":
|
|
||||||
bpy.context.preferences.experimental.use_bundle_and_closure_nodes = True
|
|
||||||
else:
|
|
||||||
print("Skipped because bundles and closures are still experimental.")
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
geo_node_test = BlendFileTest("test_object", "expected_object", threshold=1e-4)
|
geo_node_test = BlendFileTest("test_object", "expected_object", threshold=1e-4)
|
||||||
result = geo_node_test.run_test()
|
result = geo_node_test.run_test()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user