87 #include "RNA_prototypes.h"
120 bool driver_target_depends_on_time(
const DriverTarget *target)
129 bool driver_variable_depends_on_time(
const DriverVar *variable)
132 if (driver_target_depends_on_time(&variable->
targets[i])) {
139 bool driver_variables_depends_on_time(
const ListBase *variables)
142 if (driver_variable_depends_on_time(variable)) {
154 if (driver_variables_depends_on_time(&driver->
variables)) {
175 bool object_particles_depends_on_time(
Object *
object)
181 if (particle_system_depends_on_time(psys)) {
188 bool check_id_has_anim_component(
ID *
id)
191 if (adt ==
nullptr) {
197 bool check_id_has_driver_component(
ID *
id)
200 if (adt ==
nullptr) {
207 const char *subtarget,
209 const char *component_subdata,
210 RootPChanMap *root_map)
218 if (root_map->has_common_root(component_subdata, subtarget)) {
225 bool object_have_geometry_component(
const Object *
object)
257 "find_node component: Could not find ID %s\n",
258 (key.
id !=
nullptr) ? key.
id->
name :
"<null>");
269 if (op_node ==
nullptr) {
271 "find_node_operation: Failed for (%s, '%s')\n",
302 const char *description)
322 id_node->customdata_masks |= customdata_masks;
340 const char *description,
343 if (timesrc && node_to) {
349 "add_time_relation(%p = %s, %p = %s, %s) Failed\n",
351 (timesrc) ? timesrc->
identifier().c_str() :
"<None>",
353 (node_to) ? node_to->
identifier().c_str() :
"<None>",
368 const char *description,
371 if (node_from && node_to) {
377 "add_operation_relation(%p = %s, %p = %s, %s) Failed\n",
379 (node_from) ? node_from->
identifier().c_str() :
"<None>",
381 (node_to) ? node_to->
identifier().c_str() :
"<None>",
395 if (relation->ob !=
object) {
423 if (relation->ob !=
object) {
435 if ((relation->pd !=
nullptr) && (relation->pd->forcefield ==
PFIELD_TEXTURE) &&
436 (relation->pd->tex !=
nullptr)) {
442 if (relation->pd->forcefield ==
PFIELD_FLUIDFLOW && relation->pd->f_source) {
455 if (relation->psys) {
456 if (relation->ob !=
object) {
464 else if (relation->psys != psys) {
468 relation->psys->name);
618 if (from_layer_collection !=
nullptr) {
631 OperationKey object_transform_final_key(
object !=
nullptr ? &object->
id :
nullptr,
645 add_relation(object_transform_key, collection_geometry_key,
"Collection Geometry");
650 if (
find_node(object_geometry_key) !=
nullptr) {
651 add_relation(object_geometry_key, collection_geometry_key,
"Collection Geometry");
656 Collection *collection_instance = cob->ob->instance_collection;
657 if (collection_instance !=
nullptr) {
660 add_relation(collection_instance_key, collection_geometry_key,
"Collection Geometry");
668 add_relation(child_collection_geometry_key, collection_geometry_key,
"Collection Geometry");
671 if (
object !=
nullptr) {
674 add_relation(dupli_transform_key, object_transform_final_key,
"Dupligroup");
677 add_relation(dupli_transform_key, duplicator_key,
"Dupligroup");
680 ComponentKey dupli_geometry_component_key(&ob->id, dupli_geometry_component_type);
681 add_relation(dupli_geometry_component_key, duplicator_key,
"Dupligroup");
710 add_relation(init_transform_key, local_transform_key,
"Transform Init");
716 if (object->
parent !=
nullptr) {
722 add_relation(local_transform_key, parent_transform_key,
"ObLocal -> ObParent");
727 BuilderWalkUserData
data;
734 BuilderWalkUserData
data;
741 BuilderWalkUserData
data;
748 BuilderWalkUserData
data;
762 add_relation(base_op_key, constraint_key,
"ObBase-> Constraint Stack");
763 add_relation(constraint_key, final_transform_key,
"ObConstraints -> Done");
764 add_relation(constraint_key, ob_eval_key,
"Constraint -> Transform Eval");
766 ob_eval_key, object_transform_simulation_init_key,
"Transform Eval -> Simulation Init");
769 "Simulation -> Final Transform");
774 ob_eval_key, object_transform_simulation_init_key,
"Transform Eval -> Simulation Init");
777 "Simulation -> Final Transform");
795 (object->
pd->
tex !=
nullptr)) {
810 add_relation(final_transform_key, synchronize_key,
"Synchronize to Original");
820 add_relation(object_from_layer_entry_key, visibility_key,
"Object Visibility");
847 add_relation(view_layer_done_key, object_from_layer_entry_key,
"View Layer flags to Object");
864 add_relation(object_from_layer_entry_key, object_from_layer_exit_key,
"Object from Layer");
869 add_relation(object_from_layer_entry_key, object_flags_key,
"Base flags flush Entry");
870 add_relation(object_flags_key, object_from_layer_exit_key,
"Base flags flush Exit");
875 add_relation(object_from_layer_exit_key, synchronize_key,
"Synchronize to Original");
880 if (object->
data ==
nullptr) {
889 switch (object->
type) {
908 add_relation(transform_key, geometry_key,
"Text on Curve own Transform");
931 if (key !=
nullptr) {
939 if (materials_ptr !=
nullptr) {
951 add_relation(camera_parameters_key, object_parameters_key,
"Camera -> Object");
960 add_relation(lamp_parameters_key, object_parameters_key,
"Light -> Object");
969 add_relation(probe_key, object_key,
"LightProbe Update");
978 add_relation(speaker_key, object_key,
"Speaker Update");
984 ID *parent_id = &
object->parent->id;
991 add_relation(parent_transform_key, object_transform_key,
"Parent Armature Transform");
997 parent_transform_key, object_geometry_key,
"Parent Armature Transform -> Geometry");
998 add_relation(parent_pose_key, object_geometry_key,
"Parent Armature Pose -> Geometry");
1001 &object->
id, object_geometry_key,
"Virtual Armature Modifier");
1011 add_relation(parent_key, object_transform_key,
"Vertex Parent");
1023 add_relation(transform_key, object_transform_key,
"Vertex Parent TFM");
1033 add_relation(parent_bone_key, object_transform_key,
"Bone Parent");
1034 add_relation(parent_transform_key, object_transform_key,
"Armature Parent");
1044 add_relation(parent_key, object_transform_key,
"Lattice Deform Parent");
1045 add_relation(geom_key, object_transform_key,
"Lattice Deform Parent Geom");
1053 add_relation(parent_key, object_transform_key,
"Curve Follow Parent");
1055 add_relation(transform_key, object_transform_key,
"Curve Follow TFM");
1060 add_relation(parent_key, object_transform_key,
"Curve Parent");
1066 add_relation(parent_key, object_transform_key,
"Parent");
1079 add_relation(parent_geometry_key, object_transform_key,
"Parent");
1094 FLAG_TRANSFORM = (1 << 0),
1095 FLAG_GEOMETRY = (1 << 1),
1096 FLAG_ALL = (FLAG_TRANSFORM | FLAG_GEOMETRY),
1100 int handled_components = 0;
1108 flag = FLAG_TRANSFORM;
1111 add_relation(point_cache_key, transform_key,
"Point Cache -> Rigid Body");
1117 "Rigid Body Rebuild -> Point Cache Reset",
1121 flag = FLAG_GEOMETRY;
1123 add_relation(point_cache_key, geometry_key,
"Point Cache -> Geometry");
1127 handled_components |= flag;
1128 if (handled_components == FLAG_ALL) {
1140 "Transform Simulation -> Point Cache",
1144 "Geometry Init -> Point Cache",
1152 const char *component_subdata,
1165 ListBase targets = {
nullptr,
nullptr};
1167 if (cti ==
nullptr) {
1181 bool depends_on_camera =
false;
1185 depends_on_camera =
true;
1187 if (
data->depth_ob) {
1195 depends_on_camera =
true;
1197 if (depends_on_camera && scene_->
camera !=
nullptr) {
1204 add_relation(time_src_key, constraint_op_key,
"TimeSrc -> Animation");
1210 add_relation(time_src_key, constraint_op_key,
"TimeSrc -> Animation");
1219 if (ct->tar ==
nullptr) {
1233 else if ((ct->tar->type ==
OB_ARMATURE) && (ct->subtarget[0])) {
1236 opcode = bone_target_opcode(
1237 &ct->tar->id, ct->subtarget,
id, component_subdata, root_map);
1289 if (&ct->tar->id ==
id) {
1341 if (check_id_has_anim_component(
id)) {
1344 add_relation(animation_key, parameters_key,
"Animation -> Parameters");
1352 if (adt ==
nullptr) {
1355 if (adt->
action !=
nullptr) {
1365 add_relation(animation_entry_key, animation_eval_key,
"Init -> Eval");
1366 add_relation(animation_eval_key, animation_exit_key,
"Eval -> Exit");
1370 if (adt->
action !=
nullptr) {
1372 add_relation(action_key, adt_key,
"Action -> Animation");
1377 if (node_from ==
nullptr) {
1383 if (adt->
action !=
nullptr) {
1407 if (node_to ==
nullptr) {
1425 if (id_node_from != id_node_to) {
1429 "Animated CoW -> Animation",
1441 if (strip->act !=
nullptr) {
1445 add_relation(action_key, adt_key,
"Action -> Animation");
1449 else if (strip->strips.first !=
nullptr) {
1458 if (adt ==
nullptr) {
1466 fcu->rna_path ? fcu->rna_path :
"",
1474 add_relation(adt_key, driver_key,
"AnimData Before Drivers");
1482 bool has_image_animation =
false;
1485 if (
ntree !=
nullptr &&
1487 has_image_animation =
true;
1495 add_relation(time_src_key, image_animation_key,
"TimeSrc -> Image Animation");
1501 add_relation(material_update_key, image_animation_key,
"Material Update -> Image Animation");
1505 add_relation(world_update_key, image_animation_key,
"World Update -> Image Animation");
1509 add_relation(ntree_output_key, image_animation_key,
"NTree Output -> Image Animation");
1529 add_relation(animation_key, rigidbody_key,
"Animation -> Rigid Body");
1544 add_relation(time_src_key, animation_key,
"TimeSrc -> Animation");
1564 if (driver_depends_on_time(driver)) {
1566 add_relation(time_src_key, driver_key,
"TimeSrc -> Driver");
1573 const char *rna_path = fcu->
rna_path;
1574 if (rna_path ==
nullptr || rna_path[0] ==
'\0') {
1594 bool is_bone = id_ptr && property_entry_key.
ptr.
type == &RNA_Bone;
1604 if (bone ==
nullptr) {
1605 fprintf(stderr,
"Couldn't find armature bone name for driver path - '%s'\n", rna_path);
1610 const bool driver_targets_bbone =
STRPREFIX(prop_identifier,
"bbone_");
1620 if (object->
data != id_ptr || object->
pose ==
nullptr) {
1625 if (pchan ==
nullptr) {
1632 add_relation(driver_key, bone_key,
"Arm Bone -> Driver -> Bone");
1643 if (node_to !=
nullptr) {
1644 add_relation(driver_key, property_entry_key,
"Driver -> Driven Property");
1663 property_entry_key.
ptr,
1664 property_entry_key.
prop,
1667 add_relation(property_exit_key, parameters_key,
"Driven Property -> Properties");
1676 add_relation(driver_key, ntree_output_key,
"Drivers -> NTree Output");
1693 ID *target_id = dtar->id;
1694 if (target_id ==
nullptr) {
1699 Object *
object =
nullptr;
1701 object = (
Object *)target_id;
1705 (dtar->pchan_name[0])) {
1707 if (target_pchan ==
nullptr) {
1715 add_relation(variable_key, driver_key,
"Bone Target -> Driver");
1719 if (target_id ==
id) {
1726 add_relation(target_key, driver_key,
"Target -> Driver");
1728 else if (dtar->rna_path !=
nullptr && dtar->rna_path[0] !=
'\0') {
1737 add_relation(variable_exit_key, driver_key,
"RNA Target -> Driver");
1763 if (target_id != variable_exit_key.
ptr.
owner_id) {
1766 add_relation(target_id_key, driver_key,
"Target ID -> Driver");
1780 if (rna_path ==
"data" || rna_path.
startswith(
"data.")) {
1797 if (
id ==
nullptr || rna_path ==
nullptr) {
1807 if (prop ==
nullptr) {
1840 add_relation(parameters_entry_key, parameters_eval_key,
"Entry -> Eval");
1841 add_relation(parameters_eval_key, parameters_exit_key,
"Entry -> Exit");
1849 add_relation(geometry_key, dimensions_key,
"Geometry -> Dimensions");
1850 add_relation(transform_key, dimensions_key,
"Transform -> Dimensions");
1869 add_relation(parameters_key, world_key,
"World's parameters");
1888 add_relation(time_src_key, rb_init_key,
"TimeSrc -> Rigidbody Init");
1900 add_relation(effector_transform_key, rb_init_key,
"RigidBody Field");
1901 if (effector_relation->pd !=
nullptr) {
1902 const short shape = effector_relation->pd->shape;
1905 add_relation(effector_geometry_key, rb_init_key,
"RigidBody Field");
1908 (effector_relation->pd->tex !=
nullptr)) {
1910 add_relation(tex_key, rb_init_key,
"Force field Texture");
1915 if (rbw->
group !=
nullptr) {
1941 "Object Transform -> Rigidbody Sim Eval");
1951 "Object Geom Eval -> Rigidbody Sim Eval",
1965 add_relation(rb_simulate_key, rb_transform_copy_key,
"Rigidbody Sim Eval -> RBO Sync");
1970 object_transform_final_key,
1971 "Rigidbody Sync -> Transform Final");
2004 add_relation(particle_settings_key, eval_init_key,
"Particle Settings Change");
2010 add_relation(psys_key, obdata_ubereval_key,
"PSys -> UberEval");
2025 if (part->
boids !=
nullptr) {
2028 Object *ruleob =
nullptr;
2035 if (ruleob !=
nullptr) {
2045 if (
ELEM(particle_target->ob,
nullptr,
object)) {
2099 particle_settings_init_key, particle_settings_eval_key,
"Particle Settings Init Order");
2100 add_relation(particle_settings_reset_key, particle_settings_eval_key,
"Particle Settings Reset");
2103 if (mtex ==
nullptr || mtex->
tex ==
nullptr) {
2109 particle_settings_reset_key,
2110 "Particle Texture -> Particle Reset",
2112 add_relation(texture_key, particle_settings_eval_key,
"Particle Texture -> Particle Eval");
2117 add_relation(object_key, particle_settings_eval_key,
"Particle Texture Space");
2120 if (check_id_has_anim_component(&part->
id)) {
2122 add_relation(animation_key, particle_settings_eval_key,
"Particle Settings Animation");
2134 add_relation(dup_ob_key, psys_key,
"Particle Object Visualization");
2137 add_relation(obdata_ubereval_key, dup_geometry_key,
"Particle MBall Visualization");
2160 add_relation(key_block_key, geometry_key,
"Key Block Properties");
2161 add_relation(key_block_key, parameters_eval_key,
"Key Block Properties");
2195 add_relation(obdata_geom_key, geom_key,
"Object Geometry Base Data");
2218 add_relation(time_src_key, obdata_ubereval_key,
"Time Source -> Modifier");
2237 add_relation(time_src_key, obdata_ubereval_key,
"Time Source");
2255 add_relation(time_src_key, obdata_ubereval_key,
"Time Source");
2270 add_relation(geom_init_key, obdata_ubereval_key,
"Object Geometry UberEval");
2276 if (mom ==
object) {
2278 add_relation(mom_transform_key, mom_geom_key,
"Metaball Motherball Transform -> Geometry");
2282 add_relation(geom_key, mom_geom_key,
"Metaball Motherball");
2283 add_relation(transform_key, mom_geom_key,
"Metaball Motherball");
2293 if (object_particles_depends_on_time(
object)) {
2297 add_relation(time_key, obdata_ubereval_key,
"Legacy particle time");
2302 if (key !=
nullptr) {
2303 if (key->
adt !=
nullptr) {
2316 add_relation(final_geometry_key, synchronize_key,
"Synchronize to Original");
2322 add_relation(object_data_select_key, object_select_key,
"Data Selection -> Object Selection");
2341 if (key !=
nullptr) {
2347 add_relation(obdata_geom_eval_key, obdata_geom_done_key,
"ObData Geom Eval Done");
2351 add_relation(parameters_key, obdata_geom_eval_key,
"ObData Geom Params");
2362 if (cu->
bevobj !=
nullptr) {
2364 add_relation(bevob_geom_key, obdata_geom_eval_key,
"Curve Bevel Geometry");
2366 add_relation(bevob_key, obdata_geom_eval_key,
"Curve Bevel Transform");
2371 add_relation(taperob_key, obdata_geom_eval_key,
"Curve Taper");
2376 add_relation(textoncurve_geom_key, obdata_geom_eval_key,
"Text on Curve Geometry");
2378 add_relation(textoncurve_key, obdata_geom_eval_key,
"Text on Curve Transform");
2395 add_relation(time_key, geometry_key,
"GP Frame Change");
2400 for (
int i = 0; i < gpd->
totcol; i++) {
2402 if ((ma !=
nullptr) && (ma->
gp_style !=
nullptr)) {
2404 add_relation(material_key, geometry_key,
"Material -> GP Data");
2410 if (gpl->parent !=
nullptr) {
2413 if (gpl->partype ==
PARBONE) {
2419 add_relation(armature_key, gpd_geom_key,
"Armature Parent");
2423 add_relation(transform_key, gpd_geom_key,
"GPencil Parent Layer");
2430 Curves *curves_id =
reinterpret_cast<Curves *
>(obdata);
2431 if (curves_id->
surface !=
nullptr) {
2446 add_relation(time_key, geometry_key,
"Volume sequence time");
2489 if (
camera->dof.focus_object !=
nullptr) {
2493 add_relation(dof_ob_key, camera_parameters_key,
"Camera DOF");
2494 if (
camera->dof.focus_subtarget[0]) {
2497 camera->dof.focus_subtarget,
2499 add_relation(target_key, camera_parameters_key,
"Camera DOF subtarget");
2521 add_relation(lamp_parameters_key, shading_key,
"Light Shading Parameters");
2528 add_relation(ntree_key, shading_key,
"NTree->Light Parameters");
2539 if (
object !=
nullptr) {
2545 if (
image !=
nullptr) {
2551 if (collection !=
nullptr) {
2557 if (texture !=
nullptr) {
2571 if (
ntree ==
nullptr) {
2595 if (
id ==
nullptr) {
2599 if (id_type ==
ID_MA) {
2602 add_relation(material_key, ntree_output_key,
"Material -> Node");
2604 else if (id_type ==
ID_TE) {
2607 add_relation(texture_key, ntree_output_key,
"Texture -> Node");
2609 else if (id_type ==
ID_IM) {
2612 add_relation(image_key, ntree_output_key,
"Image -> Node");
2614 else if (id_type ==
ID_OB) {
2617 add_relation(object_transform_key, ntree_output_key,
"Object Transform -> Node");
2618 if (object_have_geometry_component(
reinterpret_cast<Object *
>(
id))) {
2620 add_relation(object_geometry_key, ntree_output_key,
"Object Geometry -> Node");
2623 else if (id_type ==
ID_SCE) {
2630 if (node_scene->
camera !=
nullptr) {
2634 else if (id_type ==
ID_TXT) {
2637 else if (id_type ==
ID_MSK) {
2640 add_relation(mask_key, ntree_output_key,
"Mask -> Node");
2642 else if (id_type ==
ID_MC) {
2645 add_relation(clip_key, ntree_output_key,
"Clip -> Node");
2647 else if (id_type ==
ID_VF) {
2650 add_relation(vfont_key, ntree_output_key,
"VFont -> Node");
2659 add_relation(group_output_key, ntree_output_key,
"Group Node");
2673 if (check_id_has_anim_component(&
ntree->
id)) {
2675 add_relation(animation_key, ntree_output_key,
"NTree Shading Parameters");
2696 add_relation(parameters_key, material_key,
"Material's parameters");
2703 add_relation(ntree_key, material_key,
"Material's NTree");
2710 for (
int i = 0; i < num_materials; i++) {
2738 add_relation(ntree_key, texture_key,
"Texture's NTree");
2744 if (texture->
ima !=
nullptr) {
2752 if (check_id_has_anim_component(&texture->
id)) {
2754 add_relation(animation_key, texture_key,
"Datablock Animation");
2759 add_relation(image_animation_key, texture_key,
"Datablock Image Animation");
2787 if (check_id_has_anim_component(&cache_file->
id)) {
2790 add_relation(animation_key, datablock_key,
"Datablock Animation");
2792 if (check_id_has_driver_component(&cache_file->
id)) {
2795 add_relation(animation_key, datablock_key,
"Drivers -> Cache Eval");
2803 add_relation(time_src_key, cache_update_key,
"TimeSrc -> Cache File Eval");
2823 add_relation(time_src_key, mask_animation_key,
"TimeSrc -> Mask Animation");
2826 add_relation(mask_animation_key, mask_eval_key,
"Mask Animation -> Mask Eval");
2830 for (
int i = 0; i < spline->tot_point; i++) {
2833 if (parent ==
nullptr || parent->
id ==
nullptr) {
2840 add_relation(movieclip_eval_key, mask_eval_key,
"Movie Clip -> Mask Eval");
2900 if (speaker->
sound !=
nullptr) {
2904 add_relation(sound_key, speaker_key,
"Sound -> Speaker");
2939 add_relation(time_src_key, simulation_eval_key,
"TimeSrc -> Simulation");
2943 add_relation(nodetree_key, simulation_eval_key,
"NodeTree -> Simulation", 0);
2956 cd->builder->build_idproperties(seq->
prop);
2957 if (seq->
sound !=
nullptr) {
2958 cd->builder->build_sound(seq->
sound);
2960 cd->builder->add_relation(sound_key, cd->sequencer_key,
"Sound -> Sequencer");
2961 cd->has_audio_strips =
true;
2963 if (seq->
scene !=
nullptr) {
2964 cd->builder->build_scene_parameters(seq->
scene);
2966 cd->has_audio_strips =
true;
2970 cd->builder->build_scene_sequencer(seq->
scene);
2972 cd->builder->add_relation(
2973 sequence_scene_audio_key, cd->sequencer_key,
"Sequence Scene Audio -> Sequencer");
2975 cd->builder->add_relation(
2976 sequence_scene_key, cd->sequencer_key,
"Sequence Scene -> Sequencer");
2979 cd->builder->build_scene_speakers(seq->
scene, sequence_view_layer);
3004 if (cb_data.has_audio_strips) {
3014 add_relation(scene_audio_entry_key, scene_audio_volume_key,
"Audio Entry -> Volume");
3015 add_relation(scene_audio_volume_key, scene_sound_eval_key,
"Audio Volume -> Sound");
3019 add_relation(scene_anim_key, scene_audio_volume_key,
"Animation -> Audio Volume");
3026 Object *
object = base->object;
3061 int relation_flag = 0;
3062 if (!flush_cow_changes) {
3068 add_relation(id_copy_on_write_key, owner_copy_on_write_key,
"Eval Order", relation_flag);
3073 if (
ntree ==
nullptr) {
3084 if (key ==
nullptr) {
3114 if (!comp_node->depends_on_cow()) {
3124 if (id_type ==
ID_SO) {
3146 if (op_entry !=
nullptr) {
3148 rel->
flag |= rel_flag;
3151 for (
OperationNode *op_node : comp_node->operations_map->values()) {
3152 if (op_node == op_entry) {
3155 if (op_node->inlinks.is_empty()) {
3157 rel->
flag |= rel_flag;
3160 bool has_same_comp_dependency =
false;
3161 for (
Relation *rel_current : op_node->inlinks) {
3167 has_same_comp_dependency =
true;
3171 if (!has_same_comp_dependency) {
3173 rel->
flag |= rel_flag;
3189 ID *object_data_id = (
ID *)object->
data;
3190 if (object_data_id !=
nullptr) {
3211 if (animation_data !=
nullptr) {
3212 if (animation_data->
action !=
nullptr) {
3226 void DepsgraphRelationBuilder::modifier_walk(
void *
user_data,
3231 BuilderWalkUserData *
data = (BuilderWalkUserData *)
user_data;
3233 if (
id ==
nullptr) {
3236 data->builder->build_id(
id);
3239 void DepsgraphRelationBuilder::constraint_walk(
bConstraint * ,
3244 BuilderWalkUserData *
data = (BuilderWalkUserData *)
user_data;
3246 if (
id ==
nullptr) {
3249 data->builder->build_id(
id);
Blender kernel action and pose functionality.
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
struct AnimData * BKE_animdata_from_id(const struct ID *id)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
#define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN(_collection, _object, _mode)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
#define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_END
void BKE_constraints_id_loop(struct ListBase *list, ConstraintIDFunc func, void *userdata)
void BKE_constraint_targets_flush(struct bConstraint *con, struct ListBase *targets, bool no_copy)
int BKE_constraint_targets_get(struct bConstraint *con, struct ListBase *r_targets)
bool BKE_constraint_target_uses_bbone(struct bConstraint *con, struct bConstraintTarget *ct)
const bConstraintTypeInfo * BKE_constraint_typeinfo_get(struct bConstraint *con)
bool BKE_driver_expression_depends_on_time(struct ChannelDriver *driver)
#define DRIVER_TARGETS_USED_LOOPER_BEGIN(dvar)
#define DRIVER_TARGETS_LOOPER_END
void void BKE_gpencil_modifiers_foreach_ID_link(struct Object *ob, GreasePencilIDWalkFunc walk, void *userData)
bool BKE_gpencil_modifier_depends_ontime(struct GpencilModifierData *md)
const GpencilModifierTypeInfo * BKE_gpencil_modifier_get_info(GpencilModifierType type)
void IDP_foreach_property(struct IDProperty *id_property_root, int type_filter, IDPForeachPropertyCallback callback, void *user_data)
bool BKE_image_user_id_has_animation(struct ID *id)
struct Key * BKE_key_from_id(struct ID *id)
struct Key * BKE_key_from_object(struct Object *ob)
struct ViewLayer * BKE_view_layer_default_render(const struct Scene *scene)
General operations, lookup, etc. for materials.
struct Material *** BKE_object_material_array_p(struct Object *ob)
short * BKE_object_material_len_p(struct Object *ob)
struct Object * BKE_mball_basis_find(struct Scene *scene, struct Object *ob)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
bool BKE_modifier_depends_ontime(struct Scene *scene, struct ModifierData *md)
void BKE_modifiers_foreach_ID_link(struct Object *ob, IDWalkFunc walk, void *userData)
#define NODE_CUSTOM_GROUP
struct bNodeTree ** BKE_ntree_ptr_from_id(struct ID *id)
General operations, lookup, etc. for blender objects.
void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct Scene *scene, int duplis)
bool BKE_ptcache_object_has(struct Scene *scene, struct Object *ob, int duplis)
#define PTCACHE_TYPE_RIGIDBODY
API for Blender-side Rigid Body stuff.
bool BKE_shaderfx_depends_ontime(struct ShaderFxData *fx)
void BKE_shaderfx_foreach_ID_link(struct Object *ob, ShaderFxIDWalkFunc walk, void *userData)
const ShaderFxTypeInfo * BKE_shaderfx_get_info(ShaderFxType type)
bool BKE_shrinkwrap_needs_normals(int shrinkType, int shrinkMode)
#define BLI_assert_msg(a, msg)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
@ DAG_EVAL_NEED_SHRINKWRAP_BOUNDARY
@ DAG_EVAL_NEED_CURVE_PATH
@ eBoidRuleType_FollowLeader
Object groups, one object can be in many groups at once.
@ CONSTRAINT_TYPE_FOLLOWTRACK
@ CONSTRAINT_TYPE_OBJECTSOLVER
@ CONSTRAINT_TYPE_ARMATURE
@ CONSTRAINT_TYPE_LOCLIKE
@ CONSTRAINT_TYPE_SHRINKWRAP
@ CONSTRAINT_TYPE_CAMERASOLVER
@ CONSTRAINT_TYPE_ROTLIKE
@ CONSTRAINT_TYPE_SPLINEIK
@ CONSTRAINT_TYPE_KINEMATIC
@ CONSTRAINT_TYPE_TRANSLIKE
@ CONSTRAINT_TYPE_CLAMPTO
@ CONSTRAINT_TYPE_FOLLOWPATH
@ CONSTRAINT_TYPE_SIZELIKE
@ CONSTRAINT_TYPE_TRANSFORM_CACHE
@ CON_SHRINKWRAP_TRACK_NORMAL
#define CD_MASK_ORIGINDEX
#define CD_MASK_MDEFORMVERT
#define CD_MASK_CUSTOMLOOPNORMAL
@ MOD_SHRINKWRAP_TARGET_PROJECT
@ MOD_SHRINKWRAP_NEAREST_VERTEX
@ eModifierType_Collision
@ NTREE_RUNTIME_FLAG_HAS_IMAGE_ANIMATION
#define PFIELD_SHAPE_SURFACE
#define PFIELD_VISIBILITY
#define PFIELD_SHAPE_POINTS
Object is a sort of wrapper for general info.
#define OB_TYPE_IS_GEOMETRY(_type)
#define PSYS_HAIR_DYNAMICS
Types and defines for representing Rigid Body entities.
#define AUDIO_VOLUME_ANIMATED
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to curves
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between camera
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block TEX_IMAGE
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint ** constraints
constexpr bool startswith(StringRef prefix) const
bool checkIsBuiltAndTag(ID *id, int tag=TAG_COMPLETE)
bool checkIsBuilt(ID *id, int tag=TAG_COMPLETE) const
ScopedEntry trace(const Args &...args)
virtual bool check_pchan_has_bbone_segments(const Object *object, const bPoseChannel *pchan)
virtual bool need_pull_base_into_graph(const Base *base)
bool has_node(const OperationKey &key) const
void add_particle_collision_relations(const OperationKey &key, Object *object, Collection *collection, const char *name)
virtual void build_sound(bSound *sound)
Relation * add_depends_on_transform_relation(ID *id, const KeyTo &key_to, const char *description, int flags=0)
virtual void build_freestyle_linestyle(FreestyleLineStyle *linestyle)
virtual void build_scene_audio(Scene *scene)
virtual void build_image(Image *image)
virtual void build_copy_on_write_relations()
virtual void build_object_layer_component_relations(Object *object)
virtual void build_object_from_view_layer_base(Object *object)
virtual void build_material(Material *ma)
virtual void build_driver(ID *id, FCurve *fcurve)
virtual void build_dimensions(Object *object)
virtual void build_animation_images(ID *id)
virtual void build_driver_data(ID *id, FCurve *fcurve)
virtual void build_nested_nodetree(ID *owner, bNodeTree *ntree)
virtual void build_nodetree_socket(bNodeSocket *socket)
virtual void build_light(Light *lamp)
virtual void build_action(bAction *action)
virtual void build_collection(LayerCollection *from_layer_collection, Object *object, Collection *collection)
virtual void build_speaker(Speaker *speaker)
virtual void build_animdata_force(ID *id)
TimeSourceNode * get_node(const TimeSourceKey &key) const
bool is_same_nodetree_node_dependency(const KeyFrom &key_from, const KeyTo &key_to)
virtual void build_scene_speakers(Scene *scene, ViewLayer *view_layer)
OperationNode * find_node(const OperationKey &key) const
virtual void build_armature(bArmature *armature)
virtual void build_armature_bones(ListBase *bones)
virtual void build_object_pointcache(Object *object)
virtual void build_constraints(ID *id, NodeType component_type, const char *component_subdata, ListBase *constraints, RootPChanMap *root_map)
virtual void build_mask(Mask *mask)
virtual void build_vfont(VFont *vfont)
virtual void build_animdata_curves_targets(ID *id, ComponentKey &adt_key, OperationNode *operation_from, ListBase *curves)
virtual void build_camera(Camera *camera)
virtual void build_object_data_light(Object *object)
virtual void build_world(World *world)
void add_customdata_mask(Object *object, const DEGCustomDataMeshMasks &customdata_masks)
bool is_same_bone_dependency(const KeyFrom &key_from, const KeyTo &key_to)
virtual void build_driver_id_property(ID *id, const char *rna_path)
virtual void build_scene_sequencer(Scene *scene)
virtual void build_object_data_camera(Object *object)
virtual void build_animdata(ID *id)
virtual void build_object_data_geometry(Object *object)
DepsgraphRelationBuilder(Main *bmain, Depsgraph *graph, DepsgraphBuilderCache *cache)
virtual void build_object_data_lightprobe(Object *object)
virtual void build_particle_settings(ParticleSettings *part)
virtual void build_texture(Tex *tex)
void add_special_eval_flag(ID *id, uint32_t flag)
virtual void build_generic_id(ID *id)
virtual void build_object(Object *object)
virtual void build_movieclip(MovieClip *clip)
virtual void build_nodetree(bNodeTree *ntree)
Relation * add_relation(const KeyFrom &key_from, const KeyTo &key_to, const char *description, int flags=0)
virtual void build_object_data_geometry_datablock(ID *obdata)
void add_particle_forcefield_relations(const OperationKey &key, Object *object, ParticleSystem *psys, EffectorWeights *eff, bool add_absorption, const char *name)
virtual void build_rigidbody(Scene *scene)
virtual void build_nested_datablock(ID *owner, ID *id, bool flush_cow_changes)
virtual void build_particle_system_visualization_object(Object *object, ParticleSystem *psys, Object *draw_object)
virtual void build_lightprobe(LightProbe *probe)
void add_visibility_relation(ID *id_from, ID *id_to)
virtual void build_driver_variables(ID *id, FCurve *fcurve)
virtual void build_nested_shapekey(ID *owner, Key *key)
virtual void build_object_parent(Object *object)
virtual void build_scene_parameters(Scene *scene)
virtual void build_parameters(ID *id)
virtual void build_simulation(Simulation *simulation)
virtual void build_materials(Material **materials, int num_materials)
virtual void build_shapekeys(Key *key)
virtual void build_object_data_speaker(Object *object)
virtual void build_rig(Object *object)
Relation * add_operation_relation(OperationNode *node_from, OperationNode *node_to, const char *description, int flags=0)
virtual void build_object_data(Object *object)
virtual void build_animdata_drivers(ID *id)
virtual void build_id(ID *id)
virtual void build_idproperties(IDProperty *id_property)
virtual void build_animdata_curves(ID *id)
virtual void build_cachefile(CacheFile *cache_file)
DepsNodeHandle create_node_handle(const KeyType &key, const char *default_name="")
void add_modifier_to_transform_relation(const DepsNodeHandle *handle, const char *description)
virtual void build_animdata_nlastrip_targets(ID *id, ComponentKey &adt_key, OperationNode *operation_from, ListBase *strips)
Relation * add_time_relation(TimeSourceNode *timesrc, Node *node_to, const char *description, int flags=0)
virtual void build_particle_systems(Object *object)
Node * find_node(const PointerRNA *ptr, const PropertyRNA *prop, RNAPointerSource source)
#define DEG_DEBUG_PRINTF(depsgraph, type,...)
FreestyleLineStyle linestyle
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
smooth(Type::VEC4, "color_mul") .smooth(Type gpFillTexture gpSceneDepthTexture materials[GPENCIL_MATERIAL_BUFFER_LEN]
void SEQ_for_each_callback(ListBase *seqbase, SeqForEachFunc callback, void *user_data)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
NodeType geometry_tag_to_component(const ID *id)
@ RELATION_FLAG_FLUSH_USER_EDIT_ONLY
@ RELATION_CHECK_BEFORE_ADD
static bool seq_build_prop_cb(Sequence *seq, void *user_data)
bool rna_prop_affects_parameters_node(const PointerRNA *ptr, const PropertyRNA *prop)
ListBase * build_collision_relations(Depsgraph *graph, Collection *collection, unsigned int modifier_type)
struct Seq_build_prop_cb_data { DepsgraphRelationBuilder *builder Seq_build_prop_cb_data
static void build_idproperties_callback(IDProperty *id_property, void *user_data)
bool deg_copy_on_write_is_needed(const ID *id_orig)
static bool rigidbody_object_depends_on_evaluated_geometry(const RigidBodyOb *rbo)
@ TRANSFORM_SIMULATION_INIT
@ OBJECT_FROM_LAYER_ENTRY
@ RIGIDBODY_TRANSFORM_COPY
@ SYNCHRONIZE_TO_ORIGINAL
@ PARTICLE_SETTINGS_RESET
ListBase * build_effector_relations(Depsgraph *graph, Collection *collection)
ComponentKey sequencer_key
const char * operationCodeAsString(OperationCode opcode)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
const char * RNA_property_identifier(const PropertyRNA *prop)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_path_resolve_full(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
struct Collection * group
struct ClothCollSettings * coll_parms
struct Object * textoncurve
struct Collection * group
struct bNodeTree * nodetree
void(* updateDepsgraph)(struct GpencilModifierData *md, const struct ModifierUpdateDepsgraphContext *ctx, int mode)
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct MaterialGPencilStyle * gp_style
void(* updateDepsgraph)(struct ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
struct DepsNodeHandle * node
struct Collection * instance_collection
struct RigidBodyOb * rigidbody_object
ListBase greasepencil_modifiers
struct Collection * collision_group
struct Collection * instance_collection
struct BoidSettings * boids
struct EffectorWeights * effector_weights
struct Object * instance_object
struct ClothModifierData * clmd
struct Collection * group
struct EffectorWeights * effector_weights
struct RigidBodyWorld * rigidbody_world
void(* updateDepsgraph)(struct ShaderFxData *fx, const struct ModifierUpdateDepsgraphContext *ctx)
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct bNodeTree * nodetree
bNodeTreeRuntimeHandle * runtime
OperationNode * find_operation(OperationIDKey key) const
static DEGCustomDataMeshMasks MaskVert(const uint64_t vert_mask)
static DEGCustomDataMeshMasks MaskFace(const uint64_t face_mask)
static DEGCustomDataMeshMasks MaskLoop(const uint64_t loop_mask)
static DEGCustomDataMeshMasks MaskEdge(const uint64_t edge_mask)
static DEGCustomDataMeshMasks MaskPoly(const uint64_t poly_mask)
IDNode * find_id_node(const ID *id) const
Relation * add_new_relation(Node *from, Node *to, const char *description, int flags=0)
TimeSourceNode * time_source
virtual OperationNode * get_exit_operation()
virtual string identifier() const
virtual OperationNode * get_entry_operation()
const char * component_name
virtual string identifier() const override
virtual OperationNode * get_entry_operation() override