9#define DNA_DEPRECATED_ALLOW
11#include <fmt/format.h>
16#define DNA_GENFILE_VERSIONING_MACROS
111 idprops_process(view_layer->id_properties, &view_layer->system_properties);
114 if (scene->ed !=
nullptr) {
116 idprops_process(strip->prop, &strip->system_properties);
137 auto process_bone_recursive = [](
const auto &process_bone_recursive,
Bone *bone) ->
void {
140 process_bone_recursive(process_bone_recursive, bone_it);
144 process_bone_recursive(process_bone_recursive, bone_it);
164 auto process_bone_recursive = [](
const auto &process_bone_recursive,
Bone *bone) ->
void {
167 if (bone->system_properties ==
nullptr) {
171 process_bone_recursive(process_bone_recursive, bone_it);
176 process_bone_recursive(process_bone_recursive, bone_child_it);
185 if (layer.name ==
name) {
196 if (!old_seam_layer) {
202 names.
add(layer.name);
207 names.
add(layer.name);
212 names.
add(layer.name);
217 names.
add(layer.name);
221 names.
add(vertex_group->name);
240 brush->unprojected_size *= 2.0f;
243 auto apply_to_paint = [&](
Paint *paint) {
244 if (paint ==
nullptr) {
254 scene->toolsettings->unified_paint_settings.size *= 2;
255 scene->toolsettings->unified_paint_settings.unprojected_size *= 2.0f;
256 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->vpaint));
257 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->wpaint));
258 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->sculpt));
259 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->gp_paint));
260 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->gp_vertexpaint));
261 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->gp_sculptpaint));
262 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->gp_weightpaint));
263 apply_to_paint(
reinterpret_cast<Paint *
>(scene->toolsettings->curves_sculpt));
264 apply_to_paint(
reinterpret_cast<Paint *
>(&scene->toolsettings->imapaint));
309 switch (node->type_legacy) {
315 node->storage = storage;
322 STRNCPY_UTF8(node->idname,
"FunctionNodeSeparateColor");
324 node->storage = storage;
375 switch (node->type_legacy) {
380 STRNCPY_UTF8(node->idname,
"CompositorNodeCombineColor");
381 node->storage = storage;
388 STRNCPY_UTF8(node->idname,
"CompositorNodeCombineColor");
389 node->storage = storage;
397 STRNCPY_UTF8(node->idname,
"CompositorNodeCombineColor");
398 node->storage = storage;
405 STRNCPY_UTF8(node->idname,
"CompositorNodeCombineColor");
406 node->storage = storage;
413 STRNCPY_UTF8(node->idname,
"CompositorNodeSeparateColor");
414 node->storage = storage;
421 STRNCPY_UTF8(node->idname,
"CompositorNodeSeparateColor");
422 node->storage = storage;
430 STRNCPY_UTF8(node->idname,
"CompositorNodeSeparateColor");
431 node->storage = storage;
438 STRNCPY_UTF8(node->idname,
"CompositorNodeSeparateColor");
439 node->storage = storage;
449 switch (node->type_legacy) {
487 switch (node->type_legacy) {
493 node->storage = storage;
501 node->storage = storage;
509 node->storage = storage;
517 node->storage = storage;
551 bool is_normal_ontput_needed =
false;
552 bool is_dot_output_used =
false;
554 if (link->tosock == normal_input) {
555 normal_input_link = link;
558 if (link->fromsock == normal_output) {
559 is_normal_ontput_needed =
true;
562 if (link->fromsock == dot_output) {
563 is_dot_output_used =
true;
568 if (!is_dot_output_used) {
574 nullptr, *node_tree,
"ShaderNodeVectorMath");
582 *dot_product_node,
SOCK_IN,
"Vector");
584 *dot_product_node,
SOCK_IN,
"Vector_001");
586 *dot_product_node,
SOCK_OUT,
"Value");
591 if (normal_input_link) {
596 *dot_product_a_input);
606 normalized_node_normal);
609 if (link->fromsock != dot_output) {
614 *node_tree, *dot_product_node, *dot_product_output, *link->tonode, *link->tosock);
620 if (!is_normal_ontput_needed) {
643 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Resolution Mode");
651 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Quad Method");
656 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"N-gon Method");
668 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Resolution Mode");
678 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Operation");
739 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Resolution Mode");
750 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
760 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Pattern Mode");
770 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
780 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Scale Mode");
798 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"UV Smooth");
803 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Boundary Smooth");
830 if (scene->ed !=
nullptr) {
832 if (strip->type == STRIP_TYPE_TEXT && strip->effectdata != nullptr) {
833 TextVars *data = static_cast<TextVars *>(strip->effectdata);
834 if (data->text_ptr == nullptr) {
835 data->text_ptr = BLI_strdup(data->text_legacy);
836 data->text_len_bytes = strlen(data->text_ptr);
861 if (paint ==
nullptr) {
875 copy_v3_v3(ups.secondary_rgb, scene_ups.secondary_rgb);
905 if (link->tosock == factor_input) {
908 else if (link->tosock == b_input) {
914 if (!factor_link && !b_link) {
965 *separate_color_node,
SOCK_IN,
"Image");
967 *separate_color_node,
SOCK_OUT,
"Alpha");
970 *node_tree, *b_link->
fromnode, *b_link->
fromsock, *separate_color_node, *image_input);
972 *node_tree, *separate_color_node, *alpha_output, *multiply_node, *multiply_input_b);
993 const float offset = texture_mapping.
loc[0];
994 const float size = texture_mapping.
size[0];
995 const float min = texture_mapping.
min[0];
996 const float max = texture_mapping.
max[0];
1003 if (link->tosock == value_input) {
1017 const float mapped_value = (value + offset) *
size;
1024 *node_tree, value_node,
SOCK_OUT,
"NodeSocketFloat",
"Value");
1026 value_node.
parent = frame;
1034 if (link->fromnode != node) {
1079 multiply_node.
parent = frame;
1086 *node_tree, multiply_node,
SOCK_IN,
"NodeSocketFloat",
"Value");
1088 *node_tree, multiply_node,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
1092 *node_tree, multiply_node,
SOCK_OUT,
"NodeSocketFloat",
"Value");
1100 bNode *final_node = &multiply_node;
1113 *node_tree, max_node,
SOCK_IN,
"NodeSocketFloat",
"Value");
1115 *node_tree, max_node,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
1118 *node_tree, max_node,
SOCK_OUT,
"NodeSocketFloat",
"Value");
1126 final_node = &max_node;
1127 final_output = &max_output;
1140 *node_tree, min_node,
SOCK_IN,
"NodeSocketFloat",
"Value");
1142 *node_tree, min_node,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
1145 *node_tree, min_node,
SOCK_OUT,
"NodeSocketFloat",
"Value");
1153 final_node = &min_node;
1154 final_output = &min_output;
1159 if (link->fromnode != node) {
1181 switch (node->type_legacy) {
1220 data->clamp = node->custom1;
1223 node->storage =
data;
1241 data->clamp_factor = 0;
1243 data->blend_type = node->custom1;
1244 node->storage =
data;
1283 char escaped_node_name[
sizeof(node->name) * 2 + 1];
1284 BLI_str_escape(escaped_node_name, node->name,
sizeof(escaped_node_name));
1285 const std::string rna_path_prefix = fmt::format(
"nodes[\"{}\"].inputs", escaped_node_name);
1287 switch (node->type_legacy) {
1294 bmain,
id, rna_path_prefix.c_str(),
nullptr,
nullptr, 0, 1,
false);
1303 bmain,
id, rna_path_prefix.c_str(),
nullptr,
nullptr, 1, 6,
false);
1305 bmain,
id, rna_path_prefix.c_str(),
nullptr,
nullptr, 2, 7,
false);
1322 if (!rotation_input) {
1328 if (!position_input) {
1333 constexpr int CMP_NODE_SPLIT_HORIZONTAL = 0;
1334 constexpr int CMP_NODE_SPLIT_VERTICAL = 1;
1337 case CMP_NODE_SPLIT_HORIZONTAL: {
1346 case CMP_NODE_SPLIT_VERTICAL: {
1362 bool found_incompatible_cache =
false;
1363 if (
ELEM(pid->cache->compression,
1368 found_incompatible_cache =
true;
1372 found_incompatible_cache =
true;
1375 if (!found_incompatible_cache) {
1379 std::string cache_type;
1380 switch (pid->type) {
1382 cache_type =
RPT_(
"Softbody");
1385 cache_type =
RPT_(
"Particle");
1388 cache_type =
RPT_(
"Cloth");
1391 cache_type =
RPT_(
"Smoke Domain");
1394 cache_type =
RPT_(
"Smoke");
1397 cache_type =
RPT_(
"Dynamic Paint");
1401 cache_type =
RPT_(
"Rigidbody");
1407 RPT_(
"%s Cache in object %s can not be read because it uses an "
1408 "outdated compression method. You need to delete the caches and re-bake."),
1410 pid->owner_id->name + 2);
1429 float old_hsv_jitter[3] = {
1478 *glare_node,
SOCK_IN,
"Highlights Threshold");
1494 if (link->tosock == old_image_input) {
1496 node_tree, *link->fromnode, *link->fromsock, *glare_node, *image_input);
1501 if (link->tosock == old_source_input) {
1503 node_tree, *link->fromnode, *link->fromsock, *glare_node, *source_input);
1508 if (link->tosock == old_length_input) {
1514 if (link->fromsock == old_image_output) {
1543 if (link->tosock == old_image_input) {
1560 node_tree, *image_link->
fromnode, *image_link->
fromsock, *group_output_node, *image_input);
1572 if (node.
storage ==
nullptr) {
1611 const std::string identifier =
"Item_" + std::to_string(item_data->
identifier);
1616 input->storage =
nullptr;
1639 if (world->use_nodes) {
1646 if (ntree ==
nullptr) {
1649 bmain, &world->
id,
"World Node Tree Versioning",
"ShaderNodeTree");
1652 bNode *old_output =
nullptr;
1662 *ntree, new_output,
SOCK_IN,
"NodeSocketShader",
"Surface");
1668 *ntree, background,
SOCK_OUT,
"NodeSocketShader",
"Background");
1670 *ntree, background,
SOCK_IN,
"NodeSocketColor",
"Color");
1672 *ntree, background,
SOCK_IN,
"NodeSocketFloat",
"Strength");
1674 *ntree, background,
SOCK_IN,
"NodeSocketFloat",
"Weight");
1678 *ntree, background, background_color_output, new_output, output_surface_input);
1684 rgba->
value[3] = 1.0f;
1687 if (old_output !=
nullptr) {
1699 background.
parent = frame;
1700 new_output.
parent = frame;
1737 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Type");
1742 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Falloff");
1787 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Prefilter");
1790 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Quality");
1802 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1803 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1805 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1808 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1820 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1821 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1823 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1826 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1838 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1839 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1841 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1844 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1856 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1857 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1859 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1862 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1873 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Type");
1876 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Frame Type");
1881 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1882 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1884 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1887 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1899 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1900 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1902 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1905 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1917 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1918 interpolation_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.interpolation;
1920 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension X");
1923 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Extension Y");
1934 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Interpolation");
1945 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Operation");
1956 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Operation");
1967 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Mode");
1970 ntree, node,
SOCK_IN,
"NodeSocketInt",
"Frame");
1982 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Feather Falloff");
1984 storage.feather_falloff;
1994 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Size Source");
2005 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Type");
2017 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Type");
2020 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Quality");
2031 if (node->storage) {
2034 switch (node->type_legacy) {
2061 if (material->use_nodes) {
2068 if (ntree ==
nullptr) {
2071 bmain, &material->
id,
"Material Node Tree Versioning",
"ShaderNodeTree");
2074 bNode *old_output =
nullptr;
2090 *ntree, new_output_eevee,
SOCK_IN,
"NodeSocketShader",
"Surface");
2104 shader_eevee,
SOCK_IN,
"Base Color");
2106 shader_eevee,
SOCK_IN,
"Specular IOR Level");
2108 shader_eevee,
SOCK_IN,
"Metallic");
2110 shader_eevee,
SOCK_IN,
"Roughness");
2113 *ntree, shader_eevee, shader_bsdf_output, new_output_eevee, output_surface_input);
2116 rgba->
value[0] = material->
r;
2117 rgba->
value[1] = material->
g;
2118 rgba->
value[2] = material->
b;
2119 rgba->
value[3] = material->
a;
2124 if (old_output !=
nullptr) {
2134 shader_eevee.
parent = frame;
2135 new_output_eevee.
parent = frame;
2142 *ntree, new_output_cycles,
SOCK_IN,
"NodeSocketShader",
"Surface");
2145 *ntree, new_output_cycles,
SOCK_IN,
"NodeSocketVector",
"Displacement");
2156 shader_cycles,
SOCK_IN,
"Color");
2159 *ntree, shader_cycles, shader_bsdf_output, new_output_cycles, output_surface_input);
2162 rgba->
value[0] = material->
r;
2163 rgba->
value[1] = material->
g;
2164 rgba->
value[2] = material->
b;
2165 rgba->
value[3] = material->
a;
2167 if (old_output !=
nullptr) {
2175 shader_cycles.
parent = frame;
2176 new_output_cycles.
parent = frame;
2199 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Color Space");
2202 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"RGB Key Channel");
2205 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"HSV Key Channel");
2208 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"YUV Key Channel");
2211 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"YCbCr Key Channel");
2215 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Limit Method");
2218 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"RGB Limit Channel");
2219 rgb_limit_channel_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.channel -
2222 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"HSV Limit Channel");
2223 hsv_limit_channel_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.channel -
2226 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"YUV Limit Channel");
2227 yuv_limit_channel_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.channel -
2230 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"YCbCr Limit Channel");
2231 ycc_limit_channel_socket.default_value_typed<
bNodeSocketValueMenu>()->value = storage.channel -
2263 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Color Space");
2274 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Spill Channel");
2277 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Limit Method");
2282 ntree, node,
SOCK_IN,
"NodeSocketMenu",
"Limit Channel");
2293 ntree, node,
SOCK_IN,
"NodeSocketBool",
"Image Edges");
2296 ntree, node,
SOCK_IN,
"NodeSocketBool",
"Only Inside Outer");
2309 if (input_sockets_num == storage->
items_num + 1) {
2342 if (link->tosock == displacement_input) {
2343 displacement_link = link;
2345 if (link->tosock == x_scale_input) {
2346 x_scale_link = link;
2348 if (link->tosock == y_scale_input) {
2349 y_scale_link = link;
2360 *multiply_node,
SOCK_IN,
"Vector");
2362 *multiply_node,
SOCK_IN,
"Vector_001");
2364 *multiply_node,
SOCK_OUT,
"Vector");
2368 if (displacement_link) {
2389 node_tree, *combine_node, *combine_output, *multiply_node, *multiply_b_input);
2427 if (link->tosock == size_input) {
2430 if (link->tosock == image_input) {
2442 node_tree, multiply_node,
SOCK_IN,
"NodeSocketFloat",
"Value");
2444 node_tree, multiply_node,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
2446 node_tree, multiply_node,
SOCK_OUT,
"NodeSocketFloat",
"Value");
2452 node_tree, *size_link->
fromnode, *size_link->
fromsock, multiply_node, multiply_a_input);
2459 nullptr, node_tree,
"CompositorNodeRelativeToPixel");
2467 *relative_to_pixel_node,
SOCK_IN,
"Image");
2469 *relative_to_pixel_node,
SOCK_IN,
"Float Value");
2471 *relative_to_pixel_node,
SOCK_OUT,
"Float Value");
2474 *relative_to_pixel_node,
2475 *relative_to_pixel_value_output,
2484 *relative_to_pixel_node,
2485 *relative_to_pixel_image_input);
2507 if (strip->type == STRIP_TYPE_TRANSFORM_LEGACY && strip->effectdata != nullptr) {
2508 TransformVarsLegacy *tv = static_cast<TransformVarsLegacy *>(strip->effectdata);
2509 StripTransform *transform = strip->data->transform;
2510 blender::float2 offset(tv->xIni, tv->yIni);
2511 if (tv->percent == 1) {
2512 blender::float2 scene_resolution(scene->r.xsch, scene->r.ysch);
2513 offset *= scene_resolution;
2515 transform->xofs += offset.x;
2516 transform->yofs += offset.y;
2517 transform->scale_x *= tv->ScalexIni;
2518 transform->scale_y *= tv->ScaleyIni;
2519 transform->rotation += tv->rotIni;
2520 blender::seq::EffectHandle sh = blender::seq::strip_effect_handle_get(strip);
2521 sh.free(strip, true);
2522 strip->type = STRIP_TYPE_GAUSSIAN_BLUR;
2523 sh = blender::seq::strip_effect_handle_get(strip);
2525 GaussianBlurVars *gv = static_cast<GaussianBlurVars *>(strip->effectdata);
2526 gv->size_x = gv->size_y = 0.0f;
2527 blender::seq::edit_strip_name_set(scene, strip,
"Transform Placeholder (Migrated)");
2528 blender::seq::ensure_unique_name(strip, scene);
2547 if (link->tosock == image_input) {
2548 image_input_link = link;
2550 if (link->tosock == type_input) {
2551 type_input_link = link;
2555 if (type_input_link || !type_input ||
2568 *inverse_gamma_node,
SOCK_IN,
"Color");
2572 *inverse_gamma_node,
SOCK_OUT,
"Color");
2575 *inverse_gamma_node,
SOCK_IN,
"Gamma");
2579 node_tree, *inverse_gamma_node, *inverse_gamma_color_output, node, *image_input);
2580 if (image_input_link) {
2584 *inverse_gamma_node,
2585 *inverse_gamma_color_input);
2601 if (link->fromsock != image_output) {
2606 node_tree, *gamma_node, *gamma_color_output, *link->tonode, *link->tosock);
2616 constexpr char const *hide_prop_prefix =
"bones[";
2617 constexpr char const *hide_prop_suffix =
"\"].hide";
2622 int quoted_bone_name_start = 0;
2623 int quoted_bone_name_end = 0;
2625 fcurve->rna_path, hide_prop_prefix, "ed_bone_name_start, "ed_bone_name_end);
2626 if (is_prefix_found &&
STREQ(fcurve->rna_path + quoted_bone_name_end, hide_prop_suffix)) {
2627 drivers_to_fix.
append(fcurve);
2637 for (
FCurve *original : drivers_to_fix) {
2642 copy->rna_path = fixed_path;
2647 for (
FCurve *original : drivers_to_fix) {
2713 if (object->type !=
OB_ARMATURE || !object->data) {
2746 if (scene->
ed !=
nullptr) {
2757 if (scene->ed !=
nullptr) {
2766 if (!scene->toolsettings) {
2769 scene->toolsettings->fix_to_cam_flag = default_flags;
2827 if ((socket->
flag & in_and_out) != in_and_out) {
2855 new_sockets.
extend(old_sockets);
2877 socket_to_node.
add(socket, node);
2880 socket_to_node.
add(socket, node);
2885 bNode *to_node = socket_to_node.
lookup(link->tosock);
2886 if (to_node != link->tonode) {
2887 link->tonode = to_node;
2890 bNode *from_node = socket_to_node.
lookup(link->fromsock);
2891 if (from_node != link->fromnode) {
2892 link->fromnode = from_node;
2898 "Repairing invalid state in node link from %s:%s to %s:%s",
2899 link->fromnode->name,
2900 link->fromsock->identifier,
2902 link->tosock->identifier);
2914 if (!last_meta_stack) {
2924 bool experimental_features =
false;
2933 bool use_adaptive_subdivision =
false;
2934 float dicing_rate = 1.0f;
2938 if (experimental_features) {
2940 idprop,
"use_adaptive_subdivision",
false);
2952 if (use_adaptive_subdivision) {
2978 bool is_factor_output_linked =
false;
2979 bool is_color_output_linked =
false;
2983 if (link->fromsock == factor_output) {
2984 is_factor_output_linked =
true;
2986 else if (link->fromsock == color_output) {
2987 is_color_output_linked =
true;
2989 else if (link->tosock == vector_input) {
2990 vector_input_link = link;
2994 if (!is_factor_output_linked && !is_color_output_linked) {
2999 bNode *gradient_node =
nullptr;
3004 *node_tree, separate,
SOCK_IN,
"NodeSocketVector",
"Vector");
3006 *node_tree, separate,
SOCK_OUT,
"NodeSocketFloat",
"X");
3008 *node_tree, separate,
SOCK_OUT,
"NodeSocketFloat",
"Y");
3013 switch (
data->gradient_type) {
3016 gradient_node = &separate;
3017 gradient_socket = &separate_x_output;
3024 *node_tree,
max,
SOCK_IN,
"NodeSocketFloat",
"Value");
3026 *node_tree,
max,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
3030 *node_tree,
max,
SOCK_OUT,
"NodeSocketFloat",
"Value");
3043 *node_tree, multiply,
SOCK_IN,
"NodeSocketFloat",
"Value");
3045 *node_tree, multiply,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
3049 *node_tree, multiply,
SOCK_OUT,
"NodeSocketFloat",
"Value");
3051 multiply.location[0] =
max.location[0] + 20.0f;
3052 multiply.location[1] =
max.location[1];
3058 gradient_node = &multiply;
3059 gradient_socket = &multiply_output;
3066 *node_tree,
add,
SOCK_IN,
"NodeSocketFloat",
"Value");
3068 *node_tree,
add,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
3072 *node_tree,
add,
SOCK_OUT,
"NodeSocketFloat",
"Value");
3083 *node_tree, multiply,
SOCK_IN,
"NodeSocketFloat",
"Value");
3085 *node_tree, multiply,
SOCK_IN,
"NodeSocketFloat",
"Value_001");
3089 *node_tree, multiply,
SOCK_OUT,
"NodeSocketFloat",
"Value");
3101 gradient_node = &multiply;
3102 gradient_socket = &multiply_output;
3107 if (is_factor_output_linked) {
3110 if (link->fromsock == factor_output) {
3112 *node_tree, *gradient_node, *gradient_socket, *link->tonode, *link->tosock);
3118 if (is_color_output_linked) {
3121 *node_tree, combine,
SOCK_IN,
"NodeSocketFloat",
"Red");
3123 *node_tree, combine,
SOCK_IN,
"NodeSocketFloat",
"Green");
3125 *node_tree, combine,
SOCK_IN,
"NodeSocketFloat",
"Blue");
3127 *node_tree, combine,
SOCK_IN,
"NodeSocketFloat",
"Alpha");
3130 *node_tree, combine,
SOCK_OUT,
"NodeSocketColor",
"Color");
3146 if (link->fromsock == color_output) {
3152 gradient_node = &combine;
3153 gradient_socket = &combine_output;
3156 if (vector_input_link) {
3169 *node_tree, position,
SOCK_OUT,
"NodeSocketVector",
"Position");
3210 const int uv_select_island = 1 << 3;
3229 if (node->storage !=
nullptr) {
3234 node->storage =
data;
3243 view_layer->eevee.ambient_occlusion_distance = scene->eevee.gtao_distance;
3286 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
3290 if (new_footer ==
nullptr) {
3375 if (node->storage ==
nullptr) {
3380 switch (
data->wrap_axis) {
3405 mesh->radial_symmetry[0] = 1;
3406 mesh->radial_symmetry[1] = 1;
3407 mesh->radial_symmetry[2] = 1;
3417 for (
const int i :
IndexRange(grease_pencil->drawing_array_num)) {
3436 if (node->storage ==
nullptr) {
3456 if (node->storage !=
nullptr) {
3460 data->interpolation = node->custom1;
3463 node->storage =
data;
3501 else if (
STREQ(node->idname,
"FunctionNodeMatchString")) {
3514 if (
ed !=
nullptr) {
3516 LISTBASE_FOREACH (StripModifierData *, smd, &strip->modifiers) {
3517 seq::modifier_persistent_uid_init(*strip, *smd);
3527 if (
brush->gpencil_settings) {
3639 if (node->storage !=
nullptr) {
3643 data->interpolation = node->custom1;
3646 node->storage =
data;
3661 if (node->storage ==
nullptr) {
3681 if (node->storage !=
nullptr) {
3685 data->interpolation = node->custom2;
3688 node->storage =
data;
3702 if (node->storage !=
nullptr) {
3706 data->interpolation = node->custom1;
3709 node->storage =
data;
3737 if (lmd->
radius != 0.0f) {
3766 scene->r.bake.type = scene->r.bake_mode;
3768 scene->r.bake.margin_type = scene->r.bake_margin_type;
3769 scene->r.bake.margin = scene->r.bake_margin;
3801 if (
paint !=
nullptr) {
3910 scene->toolsettings->uvsculpt.size *= 2;
3916 if (
brush->curve_size ==
nullptr) {
3919 if (
brush->curve_strength ==
nullptr) {
3922 if (
brush->curve_jitter ==
nullptr) {
3939 if (scene->ed !=
nullptr) {
3942 seq::modifier_set_active(strip,
3943 static_cast<StripModifierData *>(strip->modifiers.first));
3944 LISTBASE_FOREACH (StripModifierData *, smd, &strip->modifiers) {
3945 smd->layout_panel_open_flag |= UI_PANEL_DATA_EXPAND_ROOT;
4017 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
4021 if (new_sidebar !=
nullptr) {
4039 if (tex->sky_model == 0) {
4042 if (tex->sky_model == 1) {
4105 if (!DNA_struct_exists(fd->filesdna,
"SpaceClipOverlay")) {
4126 float default_col[4] = {0.5f, 0.5f, 0.5f, 1.0f};
4127 copy_v4_v4(camera->composition_guide_color, default_col);
4139 if (!
STREQ(socket.socket_type,
"NodeSocketMenu")) {
4153 UvSculpt &uvsculpt = scene->toolsettings->uvsculpt;
4155 uvsculpt.
size = 100;
4167 wm->xr.session_settings.fly_speed = 3.0f;
4173 scene->r.time_jump_delta = 1.0f;
4174 scene->r.time_jump_unit = 1;
4193 if (!DNA_struct_exists(fd->filesdna,
"SpaceActionOverlays")) {
4262 mesh->mpoly =
nullptr;
4263 mesh->mloop =
nullptr;
4264 mesh->mvert =
nullptr;
4265 mesh->medge =
nullptr;
4266 mesh->dvert =
nullptr;
4267 mesh->mtface =
nullptr;
4268 mesh->tface =
nullptr;
4269 mesh->mcol =
nullptr;
4270 mesh->mface =
nullptr;
4282 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase :
4288 "Asset shelf for compositing (versioning)",
4296 "Asset shelf header for compositing (versioning)",
4310 "NodeClosureOutput",
4311 "GeometryNodeForeachGeometryElementInput",
4312 "GeometryNodeForeachGeometryElementOutput",
4313 "GeometryNodeRepeatInput",
4314 "GeometryNodeRepeatOutput",
4315 "GeometryNodeSimulationInput",
4316 "GeometryNodeSimulationOutput",
4317 "GeometryNodeViewer",
4320 "ShaderNodeOutputAOV",
4321 "ShaderNodeOutputLight",
4322 "ShaderNodeOutputLineStyle",
4323 "ShaderNodeOutputMaterial",
4324 "ShaderNodeOutputWorld",
4325 "TextureNodeOutput",
4326 "TextureNodeViewer"};
4329 if (no_muting_nodes.
contains(node->idname)) {
4342 LISTBASE_FOREACH (StripModifierData *, md, &strip->modifiers) {
4343 md->ui_expand_flag = md->layout_panel_open_flag & UI_PANEL_DATA_EXPAND_ROOT;
void AS_asset_library_import_method_ensure_valid(Main &bmain)
AnimData * BKE_animdata_ensure_id(ID *id)
AnimData * BKE_animdata_from_id(const ID *id)
void BKE_animdata_fix_paths_rename_all_ex(struct Main *bmain, struct ID *ref_id, const char *prefix, const char *oldName, const char *newName, int oldSubscript, int newSubscript, bool verify_paths)
void BKE_pose_rebuild(Main *bmain, Object *ob, bArmature *arm, bool do_id_user)
Low-level operations for curves.
FCurve * BKE_fcurve_copy(const FCurve *fcu)
void BKE_fcurve_free(FCurve *fcu)
Low-level operations for grease pencil.
IDProperty * IDP_CopyProperty_ex(const IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
@ LIB_ID_CREATE_NO_USER_REFCOUNT
#define FOREACH_MAIN_ID_END
#define MAIN_VERSION_FILE_ATLEAST(main, ver, subver)
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
#define FOREACH_NODETREE_END
#define FOREACH_NODETREE_BEGIN(bmain, _nodetree, _id)
#define GEO_NODE_MERGE_BY_DISTANCE
#define GEO_NODE_TRIANGULATE
#define CMP_NODE_PREMULKEY
#define SH_NODE_COMBINE_COLOR
#define NODE_EVALUATE_CLOSURE
#define GEO_NODE_SUBDIVISION_SURFACE
#define SH_NODE_TEX_GRADIENT
#define SH_NODE_COMBRGB_LEGACY
#define CMP_NODE_MATH_DEPRECATED
#define CMP_NODE_SEPHSVA_LEGACY
#define CMP_NODE_VALUE_DEPRECATED
#define CMP_NODE_COLOR_SPILL
#define CMP_NODE_CORNERPIN
#define GEO_NODE_MESH_TO_VOLUME
#define CMP_NODE_MASK_ELLIPSE
#define CMP_NODE_DISPLACE
#define CMP_NODE_COMBYCCA_LEGACY
#define SH_NODE_BSDF_PRINCIPLED
#define CMP_NODE_SEPRGBA_LEGACY
#define CMP_NODE_SEPARATE_COLOR
#define CMP_NODE_TRANSLATE
#define GEO_NODE_UV_PACK_ISLANDS
#define CMP_NODE_MOVIEDISTORTION
#define SH_NODE_SEPARATE_COLOR
#define CMP_NODE_MAP_RANGE_DEPRECATED
#define CMP_NODE_COLORBALANCE
#define SH_NODE_MAP_RANGE
#define GEO_NODE_REMOVE_ATTRIBUTE
#define TEX_NODE_DECOMPOSE_LEGACY
#define GEO_NODE_UV_UNWRAP
#define SH_NODE_SEPRGB_LEGACY
#define CMP_NODE_COMBYUVA_LEGACY
#define CMP_NODE_KUWAHARA
#define SH_NODE_CURVE_VEC
#define CMP_NODE_ALPHAOVER
#define CMP_NODE_MAP_VALUE_DEPRECATED
#define CMP_NODE_SEPYUVA_LEGACY
#define TEX_NODE_COMBINE_COLOR
#define CMP_NODE_COMBHSVA_LEGACY
#define GEO_NODE_TRANSFORM_GEOMETRY
#define CMP_NODE_COMBINE_XYZ_DEPRECATED
#define FN_NODE_COMBINE_COLOR
#define TEX_NODE_SEPARATE_COLOR
#define CMP_NODE_TRANSFORM
#define CMP_NODE_DILATEERODE
#define SH_NODE_BSDF_DIFFUSE
#define CMP_NODE_BOKEHBLUR
#define SH_NODE_SEPHSV_LEGACY
#define TEX_NODE_COMPOSE_LEGACY
#define CMP_NODE_LENSDIST
#define GEO_NODE_SAMPLE_GRID
#define GEO_NODE_FILLET_CURVE
#define CMP_NODE_ZCOMBINE
#define NODE_CLOSURE_OUTPUT
#define CMP_NODE_TRACKPOS
#define CMP_NODE_SUNBEAMS_DEPRECATED
#define CMP_NODE_MIX_RGB_DEPRECATED
#define CMP_NODE_OUTPUT_FILE
#define CMP_NODE_COLORCORRECTION
#define CMP_NODE_SETALPHA
#define CMP_NODE_DOUBLEEDGEMASK
#define CMP_NODE_GAMMA_DEPRECATED
#define GEO_NODE_RESAMPLE_CURVE
#define CMP_NODE_VALTORGB_DEPRECATED
#define CMP_NODE_STABILIZE2D
#define CMP_NODE_COMBINE_COLOR
#define GEO_NODE_SCALE_ELEMENTS
#define NODE_COMBINE_BUNDLE
#define CMP_NODE_COMBRGBA_LEGACY
#define CMP_NODE_COMPOSITE_DEPRECATED
#define CMP_NODE_MASK_BOX
#define FN_NODE_SEPARATE_COLOR
#define GEO_NODE_FILL_CURVE
#define GEO_NODE_POINTS_TO_VOLUME
#define CMP_NODE_SEPYCCA_LEGACY
#define GEO_NODE_DISTRIBUTE_POINTS_IN_VOLUME
#define CMP_NODE_DIST_MATTE
#define NODE_SEPARATE_BUNDLE
#define NODE_CLOSURE_INPUT
#define CMP_NODE_SEPARATE_XYZ_DEPRECATED
#define CMP_NODE_VIEW_LEVELS
#define SH_NODE_COMBHSV_LEGACY
#define CMP_NODE_CURVE_VEC_DEPRECATED
#define GEO_NODE_VOLUME_TO_MESH
#define GEO_NODE_SET_CURVE_NORMAL
#define CMP_NODE_CHANNEL_MATTE
CurveMapping * BKE_paint_default_curve()
#define PTCACHE_TYPE_SMOKE_HIGHRES
void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct Scene *scene, int duplis)
#define PTCACHE_TYPE_CLOTH
#define PTCACHE_TYPE_DYNAMICPAINT
#define PTCACHE_TYPE_PARTICLES
#define PTCACHE_TYPE_SOFTBODY
#define PTCACHE_TYPE_SMOKE_DOMAIN
#define PTCACHE_TYPE_RIGIDBODY
#define BLI_assert_unreachable()
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
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)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
#define LISTBASE_FOREACH_BACKWARD_MUTABLE(type, var, list)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void srgb_to_linearrgb_v3_v3(float linear[3], const float srgb[3])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
void BLI_path_split_dir_file(const char *filepath, char *dir, size_t dir_maxncpy, char *file, size_t file_maxncpy) ATTR_NONNULL(1
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
bool BLI_str_quoted_substr_range(const char *__restrict str, const char *__restrict prefix, int *__restrict r_start, int *__restrict r_end) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
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 STRNCPY_UTF8(dst, src)
#define BLI_string_joinN(...)
size_t void BLI_uniquename_cb(blender::FunctionRef< bool(blender::StringRefNull)> unique_check, const char *defname, char delim, char *name, size_t name_maxncpy) ATTR_NONNULL(2
void BLI_string_replace_char(char *str, char src, char dst) ATTR_NONNULL(1)
void BLO_reportf_wrap(BlendFileReadReport *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
ID and Library types, which are fundamental for SDNA.
@ ADS_SHOW_SCENE_STRIP_FRAME_RANGE
@ ADS_OVERLAY_SHOW_OVERLAYS
#define DNA_struct_default_get(struct_name)
blenloader genfile private function prototypes
@ IMA_SHOW_SEQUENCER_SCENE
@ MA_BL_LIGHTPROBE_VOLUME_DOUBLE_SIDED
@ eModifierType_GreasePencilLineart
@ eSubsurfModifierFlag_UseAdaptiveSubdivision
@ SUBSURF_ADAPTIVE_SPACE_PIXEL
@ NODE_INTERFACE_SOCKET_OUTPUT
@ NODE_INTERFACE_SOCKET_INPUT
@ NODE_INTERFACE_SOCKET_OPTIONAL_LABEL
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_DYNAMIC
@ NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_AUTO
@ NODE_VECTOR_MATH_DOT_PRODUCT
@ NODE_VECTOR_MATH_MULTIPLY
@ CMP_NODE_INTERPOLATION_ANISOTROPIC
@ CMP_NODE_COMBSEP_COLOR_YCC
@ CMP_NODE_COMBSEP_COLOR_YUV
@ CMP_NODE_COMBSEP_COLOR_RGB
@ CMP_NODE_COMBSEP_COLOR_HSV
@ CMP_NODE_GLARE_QUALITY_HIGH
@ CMP_NODE_EXTENSION_MODE_CLIP
@ CMP_NODE_EXTENSION_MODE_REPEAT
@ CMP_NODE_RELATIVE_TO_PIXEL_DATA_TYPE_FLOAT
@ SHD_SKY_MULTIPLE_SCATTERING
@ SHD_SKY_SINGLE_SCATTERING
@ CMP_NODE_TRANSLATE_REPEAT_AXIS_XY
@ CMP_NODE_TRANSLATE_REPEAT_AXIS_Y
@ CMP_NODE_TRANSLATE_REPEAT_AXIS_NONE
@ CMP_NODE_TRANSLATE_REPEAT_AXIS_X
@ CMP_NODE_COLOR_BALANCE_LGG
@ CMP_NODE_RELATIVE_TO_PIXEL_REFERENCE_DIMENSION_GREATER
@ CMP_NODE_GLARE_SUN_BEAMS
@ PTCACHE_COMPRESS_LZO_DEPRECATED
@ PTCACHE_COMPRESS_LZMA_DEPRECATED
@ PTCACHE_COMPRESS_ZSTD_FILTERED
Types and defines for representing Rigid Body entities.
@ MEDIA_TYPE_MULTI_LAYER_IMAGE
@ R_IMF_IMTYPE_MULTILAYER
@ RGN_ALIGN_HIDE_WITH_PREV
@ RGN_TYPE_ASSET_SHELF_HEADER
@ FILE_BROWSE_MODE_ASSETS
Read Guarded memory(de)allocation.
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool add(const Key &key, const Value &value)
const Value & lookup(const Key &key) const
bool contains(const Key &key) const
void append(const T &value)
void extend(Span< T > array)
VectorData< T, Allocator > release()
const Value * lookup_ptr(const Key &key) const
Value & lookup_or_add_default(const Key &key)
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_freeN(void *vmemh)
static void add(blender::Map< std::string, std::string > &messages, Message &msg)
constexpr float LEGACY_RADIUS_CONVERSION_FACTOR
void mesh_sculpt_mask_to_generic(Mesh &mesh)
void mesh_freestyle_marks_to_generic(Mesh &mesh)
bNodeTree * node_tree_add_tree_embedded(Main *bmain, ID *owner_id, StringRefNull name, StringRefNull idname)
bNodeSocket * node_find_socket(bNode &node, eNodeSocketInOut in_out, StringRef identifier)
bNode * node_add_node(const bContext *C, bNodeTree &ntree, StringRef idname, std::optional< int > unique_identifier=std::nullopt)
void pointcloud_convert_customdata_to_storage(PointCloud &pointcloud)
void node_remove_link(bNodeTree *ntree, bNodeLink &link)
void node_tree_set_type(bNodeTree &ntree)
std::optional< eNodeSocketDatatype > custom_data_type_to_socket_type(eCustomDataType type)
bNode * node_add_static_node(const bContext *C, bNodeTree &ntree, int type)
void curves_convert_customdata_to_storage(CurvesGeometry &curves)
void grease_pencil_convert_customdata_to_storage(GreasePencil &grease_pencil)
bNodeSocket * node_add_static_socket(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out, int type, int subtype, StringRefNull identifier, StringRefNull name)
void mesh_custom_normals_to_generic(Mesh &mesh)
void mesh_uv_select_to_single_attribute(Mesh &mesh)
T min(const T &a, const T &b)
MatBase< T, NumCol, NumRow > normalize(const MatBase< T, NumCol, NumRow > &a)
T max(const T &a, const T &b)
void foreach_strip(ListBase *seqbase, ForEachFunc callback, void *user_data)
Editing * editing_get(const Scene *scene)
void meta_stack_set(const Scene *scene, Strip *dst)
MetaStack * meta_stack_active_get(const Editing *ed)
VecBase< float, 3 > float3
static void copy(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node)
const char * RE_engine_id_BLENDER_EEVEE_NEXT
const char * RE_engine_id_BLENDER_EEVEE
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
struct CurveMapping * curve_rand_value
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
struct CurveMapping * curve_rand_value
struct BrushGpencilSettings * gpencil_settings
FileSelectParams base_params
BlendFileReadReport * reports
IDProperty * system_properties
struct bNodeTree * nodetree
ListBase vertex_group_names
char override_node_format
char vector_socket_dimensions
NodeGeometryViewerItem * items
struct UnifiedPaintSettings unified_paint_settings
struct ToolSettings * toolsettings
struct bNodeTree * compositing_node_group
SpaceActionOverlays overlays
struct SpaceClipOverlay overlay
FileAssetSelectParams * asset_params
float adaptive_object_edge_length
float adaptive_pixel_size
struct CurveMapping * curve_rand_value
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
struct CurveMapping * curve_distance_falloff
int8_t curve_distance_falloff_preset
struct Scene * sequencer_scene
struct bNodeTree * nodetree
bNodeTreeInterfaceItem ** items_array
struct IDProperty * properties
bNodeTreeInterfaceItem item
char * default_attribute_name
bNodeTreeInterfacePanel root_panel
bNodeTreeInterface tree_interface
static bNode * add_node(bNodeTree *ntree, const int type, const blender::float2 loc)
static void do_version_distribute_points_in_volume_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_world_remove_use_nodes(Main *bmain, World *world)
static void do_version_texture_gradient_clamp(bNodeTree *node_tree)
static void do_version_rotate_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_normal_node_dot_product(bNodeTree *node_tree, bNode *node)
static void do_version_merge_by_distance_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_map_uv_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_match_string_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_filter_menus_to_inputs(bNodeTree &ntree, bNode &node)
void do_versions_after_linking_500(FileData *fd, Main *bmain)
static void do_version_sun_beams(bNodeTree &node_tree, bNode &node)
static void do_version_lens_distortion_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_volume_to_mesh_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_keying_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_uv_unwrap_options_to_inputs(bNodeTree &ntree, bNode &node)
static void sequencer_remove_listbase_pointers(Scene &scene)
static void do_version_composite_node_in_scene_tree(bNodeTree &node_tree, bNode &node)
static void update_brush_sizes(Main &bmain)
static void versioning_replace_legacy_combined_and_separate_color_nodes(bNodeTree *ntree)
static void do_version_glare_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_movie_distortion_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_displace_node_remove_xy_scale(bNodeTree &node_tree, bNode &node)
static void do_version_map_value_node(bNodeTree *node_tree, bNode *node)
static void do_version_remove_lzo_and_lzma_compression(FileData *fd, Object *object)
static void do_version_denoise_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void initialize_missing_closure_and_bundle_node_storage(bNodeTree &ntree)
static void do_version_mix_color_use_alpha(bNodeTree *node_tree, bNode *node)
static void remove_in_and_out_node_interface(bNodeTree &node_tree)
static void do_version_points_to_volume_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_levels_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_dilate_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_transform_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void sequencer_substitute_transform_effects(Scene *scene)
static void version_seq_text_from_legacy(Main *bmain)
static void do_version_color_balance_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_material_remove_use_nodes(Main *bmain, Material *material)
static void do_version_corner_pin_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_channel_matte_menus_to_inputs(bNodeTree &ntree, bNode &node)
void version_system_idprops_generate(Main *bmain)
static void do_version_adaptive_subdivision(Main *bmain)
static void do_version_convert_alpha_menus_to_inputs(bNodeTree &ntree, bNode &node)
void version_system_idprops_nodes_generate(Main *bmain)
static void for_each_mode_paint_settings(Scene &scene, blender::FunctionRef< void(Scene &scene, Paint *paint)> func)
static void do_version_tone_map_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_lift_gamma_gain_srgb_to_linear(bNodeTree &node_tree, bNode &node)
static void do_version_sample_grid_options_to_inputs(bNodeTree &ntree, bNode &node)
static void version_bone_hide_property_driver(AnimData *arm_adt, blender::Vector< Object * > &users)
static void do_version_convert_to_generic_nodes_after_linking(Main *bmain, bNodeTree *node_tree, ID *id)
static void do_version_mask_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void idprops_process(IDProperty *idprops, IDProperty **system_idprops)
static void do_version_transform_geometry_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_mesh_to_volume_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_displace_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void copy_unified_paint_settings(Scene &scene, Paint *paint)
static void do_version_subdivision_surface_options_to_inputs(bNodeTree &ntree, bNode &node)
static void repair_node_link_node_pointers(FileData &fd, bNodeTree &node_tree)
static bool window_has_sequence_editor_open(const wmWindow *win)
static void do_version_color_spill_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_remove_attribute_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_kuwahara_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_box_mask_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_fillet_curve_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_fill_curve_options_to_inputs(bNodeTree &ntree, bNode &node)
static CustomDataLayer * find_old_seam_layer(CustomData &custom_data, const blender::StringRef name)
static void update_format_media_type(ImageFormatData *format)
static void remove_in_and_out_node_panel_recursive(bNodeTreeInterfacePanel &panel)
static void do_version_stabilize_2d_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_scale_elements_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_raycast_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_scene_remove_use_nodes(Scene *scene)
static void do_version_triangulate_options_to_inputs(bNodeTree &ntree, bNode &node)
static void version_dynamic_viewer_node_items(bNodeTree &ntree)
static void do_version_split_node_rotation(bNodeTree *node_tree, bNode *node)
static void do_version_track_position_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void initialize_closure_input_structure_types(bNodeTree &ntree)
static void do_version_convert_gp_jitter_values(Brush *brush)
static void do_version_resample_curve_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_distance_matte_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_blur_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_uv_pack_islands_options_to_inputs(bNodeTree &ntree, bNode &node)
void version_system_idprops_children_bones_generate(Main *bmain)
static void do_version_set_curve_normal_options_to_inputs(bNodeTree &ntree, bNode &node)
void blo_do_versions_500(FileData *fd, Library *, Main *bmain)
static void do_version_scale_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_file_output_node(bNode &node)
static void do_version_convert_to_generic_nodes(bNodeTree *node_tree)
static void do_version_double_edge_mask_options_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_ellipse_mask_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_translate_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void do_version_bokeh_blur_pixel_size(bNodeTree &node_tree, bNode &node)
static void do_version_set_alpha_menus_to_inputs(bNodeTree &ntree, bNode &node)
static void rename_mesh_uv_seam_attribute(Mesh &mesh)
void version_node_remove(bNodeTree &ntree, bNode &node)
IDProperty * version_cycles_properties_from_ID(ID *id)
void version_node_tree_clear_interface(bNodeTree &ntree)
bNodeSocket & version_node_add_socket(bNodeTree &ntree, bNode &node, const eNodeSocketInOut in_out, const char *idname, const char *identifier)
void version_node_input_socket_name(bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
bNode & version_node_add_empty(bNodeTree &ntree, const char *idname)
void version_node_socket_name(bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
bool version_cycles_property_boolean(IDProperty *idprop, const char *name, bool default_value)
void version_socket_update_is_used(bNodeTree *ntree)
bNodeLink & version_node_add_link(bNodeTree &ntree, bNode &node_a, bNodeSocket &socket_a, bNode &node_b, bNodeSocket &socket_b)
float version_cycles_property_float(IDProperty *idprop, const char *name, float default_value)
bNodeTree * version_get_scene_compositor_node_tree(Main *bmain, Scene *scene)
ARegion * do_versions_add_region_if_not_found(ListBase *regionbase, int region_type, const char *, int link_after_region_type)
void version_node_output_socket_name(bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
Scene * WM_window_get_active_scene(const wmWindow *win)
WorkSpace * WM_window_get_active_workspace(const wmWindow *win)
bScreen * WM_window_get_active_screen(const wmWindow *win)