Commit: 5ecbc7c0f201af1ef5903a1aa8e1abfd2b853cdd
Author: Bastien Montagne
Date: Wed Jun 14 15:20:15 2017 +0200
Branches: id_override_static
https://developer.blender.org/rB5ecbc7c0f201af1ef5903a1aa8e1abfd2b853cdd
Merge branch 'master' into id_override_static
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/library_remap.c
index 70233386727,01ad4fb86ce..494c87c8a55
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@@ -730,36 -729,11 +730,15 @@@ void BKE_libblock_free_data(ID *id, con
IDP_FreeProperty_ex(id->properties, do_id_user);
MEM_freeN(id->properties);
}
+
+ if (id->override) {
+ BKE_override_free(&id->override);
+ }
}
- /**
- * used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c
- *
- * \param do_id_user: if \a true, try to release other ID's 'references' hold
by \a idv.
- * (only applies to main database)
- * \param do_ui_user: similar to do_id_user but makes sure UI does not hold
references to
- * \a id.
- */
- void BKE_libblock_free_ex(Main *bmain, void *idv, const bool do_id_user,
const bool do_ui_user)
+ void BKE_libblock_free_datablock(ID *id)
{
- ID *id = idv;
- short type = GS(id->name);
- ListBase *lb = which_libbase(bmain, type);
-
- DAG_id_type_tag(bmain, type);
-
- #ifdef WITH_PYTHON
- BPY_id_release(id);
- #endif
-
- if (do_id_user) {
- BKE_libblock_relink_ex(bmain, id, NULL, NULL, true);
- }
-
+ const short type = GS(id->name);
switch (type) {
case ID_SCE:
BKE_scene_free((Scene *)id);
diff --cc source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 99041074dfb,55f1f93be6a..0c2f1775dd6
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@@ -161,31 -160,9 +161,26 @@@ DepsgraphNodeBuilder::~DepsgraphNodeBui
{
}
- RootDepsNode *DepsgraphNodeBuilder::add_root_node()
- {
- return m_graph->add_root_node();
- }
-
IDDepsNode *DepsgraphNodeBuilder::add_id_node(ID *id)
{
- return m_graph->add_id_node(id, id->name);
+ IDDepsNode *id_node = m_graph->find_id_node(id);
+
+ if (id_node == NULL) {
+ id_node = m_graph->add_id_node(id, id->name);
+
+ if (id->override != NULL && (id->flag & LIB_AUTOOVERRIDE) != 0)
{
+ ComponentDepsNode *comp_node =
id_node->add_component(DEG_NODE_TYPE_PARAMETERS, "override_generator");
+ comp_node->owner = id_node;
+
+ /* TDOD We most certainly do not want to run this on
every deg evaluation! Especially not during animation? */
+ /* Ideally, putting this in some kind of queue (only
one entry per ID in whole queue) and consuming it in a
+ * low-priority background thread would be ideal, but
we need to ensure IDs remain valid for the thread? */
+ add_operation_node(comp_node,
function_bind(BKE_override_operations_create, id, false),
+ DEG_OPCODE_OPERATION,
"override_generator", 0);
+ }
+ }
+
+ return id_node;
}
TimeSourceDepsNode *DepsgraphNodeBuilder::add_time_source()
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs