136 view_layer_(nullptr),
137 view_layer_index_(-1),
138 collection_(nullptr),
139 is_parent_collection_visible_(true)
146 if (id_info->id_cow !=
nullptr) {
160 ID *id_cow =
nullptr;
165 if (id_info !=
nullptr) {
171 id_info->
id_cow =
nullptr;
174 id_node->previously_visible_components_mask = previously_visible_components_mask;
175 id_node->previous_eval_flags = previous_eval_flags;
176 id_node->previous_customdata_masks = previous_customdata_masks;
202 const char *comp_name)
217 if (op_node ==
nullptr) {
218 op_node = comp_node->
add_operation(op, opcode, name, name_tag);
223 "add_operation: Operation already exists - %s has %s at %p\n",
234 const char *comp_name,
256 const char *comp_name,
263 if (operation !=
nullptr) {
277 if (operation !=
nullptr) {
285 const char *comp_name,
295 const char *comp_name,
349 id_info->
id_cow =
nullptr;
386 if (comp_node ==
nullptr) {
390 entry_tag.opcode, entry_tag.name.c_str(), entry_tag.name_tag);
391 if (op_node ==
nullptr) {
545 const bool is_collection_restricted = (collection->
flag & restrict_flag);
550 if (is_collection_visible &&
id_node->is_directly_visible ==
false &&
551 id_node->is_collection_fully_expanded ==
true) {
556 else if (from_layer_collection ==
nullptr && !
id_node->is_collection_fully_expanded) {
567 id_node->is_directly_visible = is_collection_visible;
572 if (from_layer_collection !=
nullptr) {
594 id_node->is_collection_fully_expanded =
true;
602 if (object->
proxy !=
nullptr) {
603 object->proxy->proxy_from = object;
617 id_node->is_directly_visible |= is_visible;
618 id_node->has_base |= (base_index != -1);
631 id_node->linked_state = linked_state;
636 id_node->is_directly_visible =
true;
639 id_node->is_directly_visible = is_visible;
641 id_node->has_base |= (base_index != -1);
647 if (object->
parent !=
nullptr) {
654 data.is_parent_visible = is_visible;
661 data.is_parent_visible = is_visible;
668 data.is_parent_visible = is_visible;
675 data.is_parent_visible = is_visible;
696 (object->
pd->
tex !=
nullptr)) {
714 BKE_object_sync_to_original(depsgraph, object_cow);
737 if (base_index == -1) {
748 [view_layer_index =
view_layer_index_, scene_cow, object_cow, base_index, is_from_set](
750 BKE_object_eval_eval_base_flags(
751 depsgraph, scene_cow, view_layer_index, object_cow, base_index, is_from_set);
784 if (object->
data ==
nullptr) {
788 switch (object->
type) {
831 if (materials_ptr !=
nullptr) {
875 [ob_cow](::
Depsgraph *
depsgraph) { BKE_object_eval_local_transform(depsgraph, ob_cow); });
877 if (object->
parent !=
nullptr) {
893 [ob_cow](::
Depsgraph *
depsgraph) { BKE_object_eval_uber_transform(depsgraph, ob_cow); });
902 [ob_cow](::
Depsgraph *
depsgraph) { BKE_object_eval_transform_final(depsgraph, ob_cow); });
932 BKE_object_eval_constraints(depsgraph, scene_cow, object_cow);
947 BKE_object_eval_ptcache_reset(depsgraph, scene_cow, object_cow);
961 if (adt ==
nullptr) {
964 if (adt->
action !=
nullptr) {
989 int driver_index = 0;
999 if (strip->act !=
nullptr) {
1002 else if (strip->strips.first !=
nullptr) {
1064 if (dtar->id ==
nullptr) {
1070 if ((
GS(dtar->id->name) ==
ID_OB) && (((
Object *)dtar->id)->proxy_from !=
nullptr)) {
1082 if (
id ==
nullptr || rna_path ==
nullptr) {
1092 if (prop ==
nullptr) {
1185 [scene_cow](::
Depsgraph *
depsgraph) { BKE_rigidbody_rebuild_sim(depsgraph, scene_cow); });
1191 BKE_rigidbody_eval_simulation(depsgraph,
1198 if (rbw->
group !=
nullptr) {
1201 if (object->type !=
OB_MESH) {
1204 if (object->rigidbody_object ==
nullptr) {
1220 BKE_rigidbody_object_sync_transforms(depsgraph, scene_cow, object_cow);
1229 if (rbc ==
nullptr || rbc->
ob1 ==
nullptr || rbc->
ob2 ==
nullptr) {
1279 if (
ELEM(particle_target->ob,
nullptr,
object)) {
1323 BKE_particle_settings_eval_reset(depsgraph, particle_settings_cow);
1329 for (
MTex *mtex : particle_settings->
mtex) {
1330 if (mtex ==
nullptr || mtex->
tex ==
nullptr) {
1373 BKE_object_eval_uber_data(depsgraph, scene_cow, object_cow);
1388 [object_cow](::
Depsgraph *
depsgraph) { BKE_object_select_update(depsgraph, object_cow); });
1438 if (cu->
bevobj !=
nullptr) {
1524 BKE_armature_refresh_layer_used(depsgraph, armature_cow);
1585 if (
ntree ==
nullptr) {
1612 if (
id ==
nullptr) {
1616 if (id_type ==
ID_MA) {
1619 else if (id_type ==
ID_TE) {
1622 else if (id_type ==
ID_IM) {
1625 else if (id_type ==
ID_OB) {
1629 else if (id_type ==
ID_SCE) {
1636 if (node_scene->
camera !=
nullptr) {
1641 else if (id_type ==
ID_TXT) {
1644 else if (id_type ==
ID_MSK) {
1647 else if (id_type ==
ID_MC) {
1655 BLI_assert(!
"Unknown ID type used for node");
1683 [material_cow](::
Depsgraph *
depsgraph) { BKE_material_eval(depsgraph, material_cow); });
1694 for (
int i = 0; i < num_materials; i++) {
1695 if (materials[i] ==
nullptr) {
1717 if (
texture->ima !=
nullptr) {
1741 ID *cache_file_id = &cache_file->
id;
1782 for (
int i = 0; i < spline->tot_point; i++) {
1785 if (parent ==
nullptr || parent->
id ==
nullptr) {
1812 ID *clip_id = &clip->
id;
1856 if (speaker->
sound !=
nullptr) {
1872 BKE_sound_evaluate(depsgraph, bmain, sound_cow);
1897 BKE_simulation_data_update(depsgraph, scene_cow, simulation_cow);
1915 BKE_scene_eval_sequencer_sequences(depsgraph, scene_cow);
1921 if (seq->
sound !=
nullptr) {
1924 if (seq->
scene !=
nullptr) {
1956 BKE_scene_update_tag_audio_volume(depsgraph, scene_cow);
1963 Object *
object = base->object;
1981 if (
id ==
nullptr) {
1988 data->builder->build_object(
1992 data->builder->build_id(
id);
2004 if (
id ==
nullptr) {
2011 data->builder->build_object(
2015 data->builder->build_id(
id);
Blender kernel action and pose functionality.
struct AnimData * BKE_animdata_from_id(struct ID *id)
void BKE_animsys_eval_animdata(struct Depsgraph *depsgraph, struct ID *id)
void BKE_animsys_eval_driver(struct Depsgraph *depsgraph, struct ID *id, int driver_index, struct FCurve *fcu_orig)
void BKE_cachefile_eval(struct Main *bmain, struct Depsgraph *depsgraph, struct CacheFile *cache_file)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
void BKE_constraints_id_loop(struct ListBase *list, ConstraintIDFunc func, void *userdata)
void BKE_curve_eval_geometry(struct Depsgraph *depsgraph, struct Curve *curve)
#define DRIVER_TARGETS_USED_LOOPER_BEGIN(dvar)
#define DRIVER_TARGETS_LOOPER_END
void BKE_gpencil_frame_active_set(struct Depsgraph *depsgraph, struct bGPdata *gpd)
void void BKE_gpencil_modifiers_foreach_ID_link(struct Object *ob, GreasePencilIDWalkFunc walk, void *userData)
void IDP_foreach_property(struct IDProperty *id_property_root, const int type_filter, IDPForeachPropertyCallback callback, void *user_data)
void BKE_image_user_id_eval_animation(struct Depsgraph *depsgraph, struct ID *id)
bool BKE_image_user_id_has_animation(struct ID *id)
struct Key * BKE_key_from_id(struct ID *id)
void BKE_lattice_eval_geometry(struct Depsgraph *depsgraph, struct Lattice *latt)
struct ViewLayer * BKE_view_layer_default_render(const struct Scene *scene)
#define MAIN_ID_SESSION_UUID_UNSET
General operations, lookup, etc. for blender lights.
void BKE_mask_eval_update(struct Depsgraph *depsgraph, struct Mask *mask)
void BKE_mask_eval_animation(struct Depsgraph *depsgraph, struct Mask *mask)
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)
void BKE_mesh_eval_geometry(struct Depsgraph *depsgraph, struct Mesh *mesh)
void BKE_modifiers_foreach_ID_link(struct Object *ob, IDWalkFunc walk, void *userData)
void BKE_movieclip_eval_update(struct Depsgraph *depsgraph, struct Main *bmain, struct MovieClip *clip)
void BKE_movieclip_eval_selection_update(struct Depsgraph *depsgraph, struct MovieClip *clip)
#define NODE_CUSTOM_GROUP
General operations, lookup, etc. for blender objects.
void BKE_object_data_select_update(struct Depsgraph *depsgraph, struct ID *object_data)
void BKE_particle_system_eval_init(struct Depsgraph *depsgraph, struct Object *object)
bool BKE_ptcache_object_has(struct Scene *scene, struct Object *ob, int duplis)
API for Blender-side Rigid Body stuff.
void BKE_shaderfx_foreach_ID_link(struct Object *ob, ShaderFxIDWalkFunc walk, void *userData)
void BKE_volume_eval_geometry(struct Depsgraph *depsgraph, struct Volume *volume)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
@ LIB_TAG_COPIED_ON_WRITE
#define ID_IS_LINKED(_id)
Object groups, one object can be in many groups at once.
@ COLLECTION_RESTRICT_RENDER
@ COLLECTION_RESTRICT_VIEWPORT
Object is a sort of wrapper for general info.
Types and defines for representing Rigid Body entities.
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)
void append(const T &value)
bool checkIsBuiltAndTag(ID *id, int tag=TAG_COMPLETE)
bool checkIsBuilt(ID *id, int tag=TAG_COMPLETE) const
virtual bool need_pull_base_into_graph(Base *base)
virtual void build_scene_parameters(Scene *scene)
virtual void build_object_data_geometry_datablock(ID *obdata, bool is_object_visible)
virtual void build_scene_sequencer(Scene *scene)
virtual void build_object_data_camera(Object *object)
ID * ensure_cow_id(ID *id_orig)
IDNode * find_id_node(ID *id)
virtual void build_object_pointcache(Object *object)
virtual void build_animdata(ID *id)
static void modifier_walk(void *user_data, struct Object *object, struct ID **idpoin, int cb_flag)
virtual void build_world(World *world)
virtual void build_object(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state, bool is_visible)
virtual void build_object_proxy_group(Object *object, bool is_object_visible)
OperationNode * ensure_operation_node(ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const DepsEvalOperationCb &op=nullptr, const char *name="", int name_tag=-1)
IDNode * add_id_node(ID *id)
virtual void build_freestyle_linestyle(FreestyleLineStyle *linestyle)
virtual void build_scene_speakers(Scene *scene, ViewLayer *view_layer)
virtual void build_cachefile(CacheFile *cache_file)
virtual void build_object_instance_collection(Object *object, bool is_object_visible)
virtual void build_object_data_speaker(Object *object)
OperationNode * add_operation_node(ComponentNode *comp_node, OperationCode opcode, const DepsEvalOperationCb &op=nullptr, const char *name="", int name_tag=-1)
virtual void build_texture(Tex *tex)
virtual void build_particle_settings(ParticleSettings *part)
static void constraint_walk(bConstraint *constraint, ID **idpoin, bool is_reference, void *user_data)
virtual void build_particle_systems(Object *object, bool is_object_visible)
virtual void build_dimensions(Object *object)
virtual void build_armature(bArmature *armature)
virtual void build_scene_audio(Scene *scene)
virtual void build_simulation(Simulation *simulation)
ComponentNode * add_component_node(ID *id, NodeType comp_type, const char *comp_name="")
virtual void build_id(ID *id)
virtual void build_driver_variables(ID *id, FCurve *fcurve)
virtual void build_shapekeys(Key *key)
virtual void build_action(bAction *action)
virtual void build_animdata_nlastrip_targets(ListBase *strips)
virtual void build_animation_images(ID *id)
virtual void build_material(Material *ma)
virtual void build_materials(Material **materials, int num_materials)
virtual void build_collection(LayerCollection *from_layer_collection, Collection *collection)
virtual void build_rigidbody(Scene *scene)
virtual void build_object_transform(Object *object)
OperationNode * find_operation_node(ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const char *name="", int name_tag=-1)
virtual void build_movieclip(MovieClip *clip)
Vector< SavedEntryTag > saved_entry_tags_
virtual void build_object_data_light(Object *object)
Map< uint, IDInfo * > id_info_hash_
virtual void build_proxy_rig(Object *object, bool is_object_visible)
virtual void build_rig(Object *object, bool is_object_visible)
bool is_parent_collection_visible_
virtual void build_image(Image *image)
virtual void build_speaker(Speaker *speaker)
virtual void build_sound(bSound *sound)
DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph, DepsgraphBuilderCache *cache)
virtual void build_object_data(Object *object, bool is_object_visible)
virtual void build_object_proxy_from(Object *object, bool is_object_visible)
virtual void build_object_flags(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state)
ID * get_cow_id(const ID *id_orig) const
TimeSourceNode * add_time_source()
virtual void build_driver_id_property(ID *id, const char *rna_path)
virtual void build_parameters(ID *id)
virtual void build_lightprobe(LightProbe *probe)
virtual void build_nodetree(bNodeTree *ntree)
virtual void build_idproperties(IDProperty *id_property)
virtual void build_camera(Camera *camera)
virtual void build_light(Light *lamp)
virtual void build_armature_bones(ListBase *bones)
virtual void build_driver(ID *id, FCurve *fcurve, int driver_index)
virtual void begin_build()
virtual void build_mask(Mask *mask)
bool has_operation_node(ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const char *name="", int name_tag=-1)
virtual void build_object_data_geometry(Object *object, bool is_object_visible)
virtual void build_nodetree_socket(bNodeSocket *socket)
virtual void build_object_data_lightprobe(Object *object)
virtual void build_generic_id(ID *id)
virtual void build_object_constraints(Object *object)
T * get_cow_datablock(const T *orig) const
virtual void build_object_from_layer(int base_index, Object *object, eDepsNode_LinkedState_Type linked_state)
FreestyleLineStyle linestyle
const Depsgraph * depsgraph
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static void build_idproperties_callback(IDProperty *id_property, void *user_data)
bool deg_copy_on_write_is_needed(const ID *id_orig)
@ GENERIC_DATABLOCK_UPDATE
@ TRANSFORM_SIMULATION_INIT
@ OBJECT_FROM_LAYER_ENTRY
@ RIGIDBODY_TRANSFORM_COPY
@ SYNCHRONIZE_TO_ORIGINAL
@ PARTICLE_SETTINGS_RESET
@ MOVIECLIP_SELECT_UPDATE
uint64_t IDComponentsMask
eDepsNode_LinkedState_Type
@ DEG_ID_LINKED_INDIRECTLY
bool deg_copy_on_write_is_expanded(const ID *id_cow)
void deg_evaluate_copy_on_write(struct ::Depsgraph *graph, const IDNode *id_node)
void deg_free_copy_on_write_datablock(ID *id_cow)
function< void(struct ::Depsgraph *)> DepsEvalOperationCb
@ DEG_UPDATE_SOURCE_USER_EDIT
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_property_is_idprop(const PropertyRNA *prop)
struct Object * focus_object
struct CameraDOFSettings dof
struct Object * textoncurve
struct bNodeTree * nodetree
unsigned int session_uuid
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct Object * proxy_group
struct Collection * instance_collection
struct Object * proxy_from
ListBase greasepencil_modifiers
struct Collection * instance_collection
struct Object * instance_object
struct Collection * constraints
struct Collection * group
struct RigidBodyWorld * rigidbody_world
struct bNodeTree * nodetree
struct bNodeTree * nodetree
OperationNode * find_operation(OperationIDKey key) const
OperationNode * add_operation(const DepsEvalOperationCb &op, OperationCode opcode, const char *name, int name_tag)
OperationNode * entry_operation
virtual string identifier() const override
DEGCustomDataMeshMasks previous_customdata_masks
IDComponentsMask previously_visible_components_mask
uint32_t previous_eval_flags
ID * get_cow_id(const ID *id_orig) const
IDNode * find_id_node(const ID *id) const
IDNode * add_id_node(ID *id, ID *id_cow_hint=nullptr)
OperationNodes operations
TimeSourceNode * add_time_source()
Set< OperationNode * > entry_tags
virtual void tag_update(Depsgraph *graph, eUpdateSource source) override
virtual string identifier() const override
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)