diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 60bd56c0050..b79ce55ab53 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -31,7 +31,7 @@ extern "C" { /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 13 +#define BLENDER_FILE_SUBVERSION 14 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and cancel loading the file, showing a warning to diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index 2e1dde10132..6cecf33fe01 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -3290,6 +3290,39 @@ static void version_node_locations_to_global(bNodeTree &ntree) } } +/** + * Clear unnecessary pointers to data blocks on output sockets group input nodes. + * These values should never have been set in the first place. They are not harmful on their own, + * but can pull in additional data-blocks when the node group is linked/appended. + */ +static void version_group_input_socket_data_block_reference(bNodeTree &ntree) +{ + LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { + if (node->type != NODE_GROUP_INPUT) { + continue; + } + LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) { + switch (socket->type) { + case SOCK_OBJECT: + socket->default_value_typed()->value = nullptr; + break; + case SOCK_IMAGE: + socket->default_value_typed()->value = nullptr; + break; + case SOCK_COLLECTION: + socket->default_value_typed()->value = nullptr; + break; + case SOCK_TEXTURE: + socket->default_value_typed()->value = nullptr; + break; + case SOCK_MATERIAL: + socket->default_value_typed()->value = nullptr; + break; + } + } + } +} + void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) { if (!MAIN_VERSION_FILE_ATLEAST(bmain, 400, 1)) { @@ -5265,6 +5298,12 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) } } + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 404, 14)) { + LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) { + version_group_input_socket_data_block_reference(*ntree); + } + } + /* Always run this versioning; meshes are written with the legacy format which always needs to * be converted to the new format on file load. Can be moved to a subversion check in a larger * breaking release. */