131 bool driver_target_depends_on_time(
const DriverTarget *target)
140 bool driver_variable_depends_on_time(
const DriverVar *variable)
143 if (driver_target_depends_on_time(&variable->
targets[i])) {
150 bool driver_variables_depends_on_time(
const ListBase *variables)
153 if (driver_variable_depends_on_time(variable)) {
165 if (driver_variables_depends_on_time(&driver->
variables)) {
186 bool object_particles_depends_on_time(
Object *
object)
192 if (particle_system_depends_on_time(psys)) {
199 bool check_id_has_anim_component(
ID *
id)
202 if (adt ==
nullptr) {
208 bool check_id_has_driver_component(
ID *
id)
211 if (adt ==
nullptr) {
218 const char *subtarget,
220 const char *component_subdata,
221 RootPChanMap *root_map)
229 if (root_map->has_common_root(component_subdata, subtarget)) {
236 bool object_have_geometry_component(
const Object *
object)
267 "find_node component: Could not find ID %s\n",
268 (key.
id !=
nullptr) ? key.
id->
name :
"<null>");
279 if (op_node ==
nullptr) {
281 "find_node_operation: Failed for (%s, '%s')\n",
312 const char *description)
332 id_node->customdata_masks |= customdata_masks;
350 const char *description,
353 if (timesrc && node_to) {
359 "add_time_relation(%p = %s, %p = %s, %s) Failed\n",
361 (timesrc) ? timesrc->
identifier().c_str() :
"<None>",
363 (node_to) ? node_to->
identifier().c_str() :
"<None>",
371 const char *description,
374 if (node_from && node_to) {
380 "add_operation_relation(%p = %s, %p = %s, %s) Failed\n",
382 (node_from) ? node_from->
identifier().c_str() :
"<None>",
384 (node_to) ? node_to->
identifier().c_str() :
"<None>",
398 if (relation->ob !=
object) {
426 if (relation->ob !=
object) {
438 if ((relation->pd !=
nullptr) && (relation->pd->forcefield ==
PFIELD_TEXTURE) &&
439 (relation->pd->tex !=
nullptr)) {
445 if (relation->pd->forcefield ==
PFIELD_FLUIDFLOW && relation->pd->f_source) {
458 if (relation->psys) {
459 if (relation->ob !=
object) {
467 else if (relation->psys != psys) {
471 relation->psys->name);
620 if (from_layer_collection !=
nullptr) {
630 OperationKey object_transform_final_key(
object !=
nullptr ? &object->
id :
nullptr,
644 add_relation(object_transform_key, collection_geometry_key,
"Collection Geometry");
649 if (
find_node(object_geometry_key) !=
nullptr) {
650 add_relation(object_geometry_key, collection_geometry_key,
"Collection Geometry");
655 Collection *collection_instance = cob->ob->instance_collection;
656 if (collection_instance !=
nullptr) {
659 add_relation(collection_instance_key, collection_geometry_key,
"Collection Geometry");
667 add_relation(child_collection_geometry_key, collection_geometry_key,
"Collection Geometry");
670 if (
object !=
nullptr) {
673 add_relation(dupli_transform_key, object_transform_final_key,
"Dupligroup");
676 add_relation(dupli_transform_key, duplicator_key,
"Dupligroup");
679 ComponentKey dupli_geometry_component_key(&ob->id, dupli_geometry_component_type);
680 add_relation(dupli_geometry_component_key, duplicator_key,
"Dupligroup");
705 add_relation(init_transform_key, local_transform_key,
"Transform Init");
709 if (object->
parent !=
nullptr) {
715 add_relation(local_transform_key, parent_transform_key,
"ObLocal -> ObParent");
719 BuilderWalkUserData
data;
725 BuilderWalkUserData
data;
731 BuilderWalkUserData
data;
737 BuilderWalkUserData
data;
750 add_relation(base_op_key, constraint_key,
"ObBase-> Constraint Stack");
751 add_relation(constraint_key, final_transform_key,
"ObConstraints -> Done");
752 add_relation(constraint_key, ob_eval_key,
"Constraint -> Transform Eval");
754 ob_eval_key, object_transform_simulation_init_key,
"Transform Eval -> Simulation Init");
757 "Simulation -> Final Transform");
762 ob_eval_key, object_transform_simulation_init_key,
"Transform Eval -> Simulation Init");
765 "Simulation -> Final Transform");
778 (object->
pd->
tex !=
nullptr)) {
793 add_relation(final_transform_key, synchronize_key,
"Synchronize to Original");
807 add_relation(ob_transform_key, proxy_transform_key,
"Proxy Transform");
820 add_relation(proxy_group_eval_key, transform_eval_key,
"Proxy Group Transform");
834 add_relation(object_from_layer_entry_key, object_from_layer_exit_key,
"Object from Layer");
839 add_relation(object_from_layer_entry_key, object_flags_key,
"Base flags flush Entry");
840 add_relation(object_flags_key, object_from_layer_exit_key,
"Base flags flush Exit");
845 add_relation(object_from_layer_exit_key, synchronize_key,
"Synchronize to Original");
849 add_relation(view_layer_done_key, object_from_layer_entry_key,
"View Layer flags to Object");
854 if (object->
data ==
nullptr) {
863 switch (object->
type) {
882 add_relation(transform_key, geometry_key,
"Text on Curve own Transform");
910 if (key !=
nullptr) {
918 if (materials_ptr !=
nullptr) {
930 add_relation(camera_parameters_key, object_parameters_key,
"Camera -> Object");
939 add_relation(lamp_parameters_key, object_parameters_key,
"Light -> Object");
948 add_relation(probe_key, object_key,
"LightProbe Update");
957 add_relation(speaker_key, object_key,
"Speaker Update");
963 ID *parent_id = &
object->parent->id;
970 add_relation(parent_transform_key, object_transform_key,
"Parent Armature Transform");
976 parent_transform_key, object_geometry_key,
"Parent Armature Transform -> Geometry");
977 add_relation(parent_pose_key, object_geometry_key,
"Parent Armature Pose -> Geometry");
980 &object->
id, object_geometry_key,
"Virtual Armature Modifier");
990 add_relation(parent_key, object_transform_key,
"Vertex Parent");
1002 add_relation(transform_key, object_transform_key,
"Vertex Parent TFM");
1011 add_relation(parent_bone_key, object_transform_key,
"Bone Parent");
1012 add_relation(parent_transform_key, object_transform_key,
"Armature Parent");
1021 add_relation(parent_key, object_transform_key,
"Lattice Deform Parent");
1022 add_relation(geom_key, object_transform_key,
"Lattice Deform Parent Geom");
1030 add_relation(parent_key, object_transform_key,
"Curve Follow Parent");
1032 add_relation(transform_key, object_transform_key,
"Curve Follow TFM");
1037 add_relation(parent_key, object_transform_key,
"Curve Parent");
1043 add_relation(parent_key, object_transform_key,
"Parent");
1056 add_relation(parent_geometry_key, object_transform_key,
"Parent");
1071 FLAG_TRANSFORM = (1 << 0),
1072 FLAG_GEOMETRY = (1 << 1),
1073 FLAG_ALL = (FLAG_TRANSFORM | FLAG_GEOMETRY),
1077 int handled_components = 0;
1085 flag = FLAG_TRANSFORM;
1088 add_relation(point_cache_key, transform_key,
"Point Cache -> Rigid Body");
1094 "Rigid Body Rebuild -> Point Cache Reset",
1098 flag = FLAG_GEOMETRY;
1100 add_relation(point_cache_key, geometry_key,
"Point Cache -> Geometry");
1104 handled_components |= flag;
1105 if (handled_components == FLAG_ALL) {
1117 "Transform Simulation -> Point Cache",
1121 "Geometry Init -> Point Cache",
1129 const char *component_subdata,
1143 if (cti ==
nullptr) {
1154 bool depends_on_camera =
false;
1158 depends_on_camera =
true;
1160 if (
data->depth_ob) {
1168 depends_on_camera =
true;
1170 if (depends_on_camera && scene_->
camera !=
nullptr) {
1177 add_relation(time_src_key, constraint_op_key,
"TimeSrc -> Animation");
1183 add_relation(time_src_key, constraint_op_key,
"TimeSrc -> Animation");
1191 ListBase targets = {
nullptr,
nullptr};
1194 if (ct->tar ==
nullptr) {
1208 else if ((ct->tar->type ==
OB_ARMATURE) && (ct->subtarget[0])) {
1211 opcode = bone_target_opcode(
1212 &ct->tar->id, ct->subtarget,
id, component_subdata, root_map);
1264 if (&ct->tar->id ==
id) {
1318 if (check_id_has_anim_component(
id)) {
1321 add_relation(animation_key, parameters_key,
"Animation -> Parameters");
1329 if (adt ==
nullptr) {
1332 if (adt->
action !=
nullptr) {
1342 add_relation(animation_entry_key, animation_eval_key,
"Init -> Eval");
1343 add_relation(animation_eval_key, animation_exit_key,
"Eval -> Exit");
1347 if (adt->
action !=
nullptr) {
1349 add_relation(action_key, adt_key,
"Action -> Animation");
1354 if (node_from ==
nullptr) {
1360 if (adt->
action !=
nullptr) {
1384 if (node_to ==
nullptr) {
1402 if (id_node_from != id_node_to) {
1406 "Animated CoW -> Animation",
1418 if (strip->act !=
nullptr) {
1422 add_relation(action_key, adt_key,
"Action -> Animation");
1426 else if (strip->strips.first !=
nullptr) {
1435 if (adt ==
nullptr) {
1443 fcu->rna_path ? fcu->rna_path :
"",
1451 add_relation(adt_key, driver_key,
"AnimData Before Drivers");
1463 add_relation(time_src_key, image_animation_key,
"TimeSrc -> Image Animation");
1482 add_relation(animation_key, rigidbody_key,
"Animation -> Rigid Body");
1494 add_relation(time_src_key, animation_key,
"TimeSrc -> Animation");
1514 if (driver_depends_on_time(driver)) {
1516 add_relation(time_src_key, driver_key,
"TimeSrc -> Driver");
1523 const char *rna_path = fcu->
rna_path;
1524 if (rna_path ==
nullptr || rna_path[0] ==
'\0') {
1554 if (bone ==
nullptr) {
1555 fprintf(stderr,
"Couldn't find armature bone name for driver path - '%s'\n", rna_path);
1560 const bool driver_targets_bbone =
STRPREFIX(prop_identifier,
"bbone_");
1570 if (object->
data != id_ptr || object->
pose ==
nullptr) {
1575 if (pchan ==
nullptr) {
1582 add_relation(driver_key, bone_key,
"Arm Bone -> Driver -> Bone");
1593 if (node_to !=
nullptr) {
1594 add_relation(driver_key, property_entry_key,
"Driver -> Driven Property");
1613 property_entry_key.
ptr,
1614 property_entry_key.
prop,
1617 add_relation(property_exit_key, parameters_key,
"Driven Property -> Properties");
1635 ID *target_id = dtar->id;
1636 if (target_id ==
nullptr) {
1642 Object *
object =
nullptr;
1644 object = (
Object *)target_id;
1647 object =
object->proxy_from;
1648 target_id = &
object->id;
1656 (dtar->pchan_name[0])) {
1658 if (target_pchan ==
nullptr) {
1666 add_relation(variable_key, driver_key,
"Bone Target -> Driver");
1670 if (target_id ==
id) {
1677 add_relation(target_key, driver_key,
"Target -> Driver");
1679 else if (dtar->rna_path !=
nullptr && dtar->rna_path[0] !=
'\0') {
1688 add_relation(variable_exit_key, driver_key,
"RNA Target -> Driver");
1701 if (
id ==
nullptr || rna_path ==
nullptr) {
1711 if (prop ==
nullptr) {
1739 add_relation(parameters_entry_key, parameters_eval_key,
"Entry -> Eval");
1740 add_relation(parameters_eval_key, parameters_exit_key,
"Entry -> Exit");
1748 add_relation(geometry_key, dimensions_key,
"Geometry -> Dimensions");
1749 add_relation(transform_key, dimensions_key,
"Transform -> Dimensions");
1765 add_relation(parameters_key, world_key,
"World's parameters");
1784 add_relation(time_src_key, rb_init_key,
"TimeSrc -> Rigidbody Init");
1796 add_relation(effector_transform_key, rb_init_key,
"RigidBody Field");
1797 if (effector_relation->pd !=
nullptr) {
1798 const short shape = effector_relation->pd->shape;
1801 add_relation(effector_geometry_key, rb_init_key,
"RigidBody Field");
1804 (effector_relation->pd->tex !=
nullptr)) {
1806 add_relation(tex_key, rb_init_key,
"Force field Texture");
1811 if (rbw->
group !=
nullptr) {
1837 "Object Transform -> Rigidbody Sim Eval");
1847 "Object Geom Eval -> Rigidbody Sim Eval",
1862 add_relation(rb_simulate_key, rb_transform_copy_key,
"Rigidbody Sim Eval -> RBO Sync");
1867 object_transform_final_key,
1868 "Rigidbody Sync -> Transform Final");
1901 add_relation(particle_settings_key, eval_init_key,
"Particle Settings Change");
1907 add_relation(psys_key, obdata_ubereval_key,
"PSys -> UberEval");
1922 if (part->
boids !=
nullptr) {
1925 Object *ruleob =
nullptr;
1932 if (ruleob !=
nullptr) {
1942 if (
ELEM(particle_target->ob,
nullptr,
object)) {
1993 particle_settings_init_key, particle_settings_eval_key,
"Particle Settings Init Order");
1994 add_relation(particle_settings_reset_key, particle_settings_eval_key,
"Particle Settings Reset");
1997 if (mtex ==
nullptr || mtex->
tex ==
nullptr) {
2003 particle_settings_reset_key,
2004 "Particle Texture -> Particle Reset",
2006 add_relation(texture_key, particle_settings_eval_key,
"Particle Texture -> Particle Eval");
2011 add_relation(object_key, particle_settings_eval_key,
"Particle Texture Space");
2014 if (check_id_has_anim_component(&part->
id)) {
2016 add_relation(animation_key, particle_settings_eval_key,
"Particle Settings Animation");
2028 add_relation(dup_ob_key, psys_key,
"Particle Object Visualization");
2031 add_relation(obdata_ubereval_key, dup_geometry_key,
"Particle MBall Visualization");
2051 add_relation(key_block_key, geometry_key,
"Key Block Properties");
2052 add_relation(key_block_key, parameters_eval_key,
"Key Block Properties");
2085 add_relation(obdata_geom_key, geom_key,
"Object Geometry Base Data");
2107 add_relation(time_src_key, obdata_ubereval_key,
"Time Source");
2126 add_relation(time_src_key, obdata_ubereval_key,
"Time Source");
2144 add_relation(time_src_key, obdata_ubereval_key,
"Time Source");
2159 add_relation(geom_init_key, obdata_ubereval_key,
"Object Geometry UberEval");
2165 if (mom ==
object) {
2167 add_relation(mom_transform_key, mom_geom_key,
"Metaball Motherball Transform -> Geometry");
2171 add_relation(geom_key, mom_geom_key,
"Metaball Motherball");
2172 add_relation(transform_key, mom_geom_key,
"Metaball Motherball");
2182 if (object_particles_depends_on_time(
object)) {
2186 add_relation(time_key, obdata_ubereval_key,
"Legacy particle time");
2191 if (key !=
nullptr) {
2192 if (key->
adt !=
nullptr) {
2205 add_relation(final_geometry_key, synchronize_key,
"Synchronize to Original");
2211 add_relation(object_data_select_key, object_select_key,
"Data Selection -> Object Selection");
2227 if (key !=
nullptr) {
2233 add_relation(obdata_geom_eval_key, obdata_geom_done_key,
"ObData Geom Eval Done");
2243 if (cu->
bevobj !=
nullptr) {
2245 add_relation(bevob_geom_key, obdata_geom_eval_key,
"Curve Bevel Geometry");
2247 add_relation(bevob_key, obdata_geom_eval_key,
"Curve Bevel Transform");
2252 add_relation(taperob_key, obdata_geom_eval_key,
"Curve Taper");
2257 add_relation(textoncurve_geom_key, obdata_geom_eval_key,
"Text on Curve Geometry");
2259 add_relation(textoncurve_key, obdata_geom_eval_key,
"Text on Curve Transform");
2276 add_relation(time_key, geometry_key,
"GP Frame Change");
2281 for (
int i = 0; i < gpd->
totcol; i++) {
2283 if ((ma !=
nullptr) && (ma->
gp_style !=
nullptr)) {
2285 add_relation(material_key, geometry_key,
"Material -> GP Data");
2291 if (gpl->parent !=
nullptr) {
2294 if (gpl->partype ==
PARBONE) {
2300 add_relation(armature_key, gpd_geom_key,
"Armature Parent");
2304 add_relation(transform_key, gpd_geom_key,
"GPencil Parent Layer");
2319 add_relation(time_key, geometry_key,
"Volume sequence time");
2360 add_relation(dof_ob_key, camera_parameters_key,
"Camera DOF");
2380 add_relation(nodetree_key, lamp_parameters_key,
"NTree->Light Parameters");
2386 add_relation(lamp_parameters_key, shading_key,
"Light Shading Parameters");
2395 if (
object !=
nullptr) {
2401 if (image !=
nullptr) {
2407 if (collection !=
nullptr) {
2415 if (
ntree ==
nullptr) {
2436 if (
id ==
nullptr) {
2440 if (id_type ==
ID_MA) {
2443 add_relation(material_key, shading_key,
"Material -> Node");
2445 else if (id_type ==
ID_TE) {
2448 add_relation(texture_key, shading_key,
"Texture -> Node");
2450 else if (id_type ==
ID_IM) {
2455 else if (id_type ==
ID_OB) {
2458 add_relation(object_transform_key, shading_key,
"Object Transform -> Node");
2459 if (object_have_geometry_component(
reinterpret_cast<Object *
>(
id))) {
2461 add_relation(object_geometry_key, shading_key,
"Object Geometry -> Node");
2464 else if (id_type ==
ID_SCE) {
2471 if (node_scene->
camera !=
nullptr) {
2475 else if (id_type ==
ID_TXT) {
2478 else if (id_type ==
ID_MSK) {
2483 else if (id_type ==
ID_MC) {
2492 add_relation(group_shading_key, shading_key,
"Group Node");
2495 BLI_assert(!
"Unknown ID type used for node");
2509 add_relation(shading_parameters_key, shading_update_key,
"NTree Shading Parameters");
2511 if (check_id_has_anim_component(&
ntree->
id)) {
2513 add_relation(animation_key, shading_parameters_key,
"NTree Shading Parameters");
2516 add_relation(parameters_key, shading_parameters_key,
"NTree Shading Parameters");
2533 add_relation(parameters_key, material_key,
"Material's parameters");
2540 add_relation(ntree_key, material_key,
"Material's NTree");
2547 for (
int i = 0; i < num_materials; i++) {
2548 if (materials[i] ==
nullptr) {
2573 if (
texture->ima !=
nullptr) {
2581 if (check_id_has_anim_component(&
texture->id)) {
2583 add_relation(animation_key, texture_key,
"Datablock Animation");
2588 add_relation(image_animation_key, texture_key,
"Datablock Image Animation");
2610 if (check_id_has_anim_component(&cache_file->
id)) {
2613 add_relation(animation_key, datablock_key,
"Datablock Animation");
2615 if (check_id_has_driver_component(&cache_file->
id)) {
2618 add_relation(animation_key, datablock_key,
"Drivers -> Cache Eval");
2626 add_relation(time_src_key, cache_update_key,
"TimeSrc -> Cache File Eval");
2643 add_relation(time_src_key, mask_animation_key,
"TimeSrc -> Mask Animation");
2646 add_relation(mask_animation_key, mask_eval_key,
"Mask Animation -> Mask Eval");
2650 for (
int i = 0; i < spline->tot_point; i++) {
2653 if (parent ==
nullptr || parent->
id ==
nullptr) {
2660 add_relation(movieclip_eval_key, mask_eval_key,
"Movie Clip -> Mask Eval");
2709 if (speaker->
sound !=
nullptr) {
2713 add_relation(sound_key, speaker_key,
"Sound -> Speaker");
2742 add_relation(time_src_key, simulation_eval_key,
"TimeSrc -> Simulation");
2746 add_relation(nodetree_key, simulation_eval_key,
"NodeTree -> Simulation", 0);
2762 bool has_audio_strips =
false;
2765 if (seq->
sound !=
nullptr) {
2768 add_relation(sound_key, sequencer_key,
"Sound -> Sequencer");
2769 has_audio_strips =
true;
2771 if (seq->
scene !=
nullptr) {
2774 has_audio_strips =
true;
2780 add_relation(sequence_scene_audio_key, sequencer_key,
"Sequence Scene Audio -> Sequencer");
2782 add_relation(sequence_scene_key, sequencer_key,
"Sequence Scene -> Sequencer");
2790 if (has_audio_strips) {
2791 add_relation(sequencer_key, scene_audio_key,
"Sequencer -> Audio");
2800 add_relation(scene_audio_entry_key, scene_audio_volume_key,
"Audio Entry -> Volume");
2801 add_relation(scene_audio_volume_key, scene_sound_eval_key,
"Audio Volume -> Sound");
2805 add_relation(scene_anim_key, scene_audio_volume_key,
"Animation -> Audio Volume");
2812 Object *
object = base->object;
2837 add_relation(id_copy_on_write_key, owner_copy_on_write_key,
"Eval Order");
2842 if (
ntree ==
nullptr) {
2850 if (key ==
nullptr) {
2880 if (!comp_node->depends_on_cow()) {
2890 if (id_type ==
ID_SO) {
2912 if (op_entry !=
nullptr) {
2914 rel->
flag |= rel_flag;
2917 for (
OperationNode *op_node : comp_node->operations_map->values()) {
2918 if (op_node == op_entry) {
2921 if (op_node->inlinks.is_empty()) {
2923 rel->
flag |= rel_flag;
2926 bool has_same_comp_dependency =
false;
2927 for (
Relation *rel_current : op_node->inlinks) {
2933 has_same_comp_dependency =
true;
2937 if (!has_same_comp_dependency) {
2939 rel->
flag |= rel_flag;
2955 ID *object_data_id = (
ID *)object->
data;
2956 if (object_data_id !=
nullptr) {
2977 if (animation_data !=
nullptr) {
2978 if (animation_data->
action !=
nullptr) {
2992 void DepsgraphRelationBuilder::modifier_walk(
void *
user_data,
2997 BuilderWalkUserData *
data = (BuilderWalkUserData *)
user_data;
2999 if (
id ==
nullptr) {
3002 data->builder->build_id(
id);
3005 void DepsgraphRelationBuilder::constraint_walk(
bConstraint * ,
3010 BuilderWalkUserData *
data = (BuilderWalkUserData *)
user_data;
3012 if (
id ==
nullptr) {
3015 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(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)
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)
const GpencilModifierTypeInfo * BKE_gpencil_modifier_get_info(GpencilModifierType type)
void IDP_foreach_property(struct IDProperty *id_property_root, const 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(const 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)
This function finds the basis MetaBall.
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
void BKE_modifiers_foreach_ID_link(struct Object *ob, IDWalkFunc walk, void *userData)
#define NODE_CUSTOM_GROUP
General operations, lookup, etc. for blender objects.
bool BKE_object_modifier_gpencil_use_time(struct Object *ob, struct GpencilModifierData *md)
bool BKE_object_modifier_use_time(struct Object *ob, struct ModifierData *md)
bool BKE_object_shaderfx_use_time(struct Object *ob, struct ShaderFxData *md)
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.
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)
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
#define ID_IS_LINKED(_id)
@ 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
#define PFIELD_SHAPE_SURFACE
#define PFIELD_VISIBILITY
#define PFIELD_SHAPE_POINTS
Object is a sort of wrapper for general info.
#define PSYS_HAIR_DYNAMICS
Types and defines for representing Rigid Body entities.
#define AUDIO_VOLUME_ANIMATED
Read Guarded memory(de)allocation.
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Light Particle Volume TEX_IMAGE
#define SEQ_ALL_BEGIN(ed, _seq)
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint ** constraints
bool checkIsBuiltAndTag(ID *id, int tag=TAG_COMPLETE)
bool checkIsBuilt(ID *id, int tag=TAG_COMPLETE) const
virtual bool check_pchan_has_bbone_segments(Object *object, const bPoseChannel *pchan)
virtual bool need_pull_base_into_graph(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_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_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_object_proxy_from(Object *object)
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_object_from_layer_relations(Object *object)
virtual void build_movieclip(MovieClip *clip)
virtual void build_nodetree(bNodeTree *ntree)
virtual void build_nested_datablock(ID *owner, ID *id)
virtual void build_proxy_rig(Object *object)
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_particle_system_visualization_object(Object *object, ParticleSystem *psys, Object *draw_object)
virtual void build_lightprobe(LightProbe *probe)
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_object_proxy_group(Object *object)
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
NodeType geometry_tag_to_component(const ID *id)
@ RELATION_FLAG_FLUSH_USER_EDIT_ONLY
@ RELATION_CHECK_BEFORE_ADD
ListBase * build_collision_relations(Depsgraph *graph, Collection *collection, unsigned int modifier_type)
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)
const char * operationCodeAsString(OperationCode opcode)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
bool RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
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_property_is_idprop(const PropertyRNA *prop)
struct Object * focus_object
struct CameraDOFSettings dof
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, const int mode)
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct MaterialGPencilStyle * gp_style
void(* updateDepsgraph)(struct ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
struct DepsNodeHandle * node
struct Object * proxy_group
struct Collection * instance_collection
struct Object * proxy_from
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
int(* get_constraint_targets)(struct bConstraint *con, struct ListBase *list)
void(* flush_constraint_targets)(struct bConstraint *con, struct ListBase *list, bool no_copy)
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
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)