9#define DNA_DEPRECATED_ALLOW
15#define DNA_GENFILE_VERSIONING_MACROS
30#undef DNA_GENFILE_VERSIONING_MACROS
69 for (
bNode *node : ntree->all_nodes()) {
74 node->id = &scene->
id;
93 "Expected ARMATURE object to have an Armature as data");
101 pose_set.add(ob->pose);
106 for (
const PoseSet &pose_set : armature_poses.
values()) {
110 const bool store_on_armature = pose_set.size() == 1;
112 for (
bPose *pose : pose_set) {
115 (pchan->agrp_index - 1));
120 BoneColor &bone_color = store_on_armature ? pchan->bone->color : pchan->color;
136 BLI_assert_msg(arm->edbo ==
nullptr,
"did not expect an Armature to be saved in edit mode");
137 const uint layer_used = arm->layer_used;
141 for (
uint layer = 0; layer < 32; ++layer) {
142 const uint layer_mask = 1u << layer;
143 if ((layer_used & layer_mask) == 0) {
149 bcoll_name[0] =
'\0';
159 if (bcoll_name[0] ==
'\0') {
167 layermask_collection.
append(std::make_pair(layer_mask, bcoll));
169 if ((arm->layer & layer_mask) == 0) {
176 for (auto layer_bcoll : layermask_collection) {
177 const uint layer_mask = layer_bcoll.first;
178 if ((bone->layer & layer_mask) == 0) {
182 BoneCollection *bcoll = layer_bcoll.second;
183 ANIM_armature_bonecoll_assign(bcoll, bone);
198 bPose *pose = ob->pose;
204 collections_by_group.
add_new(bgrp, bcoll);
217 (pchan->agrp_index - 1));
244 char node_name_escaped[
MAX_NAME * 2];
245 BLI_str_escape(node_name_escaped, node->name,
sizeof(node_name_escaped));
246 std::string prefix =
"nodes[\"" + std::string(node_name_escaped) +
"\"].inputs";
261 std::pair<int, int> remap_table[] = {
281 for (
const auto &entry : remap_table) {
283 id, adt, owner_id, prefix.c_str(),
nullptr,
nullptr, entry.first, entry.second,
false);
290 const Scene *scene =
static_cast<Scene *
>(user_data);
318 light->energy = light->energy_deprecated;
327 if (scene->nodetree) {
335 if (!part->effector_weights) {
346 ob->proxy->proxy_from =
nullptr;
352 RPT_(
"Proxy lost from object %s lib %s\n"),
354 ob->id.lib->filepath);
359 RPT_(
"Proxy lost from object %s lib <NONE>\n"),
366 ob->proxy->proxy_from = ob;
373 if (!DNA_struct_member_exists(fd->
filesdna,
"bPoseChannel",
"BoneColor",
"color")) {
377 if (!DNA_struct_member_exists(fd->
filesdna,
"bArmature",
"ListBase",
"collections")) {
432 BLI_assert(tracking_camera_object !=
nullptr);
469 STRNCPY_UTF8(node->idname,
"ShaderNodeBsdfAnisotropic");
491 if (!
STREQ(socket->identifier,
"Roughness")) {
495 if (socket->link !=
nullptr) {
499 socket_value->
value = 0.0f;
516 "GeometryNodeStoreNamedAttribute",
517 "GeometryNodeInputNamedAttribute"))
551 bNode *geometry_node =
nullptr;
552 bNode *transform_node =
nullptr;
559 STREQ(link->fromsock->identifier,
"Normal"))
561 if (geometry_node ==
nullptr) {
574 *ntree, *geometry_node, *incoming_socket, *transform_node, *vec_in_socket);
577 *ntree, *transform_node, *vec_out_socket, *link->tonode, *link->tosock);
608 if (sock !=
nullptr) {
622 if (sigmaInput !=
nullptr) {
634 auto check_node = [](
const bNode *node) {
646 if (
sheen !=
nullptr &&
sheen->link ==
nullptr) {
649 static float default_value[] = {1.0f, 1.0f, 1.0f, 1.0f};
653 static float default_value[] = {0.2f, 0.2f, 0.2f, 1.0f};
674 data->parametrization = node->custom1;
676 node->storage =
data;
710 legacy_socket.
prop =
nullptr;
713 MEM_delete(legacy_socket.
runtime);
714 legacy_socket.
runtime =
nullptr;
716 return &new_socket->
item;
797 if (!subsurf->
link && *subsurf_val == 0.0f) {
804 if (subsurf->
link ==
nullptr && *subsurf_val == 0.0f) {
815 if (subsurf->
link || subsurf_col->
link || base_col->
link) {
818 mix->locx_legacy = node->locx_legacy - 170;
819 mix->locy_legacy = node->locy_legacy - 120;
830 if (base_col->
link) {
835 if (subsurf_col->
link) {
850 interp_v4_v4v4(base_col_val, base_col_val, subsurf_col_val, *subsurf_val);
908 const int initial_pos)
910 const bool sockets_above_panels = !(panel.
flag &
914 int pos = initial_pos;
916 if (sockets_above_panels) {
919 for (
int test_pos = items.
size() - 1; test_pos >= initial_pos; test_pos--) {
933 for (
int test_pos = 0; test_pos <= initial_pos; test_pos++) {
934 if (test_pos >= items.
size()) {
956 position = std::min(std::max(position, 0), parent.
items_num);
962 parent.items().take_front(position).copy_from(old_items.
take_front(position));
963 parent.items().drop_front(position + 1).copy_from(old_items.
drop_front(position));
964 parent.items()[position] = &socket.
item;
966 if (old_items.
data()) {
977 if (parent ==
nullptr) {
1011 if (is_output_a != is_output_b) {
1020 std::stable_sort(panel.items().begin(), panel.items().end(), item_compare);
1039 *node,
SOCK_IN,
"Specular Tint");
1060 static float one[] = {1.0f, 1.0f, 1.0f, 1.0f};
1063 float metallic_mix[4];
1065 interp_v4_v4v4(specular_tint, one, metallic_mix, specular_tint_old);
1067 if (specular_tint_sock->
link ==
nullptr && specular_tint_old <= 0.0f) {
1077 bNode *metallic_mix_node =
nullptr;
1078 if (metallic_sock->
link || (base_color_sock->
link && metallic > 0.0f)) {
1082 mix->locx_legacy = node->locx_legacy - 270;
1083 mix->locy_legacy = node->locy_legacy - 120;
1089 metallic_mix_node =
mix;
1092 if (base_color_sock->
link) {
1101 if (metallic_sock->
link) {
1106 else if (base_color_sock->
link) {
1114 if (specular_tint_sock->
link || (metallic_mix_out && specular_tint_old > 0.0f)) {
1117 mix->locx_legacy = node->locx_legacy - 170;
1118 mix->locy_legacy = node->locy_legacy - 120;
1127 if (metallic_mix_out) {
1131 if (specular_tint_sock->
link) {
1173 if (!
STREQ(socket.socket_type,
"NodeSocketGeometry")) {
1176 if (!group->geometry_node_asset_traits) {
1207#define SCE_SNAP_PROJECT (1 << 3)
1212#undef SCE_SNAP_PROJECT
1237 if (light->type ==
LA_SPOT && light->nodetree) {
1261 if (!DNA_struct_member_exists(fd->
filesdna,
"LightProbe",
"int",
"grid_bake_samples")) {
1263 lightprobe->grid_bake_samples = 2048;
1264 lightprobe->grid_normal_bias = 0.3f;
1265 lightprobe->grid_view_bias = 0.0f;
1266 lightprobe->grid_facing_bias = 0.5f;
1267 lightprobe->grid_dilation_threshold = 0.5f;
1268 lightprobe->grid_dilation_radius = 1.0f;
1273 if (!DNA_struct_member_exists(fd->
filesdna,
"World",
"int",
"probe_resolution")) {
1279 if (!DNA_struct_member_exists(fd->
filesdna,
"LightProbe",
"float",
"grid_surface_bias")) {
1281 lightprobe->grid_surface_bias = 0.05f;
1282 lightprobe->grid_escape_bias = 0.1f;
1288 const int R_IMF_FLAG_ZBUF_LEGACY = 1 << 0;
1290 scene->r.im_format.flag &= ~R_IMF_FLAG_ZBUF_LEGACY;
1297 layer->opacity = 1.0f;
1316 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1347 if (!DNA_struct_member_exists(fd->
filesdna,
"SceneEEVEE",
"int",
"ray_tracing_method")) {
1353 if (!DNA_struct_exists(fd->
filesdna,
"RegionAssetShelf")) {
1361 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1367 "asset shelf for view3d (versioning)",
1375 "asset shelf header for view3d (versioning)",
1392 if (!node->storage) {
1398 node->storage = tex;
1409 if (!DNA_struct_exists(fd->
filesdna,
"NodeShaderHairPrincipled")) {
1419 if (!DNA_struct_member_exists(fd->
filesdna,
"Camera",
"float",
"fisheye_fov")) {
1468 if (!DNA_struct_member_exists(fd->
filesdna,
"LightProbe",
"float",
"grid_flag")) {
1476 if (!DNA_struct_member_exists(fd->
filesdna,
"SceneEEVEE",
"int",
"gi_irradiance_pool_size")) {
1478 scene->eevee.gi_irradiance_pool_size = 16;
1483 scene->toolsettings->snap_flag_anim |=
SCE_SNAP;
1484 scene->toolsettings->snap_anim_mode |= (1 << 10);
1506 if (legacy_socket->prop) {
1509 MEM_delete(legacy_socket->runtime);
1515 if (legacy_socket->prop) {
1518 MEM_delete(legacy_socket->runtime);
1564 const ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1592 sockets_to_split.
append(&socket);
1599 const int position = ntree->tree_interface.find_item_position(socket->item);
1623 scene->simulation_frame_start = scene->r.sfra;
1624 scene->simulation_frame_end = scene->r.efra;
1640 if (!DNA_struct_member_exists(fd->
filesdna,
"SceneEEVEE",
"int",
"shadow_step_count")) {
1653 const ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1678 if (node->is_reroute()) {
1690 enum { IS_DEFAULT = 0, IS_UV, IS_NODE, IS_ANIM };
1691 auto versioning_snap_to = [](
short snap_to_old,
int type) {
1693 if (snap_to_old & (1 << 0)) {
1698 if (snap_to_old & (1 << 1)) {
1703 if (
ELEM(type, IS_DEFAULT, IS_ANIM) && snap_to_old & (1 << 2)) {
1706 if (type == IS_DEFAULT && snap_to_old & (1 << 3)) {
1709 if (type == IS_DEFAULT && snap_to_old & (1 << 4)) {
1712 if (type == IS_DEFAULT && snap_to_old & (1 << 5)) {
1715 if (
ELEM(type, IS_DEFAULT, IS_UV, IS_NODE) && snap_to_old & (1 << 6)) {
1718 if (
ELEM(type, IS_DEFAULT, IS_UV, IS_NODE) && snap_to_old & (1 << 7)) {
1721 if (type == IS_DEFAULT && snap_to_old & (1 << 8)) {
1724 if (type == IS_DEFAULT && snap_to_old & (1 << 9)) {
1727 if (snap_to_old & (1 << 10)) {
1730 if (snap_to_old & (1 << 11)) {
1733 if (snap_to_old & (1 << 12)) {
1754 if (
CharInfo *info = curve->strinfo) {
1755 for (
int i = curve->len_char32 - 1;
i >= 0;
i--, info++) {
1756 if (info->mat_nr > 0) {
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
void ANIM_bonecoll_hide(bArmature *armature, BoneCollection *bcoll)
bool ANIM_armature_bonecoll_assign(BoneCollection *bcoll, Bone *bone)
BoneCollection * ANIM_armature_bonecoll_new(bArmature *armature, const char *name, int parent_index=-1)
AnimData * BKE_animdata_from_id(const ID *id)
void BKE_animdata_fix_paths_rename(struct ID *owner_id, struct AnimData *adt, struct ID *ref_id, const char *prefix, const char *oldName, const char *newName, int oldSubscript, int newSubscript, bool verify_paths)
bool BKE_animdata_fix_paths_remove(struct ID *id, const char *prefix)
void BKE_pose_ensure(Main *bmain, Object *ob, bArmature *arm, bool do_id_user)
struct EffectorWeights * BKE_effector_add_weights(struct Collection *collection)
Low-level operations for grease pencil.
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_AssignString(IDProperty *prop, const char *st) ATTR_NONNULL()
void IDP_FreeProperty(IDProperty *prop)
#define IDP_string_get(prop)
IDProperty * IDP_CopyProperty_ex(const IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
IDProperty * IDP_GetProperties(ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define MAIN_VERSION_FILE_ATLEAST(main, ver, subver)
void BKE_mesh_legacy_convert_uvs_to_generic(Mesh *mesh)
void BKE_mesh_legacy_edge_crease_to_layers(Mesh *mesh)
void BKE_mesh_legacy_face_set_to_generic(Mesh *mesh)
void BKE_mesh_legacy_sharp_faces_from_flags(Mesh *mesh)
void BKE_mesh_legacy_convert_edges_to_generic(Mesh *mesh)
void BKE_mesh_legacy_bevel_weight_to_generic(Mesh *mesh)
void BKE_mesh_legacy_face_map_to_generic(Main *bmain)
void BKE_mesh_legacy_convert_loops_to_corners(Mesh *mesh)
void BKE_mesh_legacy_convert_verts_to_positions(Mesh *mesh)
void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
void BKE_mesh_legacy_bevel_weight_to_layers(Mesh *mesh)
void BKE_mesh_legacy_crease_to_generic(Mesh *mesh)
void BKE_mesh_legacy_convert_flags_to_selection_layers(Mesh *mesh)
void BKE_mesh_legacy_convert_polys_to_offsets(Mesh *mesh)
void BKE_mesh_legacy_uv_seam_from_flags(Mesh *mesh)
void BKE_mesh_legacy_convert_mpoly_to_material_indices(Mesh *mesh)
void BKE_mesh_legacy_sharp_edges_from_flags(Mesh *mesh)
void BKE_mesh_legacy_attribute_flags_to_strings(Mesh *mesh)
#define FOREACH_NODETREE_END
#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id)
#define SH_NODE_TEX_NOISE
#define SH_NODE_BSDF_PRINCIPLED
#define GEO_NODE_SET_SHADE_SMOOTH
#define CMP_NODE_CRYPTOMATTE
#define SH_NODE_BSDF_SHEEN
#define SH_NODE_TEX_COORD
#define SH_NODE_VECT_TRANSFORM
#define SH_NODE_BSDF_HAIR_PRINCIPLED
#define SH_NODE_BSDF_GLOSSY
#define SH_NODE_BSDF_GLASS
#define CMP_NODE_R_LAYERS
#define SH_NODE_NEW_GEOMETRY
#define SH_NODE_BSDF_GLOSSY_LEGACY
#define SH_NODE_BSDF_REFRACTION
void BKE_scene_disable_color_management(Scene *scene)
void BKE_texture_mapping_default(struct TexMapping *texmap, int type)
void BKE_texture_colormapping_default(struct ColorMapping *colormap)
struct MovieTrackingObject * BKE_tracking_object_get_camera(const struct MovieTracking *tracking)
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
#define BLI_assert_msg(a, msg)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE void copy_v4_v4(float r[4], const float a[4])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t)
char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define SNPRINTF_UTF8(dst, format,...)
#define STRNCPY_UTF8(dst, src)
#define SET_FLAG_FROM_TEST(value, test, flag)
void BLO_reportf_wrap(BlendFileReadReport *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define ID_IS_LINKED(_id)
#define DNA_struct_default_get(struct_name)
blenloader genfile private function prototypes
@ LIGHTPROBE_GRID_CAPTURE_EMISSION
@ LIGHTPROBE_GRID_CAPTURE_WORLD
@ LIGHTPROBE_GRID_CAPTURE_INDIRECT
@ eModifierType_WeightVGEdit
@ NODE_INTERFACE_PANEL_ALLOW_SOCKETS_AFTER_PANELS
@ NODE_INTERFACE_PANEL_ALLOW_CHILD_PANELS_LEGACY
@ NODE_INTERFACE_SOCKET_OUTPUT
@ NODE_INTERFACE_SOCKET_HIDE_IN_MODIFIER
@ NODE_INTERFACE_SOCKET_INPUT
@ NODE_INTERFACE_SOCKET_HIDE_VALUE
#define SHD_SHEEN_ASHIKHMIN
@ GEO_NODE_ASSET_MODIFIER
@ CMP_NODE_CRYPTOMATTE_SOURCE_RENDER
@ SHD_GLOSSY_SHARP_DEPRECATED
@ SHD_VECT_TRANSFORM_TYPE_NORMAL
@ SHD_PRINCIPLED_HAIR_CHIANG
@ RAYTRACE_EEVEE_METHOD_SCREEN
#define SCE_SNAP_TO_VERTEX
@ SCE_SNAP_INDIVIDUAL_NEAREST
@ SCE_SNAP_INDIVIDUAL_PROJECT
@ SCE_SNAP_TO_EDGE_MIDPOINT
@ SCE_SNAP_TO_EDGE_PERPENDICULAR
@ RGN_TYPE_ASSET_SHELF_HEADER
@ RGN_FLAG_NO_USER_RESIZE
@ SN_OVERLAY_SHOW_PREVIEWS
@ SEQ_TIMELINE_SHOW_STRIP_RETIMING
@ LIGHT_PROBE_RESOLUTION_1024
BMesh const char void * data
Value & lookup_or_add_default(const Key &key)
ValueIterator values() const &
const Value & lookup(const Key &key) const
void add_new(const Key &key, const Value &value)
constexpr T * data() const
constexpr MutableSpan drop_front(const int64_t n) const
constexpr MutableSpan take_front(const int64_t n) const
constexpr int64_t size() const
constexpr bool endswith(StringRef suffix) const
constexpr const char * data() const
void append(const T &value)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
static void ANIM_armature_foreach_bone(ListBase *bones, CB callback)
void node_modify_socket_type_static(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
bNodeSocket * node_find_socket(bNode &node, eNodeSocketInOut in_out, StringRef identifier)
void node_remove_socket(bNodeTree &ntree, bNode &node, bNodeSocket &sock)
void node_remove_link(bNodeTree *ntree, bNodeLink &link)
bNode * node_add_static_node(const bContext *C, bNodeTree &ntree, int type)
bNodeLink & node_add_link(bNodeTree &ntree, bNode &fromnode, bNodeSocket &fromsock, bNode &tonode, bNodeSocket &tosock)
bNodeSocket * node_add_static_socket(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out, int type, int subtype, StringRefNull identifier, StringRefNull name)
void foreach_strip(ListBase *seqbase, ForEachFunc callback, void *user_data)
int retiming_keys_count(const Strip *strip)
Editing * editing_get(const Scene *scene)
MutableSpan< SeqRetimingKey > retiming_keys_get(const Strip *strip)
void retiming_data_ensure(Strip *strip)
int time_left_handle_frame_get(const Scene *, const Strip *strip)
bool retiming_is_allowed(const Strip *strip)
void time_right_handle_frame_set(const Scene *scene, Strip *strip, int timeline_frame)
closure color sheen(normal N, float roughness) BUILTIN
AssetLibraryReference asset_library_reference
AssetShelfSettings settings
short preferred_row_count
struct BlendFileReadReport::@124362246150331065306145367225174223236260272332 count
float fisheye_polynomial_k3
float fisheye_polynomial_k1
float fisheye_polynomial_k2
float fisheye_polynomial_k0
float fisheye_polynomial_k4
BlendFileReadReport * reports
struct MovieTracking tracking
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingReconstruction reconstruction
MovieTrackingTrack * active_track
struct MovieReconstructedCamera * cameras
MovieTrackingPlaneTrack * act_plane_track_legacy
MovieTrackingReconstruction reconstruction_legacy
ListBase plane_tracks_legacy
MovieTrackingTrack * act_track_legacy
ColorMapping color_mapping
AssetShelf * active_shelf
struct SequencerTimelineOverlay timeline_overlay
bNodeSocketRuntimeHandle * runtime
char * default_attribute_name
bNodeTreeInterfaceItem ** items_array
struct IDProperty * properties
bNodeTreeInterfaceItem item
char * default_attribute_name
bNodeTreeInterfacePanel root_panel
bNodeTreeInterface tree_interface
static void version_principled_bsdf_subsurface(bNodeTree *ntree)
static void versioning_remove_microfacet_sharp_distribution(bNodeTree *ntree)
static void version_replace_velvet_sheen_node(bNodeTree *ntree)
static void version_principled_bsdf_emission(bNodeTree *ntree)
void do_versions_after_linking_400(FileData *fd, Main *bmain)
static void version_node_group_split_socket(bNodeTreeInterface &tree_interface, bNodeTreeInterfaceSocket &socket, bNodeTreeInterfacePanel *parent, int position)
static bool versioning_convert_strip_speed_factor(Strip *strip, void *user_data)
static void version_principled_bsdf_specular_tint(bNodeTree *ntree)
static void version_principled_bsdf_update_animdata(ID *owner_id, bNodeTree *ntree)
static void version_composite_nodetree_null_id(bNodeTree *ntree, Scene *scene)
static void version_bonelayers_to_bonecollections(Main *bmain)
static void versioning_replace_legacy_glossy_node(bNodeTree *ntree)
static void version_vertex_weight_edit_preserve_threshold_exclusivity(Main *bmain)
static void version_principled_transmission_roughness(bNodeTree *ntree)
static void version_principled_bsdf_rename_sockets(bNodeTree *ntree)
static bNodeTreeInterfaceItem * legacy_socket_move_to_interface(bNodeSocket &legacy_socket, const eNodeSocketInOut in_out)
static void version_replace_texcoord_normal_socket(bNodeTree *ntree)
static void versioning_node_group_sort_sockets_recursive(bNodeTreeInterfacePanel &panel)
static void version_movieclips_legacy_camera_object(Main *bmain)
static void version_copy_socket(bNodeTreeInterfaceSocket &dst, const bNodeTreeInterfaceSocket &src, char *identifier)
static void version_principled_bsdf_coat(bNodeTree *ntree)
static void enable_geometry_nodes_is_modifier(Main &bmain)
static void version_nodes_insert_item(bNodeTreeInterfacePanel &parent, bNodeTreeInterfaceSocket &socket, int position)
static void version_motion_tracking_legacy_camera_object(MovieClip &movieclip)
static void versioning_convert_node_tree_socket_lists_to_interface(bNodeTree *ntree)
void blo_do_versions_400(FileData *fd, Library *, Main *bmain)
static void version_replace_principled_hair_model(bNodeTree *ntree)
static void version_principled_bsdf_sheen(bNodeTree *ntree)
static void version_mesh_legacy_to_struct_of_array_format(Mesh &mesh)
static int version_nodes_find_valid_insert_position_for_item(const bNodeTreeInterfacePanel &panel, const bNodeTreeInterfaceItem &item, const int initial_pos)
static void version_bonegroups_to_bonecollections(Main *bmain)
static void version_mesh_crease_generic(Main &bmain)
static void version_bonegroup_migrate_color(Main *bmain)
float * version_cycles_node_socket_float_value(bNodeSocket *socket)
IDProperty * version_cycles_properties_from_ID(ID *id)
int version_cycles_property_int(IDProperty *idprop, const char *name, int default_value)
void version_update_node_input(bNodeTree *ntree, FunctionRef< bool(bNode *)> check_node, const char *socket_identifier, FunctionRef< void(bNode *, bNodeSocket *)> update_input, FunctionRef< void(bNode *, bNodeSocket *, bNode *, bNodeSocket *)> update_input_link)
float * version_cycles_node_socket_rgba_value(bNodeSocket *socket)
void version_node_input_socket_name(bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
StringRef legacy_socket_idname_to_socket_type(StringRef idname)
float version_cycles_property_float(IDProperty *idprop, const char *name, float default_value)
ARegion * do_versions_add_region_if_not_found(ListBase *regionbase, int region_type, const char *, int link_after_region_type)