[Bf-blender-cvs] [cf95267456a] blender2.8: Merge branch 'master' into blender2.8
Sergey Sharybin
noreply at git.blender.org
Mon Apr 16 16:19:09 CEST 2018
Commit: cf95267456a0c4f988691ecc822c211ff7849c55
Author: Sergey Sharybin
Date: Mon Apr 16 16:17:03 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBcf95267456a0c4f988691ecc822c211ff7849c55
Merge branch 'master' into blender2.8
===================================================================
===================================================================
diff --cc source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index a5a28ce0a8c,b3f6958e9c3..92af811dab4
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@@ -325,64 -262,49 +325,101 @@@ ID *DepsgraphNodeBuilder::ensure_cow_id
/* **** Build functions for entity nodes **** */
void DepsgraphNodeBuilder::begin_build() {
+ if (DEG_depsgraph_use_copy_on_write()) {
+ /* Store existing copy-on-write versions of datablock, so we can re-use
+ * them for new ID nodes.
+ */
+ cow_id_hash_ = BLI_ghash_ptr_new("Depsgraph id hash");
+ foreach (IDDepsNode *id_node, graph_->id_nodes) {
+ if (deg_copy_on_write_is_expanded(id_node->id_cow)) {
+ if (id_node->id_orig == id_node->id_cow) {
+ continue;
+ }
+ BLI_ghash_insert(cow_id_hash_,
+ id_node->id_orig,
+ id_node->id_cow);
+ id_node->id_cow = NULL;
+ }
+ }
+ }
+
+ GSET_FOREACH_BEGIN(OperationDepsNode *, op_node, graph_->entry_tags)
+ {
+ ComponentDepsNode *comp_node = op_node->owner;
+ IDDepsNode *id_node = comp_node->owner;
+
+ SavedEntryTag entry_tag;
+ entry_tag.id = id_node->id_orig;
+ entry_tag.component_type = comp_node->type;
+ entry_tag.opcode = op_node->opcode;
+ saved_entry_tags_.push_back(entry_tag);
+ };
+ GSET_FOREACH_END();
+
+ /* Make sure graph has no nodes left from previous state. */
+ graph_->clear_all_nodes();
+ graph_->operations.clear();
+ BLI_gset_clear(graph_->entry_tags, NULL);
+}
+
+void DepsgraphNodeBuilder::end_build()
+{
+ foreach (const SavedEntryTag& entry_tag, saved_entry_tags_) {
+ IDDepsNode *id_node = find_id_node(entry_tag.id);
+ if (id_node == NULL) {
+ continue;
+ }
+ ComponentDepsNode *comp_node =
+ id_node->find_component(entry_tag.component_type);
+ if (comp_node == NULL) {
+ continue;
+ }
+ OperationDepsNode *op_node = comp_node->find_operation(entry_tag.opcode);
+ if (op_node == NULL) {
+ continue;
+ }
+ op_node->tag_update(graph_);
+ }
}
+ void DepsgraphNodeBuilder::build_id(ID* id) {
+ if (id == NULL) {
+ return;
+ }
+ switch (GS(id->name)) {
- case ID_SCE:
- build_scene((Scene *)id);
- break;
+ case ID_GR:
- build_group(NULL, (Group *)id);
++ build_group((Group *)id);
+ break;
+ case ID_OB:
- build_object(NULL, (Object *)id);
++ build_object(-1, (Object *)id, DEG_ID_LINKED_INDIRECTLY);
+ break;
+ case ID_NT:
+ build_nodetree((bNodeTree *)id);
+ break;
+ case ID_MA:
+ build_material((Material *)id);
+ break;
+ case ID_TE:
+ build_texture((Tex *)id);
+ break;
+ case ID_IM:
+ build_image((Image *)id);
+ break;
+ case ID_WO:
+ build_world((World *)id);
+ break;
+ case ID_MSK:
+ build_mask((Mask *)id);
+ break;
+ case ID_MC:
+ build_movieclip((MovieClip *)id);
+ break;
+ default:
+ fprintf(stderr, "Unhandled ID %s\n", id->name);
+ }
+ }
+
-void DepsgraphNodeBuilder::build_group(Base *base, Group *group)
+void DepsgraphNodeBuilder::build_group(Group *group)
{
if (built_map_.checkIsBuiltAndTag(group)) {
return;
diff --cc source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index df94671b4c6,f2154e58703..757cacc6050
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@@ -157,16 -126,10 +157,17 @@@ struct DepsgraphNodeBuilder
const char *name = "",
int name_tag = -1);
+ void build_id(ID* id);
- void build_scene(Scene *scene);
- void build_group(Base *base, Group *group);
- void build_object(Base *base, Object *object);
+ void build_view_layer(Scene *scene,
+ ViewLayer *view_layer,
+ eDepsNode_LinkedState_Type linked_state);
+ void build_group(Group *group);
+ void build_object(int base_index,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state);
+ void build_object_flags(int base_index,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state);
void build_object_data(Object *object);
void build_object_transform(Object *object);
void build_object_constraints(Object *object);
More information about the Bf-blender-cvs
mailing list