9#define DNA_DEPRECATED_ALLOW
15#define DNA_GENFILE_VERSIONING_MACROS
29#undef DNA_GENFILE_VERSIONING_MACROS
66 for (
bNode *node : ntree->all_nodes()) {
71 node->id = &scene->
id;
90 "Expected ARMATURE object to have an Armature as data");
98 pose_set.add(ob->pose);
103 for (
const PoseSet &pose_set : armature_poses.
values()) {
107 const bool store_on_armature = pose_set.size() == 1;
109 for (
bPose *pose : pose_set) {
112 (pchan->agrp_index - 1));
117 BoneColor &bone_color = store_on_armature ? pchan->bone->color : pchan->color;
133 BLI_assert_msg(arm->edbo ==
nullptr,
"did not expect an Armature to be saved in edit mode");
134 const uint layer_used = arm->layer_used;
138 for (
uint layer = 0; layer < 32; ++layer) {
139 const uint layer_mask = 1u << layer;
140 if ((layer_used & layer_mask) == 0) {
146 bcoll_name[0] =
'\0';
150 SNPRINTF(custom_prop_name,
"layer_name_%u", layer);
156 if (bcoll_name[0] ==
'\0') {
159 SNPRINTF(bcoll_name,
"Layer %u", layer + 1);
164 layermask_collection.
append(std::make_pair(layer_mask, bcoll));
166 if ((arm->layer & layer_mask) == 0) {
173 for (auto layer_bcoll : layermask_collection) {
174 const uint layer_mask = layer_bcoll.first;
175 if ((bone->layer & layer_mask) == 0) {
179 BoneCollection *bcoll = layer_bcoll.second;
180 ANIM_armature_bonecoll_assign(bcoll, bone);
195 bPose *pose = ob->pose;
201 collections_by_group.
add_new(bgrp, bcoll);
214 (pchan->agrp_index - 1));
241 char node_name_escaped[
MAX_NAME * 2];
242 BLI_str_escape(node_name_escaped, node->name,
sizeof(node_name_escaped));
243 std::string prefix =
"nodes[\"" + std::string(node_name_escaped) +
"\"].inputs";
258 std::pair<int, int> remap_table[] = {
278 for (
const auto &entry : remap_table) {
280 id, adt, owner_id, prefix.c_str(),
nullptr,
nullptr, entry.first, entry.second,
false);
287 const Scene *scene =
static_cast<Scene *
>(user_data);
315 light->energy = light->energy_deprecated;
324 if (scene->nodetree) {
332 if (!part->effector_weights) {
343 ob->proxy->proxy_from =
nullptr;
349 RPT_(
"Proxy lost from object %s lib %s\n"),
351 ob->id.lib->filepath);
356 RPT_(
"Proxy lost from object %s lib <NONE>\n"),
363 ob->proxy->proxy_from = ob;
370 if (!DNA_struct_member_exists(fd->
filesdna,
"bPoseChannel",
"BoneColor",
"color")) {
374 if (!DNA_struct_member_exists(fd->
filesdna,
"bArmature",
"ListBase",
"collections")) {
430 BLI_assert(tracking_camera_object !=
nullptr);
467 STRNCPY(node->idname,
"ShaderNodeBsdfAnisotropic");
489 if (!
STREQ(socket->identifier,
"Roughness")) {
493 if (socket->link !=
nullptr) {
497 socket_value->
value = 0.0f;
514 "GeometryNodeStoreNamedAttribute",
515 "GeometryNodeInputNamedAttribute"))
548 bNode *geometry_node =
nullptr;
549 bNode *transform_node =
nullptr;
556 STREQ(link->fromsock->identifier,
"Normal"))
558 if (geometry_node ==
nullptr) {
571 *ntree, *geometry_node, *incoming_socket, *transform_node, *vec_in_socket);
574 *ntree, *transform_node, *vec_out_socket, *link->tonode, *link->tosock);
605 if (sock !=
nullptr) {
616 STRNCPY(node->idname,
"ShaderNodeBsdfSheen");
619 if (sigmaInput !=
nullptr) {
631 auto check_node = [](
const bNode *node) {
643 if (
sheen !=
nullptr &&
sheen->link ==
nullptr) {
646 static float default_value[] = {1.0f, 1.0f, 1.0f, 1.0f};
650 static float default_value[] = {0.2f, 0.2f, 0.2f, 1.0f};
671 data->parametrization = node->custom1;
673 node->storage =
data;
707 legacy_socket.
prop =
nullptr;
710 MEM_delete(legacy_socket.
runtime);
711 legacy_socket.
runtime =
nullptr;
713 return &new_socket->
item;
794 if (!subsurf->
link && *subsurf_val == 0.0f) {
801 if (subsurf->
link ==
nullptr && *subsurf_val == 0.0f) {
812 if (subsurf->
link || subsurf_col->
link || base_col->
link) {
815 mix->locx_legacy = node->locx_legacy - 170;
816 mix->locy_legacy = node->locy_legacy - 120;
827 if (base_col->
link) {
832 if (subsurf_col->
link) {
847 interp_v4_v4v4(base_col_val, base_col_val, subsurf_col_val, *subsurf_val);
905 const int initial_pos)
907 const bool sockets_above_panels = !(panel.
flag &
911 int pos = initial_pos;
913 if (sockets_above_panels) {
916 for (
int test_pos = items.
size() - 1; test_pos >= initial_pos; test_pos--) {
930 for (
int test_pos = 0; test_pos <= initial_pos; test_pos++) {
931 if (test_pos >= items.
size()) {
953 position = std::min(std::max(position, 0), parent.
items_num);
959 parent.items().take_front(position).copy_from(old_items.
take_front(position));
960 parent.items().drop_front(position + 1).copy_from(old_items.
drop_front(position));
961 parent.items()[position] = &socket.
item;
963 if (old_items.
data()) {
974 if (parent ==
nullptr) {
1008 if (is_output_a != is_output_b) {
1017 std::stable_sort(panel.items().begin(), panel.items().end(), item_compare);
1036 *node,
SOCK_IN,
"Specular Tint");
1057 static float one[] = {1.0f, 1.0f, 1.0f, 1.0f};
1060 float metallic_mix[4];
1062 interp_v4_v4v4(specular_tint, one, metallic_mix, specular_tint_old);
1064 if (specular_tint_sock->
link ==
nullptr && specular_tint_old <= 0.0f) {
1074 bNode *metallic_mix_node =
nullptr;
1075 if (metallic_sock->
link || (base_color_sock->
link && metallic > 0.0f)) {
1079 mix->locx_legacy = node->locx_legacy - 270;
1080 mix->locy_legacy = node->locy_legacy - 120;
1086 metallic_mix_node =
mix;
1089 if (base_color_sock->
link) {
1098 if (metallic_sock->
link) {
1103 else if (base_color_sock->
link) {
1111 if (specular_tint_sock->
link || (metallic_mix_out && specular_tint_old > 0.0f)) {
1114 mix->locx_legacy = node->locx_legacy - 170;
1115 mix->locy_legacy = node->locy_legacy - 120;
1124 if (metallic_mix_out) {
1128 if (specular_tint_sock->
link) {
1170 if (!
STREQ(socket.socket_type,
"NodeSocketGeometry")) {
1173 if (!group->geometry_node_asset_traits) {
1204#define SCE_SNAP_PROJECT (1 << 3)
1209#undef SCE_SNAP_PROJECT
1234 if (light->type ==
LA_SPOT && light->nodetree) {
1258 if (!DNA_struct_member_exists(fd->
filesdna,
"LightProbe",
"int",
"grid_bake_samples")) {
1260 lightprobe->grid_bake_samples = 2048;
1261 lightprobe->grid_normal_bias = 0.3f;
1262 lightprobe->grid_view_bias = 0.0f;
1263 lightprobe->grid_facing_bias = 0.5f;
1264 lightprobe->grid_dilation_threshold = 0.5f;
1265 lightprobe->grid_dilation_radius = 1.0f;
1270 if (!DNA_struct_member_exists(fd->
filesdna,
"World",
"int",
"probe_resolution")) {
1276 if (!DNA_struct_member_exists(fd->
filesdna,
"LightProbe",
"float",
"grid_surface_bias")) {
1278 lightprobe->grid_surface_bias = 0.05f;
1279 lightprobe->grid_escape_bias = 0.1f;
1285 const int R_IMF_FLAG_ZBUF_LEGACY = 1 << 0;
1287 scene->r.im_format.flag &= ~R_IMF_FLAG_ZBUF_LEGACY;
1294 layer->opacity = 1.0f;
1313 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1344 if (!DNA_struct_member_exists(fd->
filesdna,
"SceneEEVEE",
"int",
"ray_tracing_method")) {
1350 if (!DNA_struct_exists(fd->
filesdna,
"RegionAssetShelf")) {
1358 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1364 "asset shelf for view3d (versioning)",
1372 "asset shelf header for view3d (versioning)",
1389 if (!node->storage) {
1395 node->storage = tex;
1406 if (!DNA_struct_exists(fd->
filesdna,
"NodeShaderHairPrincipled")) {
1416 if (!DNA_struct_member_exists(fd->
filesdna,
"Camera",
"float",
"fisheye_fov")) {
1465 if (!DNA_struct_member_exists(fd->
filesdna,
"LightProbe",
"float",
"grid_flag")) {
1473 if (!DNA_struct_member_exists(fd->
filesdna,
"SceneEEVEE",
"int",
"gi_irradiance_pool_size")) {
1475 scene->eevee.gi_irradiance_pool_size = 16;
1480 scene->toolsettings->snap_flag_anim |=
SCE_SNAP;
1481 scene->toolsettings->snap_anim_mode |= (1 << 10);
1503 if (legacy_socket->prop) {
1506 MEM_delete(legacy_socket->runtime);
1512 if (legacy_socket->prop) {
1515 MEM_delete(legacy_socket->runtime);
1561 const ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1589 sockets_to_split.
append(&socket);
1596 const int position = ntree->tree_interface.find_item_position(socket->item);
1620 scene->simulation_frame_start = scene->r.sfra;
1621 scene->simulation_frame_end = scene->r.efra;
1637 if (!DNA_struct_member_exists(fd->
filesdna,
"SceneEEVEE",
"int",
"shadow_step_count")) {
1650 const ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
1675 if (node->is_reroute()) {
1687 enum { IS_DEFAULT = 0, IS_UV, IS_NODE, IS_ANIM };
1688 auto versioning_snap_to = [](
short snap_to_old,
int type) {
1690 if (snap_to_old & (1 << 0)) {
1695 if (snap_to_old & (1 << 1)) {
1700 if (
ELEM(type, IS_DEFAULT, IS_ANIM) && snap_to_old & (1 << 2)) {
1703 if (type == IS_DEFAULT && snap_to_old & (1 << 3)) {
1706 if (type == IS_DEFAULT && snap_to_old & (1 << 4)) {
1709 if (type == IS_DEFAULT && snap_to_old & (1 << 5)) {
1712 if (
ELEM(type, IS_DEFAULT, IS_UV, IS_NODE) && snap_to_old & (1 << 6)) {
1715 if (
ELEM(type, IS_DEFAULT, IS_UV, IS_NODE) && snap_to_old & (1 << 7)) {
1718 if (type == IS_DEFAULT && snap_to_old & (1 << 8)) {
1721 if (type == IS_DEFAULT && snap_to_old & (1 << 9)) {
1724 if (snap_to_old & (1 << 10)) {
1727 if (snap_to_old & (1 << 11)) {
1730 if (snap_to_old & (1 << 12)) {
1751 if (
CharInfo *info = curve->strinfo) {
1752 for (
int i = curve->len_char32 - 1;
i >= 0;
i--, info++) {
1753 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)
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
#define SNPRINTF(dst, format,...)
char * BLI_strdup_null(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_MALLOC
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define SET_FLAG_FROM_TEST(value, test, flag)
void BLO_reportf_wrap(BlendFileReadReport *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#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
@ SHD_VECT_TRANSFORM_TYPE_NORMAL
@ CMP_NODE_CRYPTOMATTE_SOURCE_RENDER
@ SHD_PRINCIPLED_HAIR_CHIANG
@ SHD_GLOSSY_SHARP_DEPRECATED
@ 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)
#define ID_IS_LINKED(_id)
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)
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)
void for_each_callback(ListBase *seqbase, ForEachFunc callback, void *user_data)
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::@322005145130211163057315230271062050320025262277 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)