Depsgraph: Cleanup, use some utility functions to shorten construction code

Still some cleanup is possible.
This commit is contained in:
2017-07-27 15:08:29 +02:00
parent cf38371155
commit e90468e5a3
4 changed files with 24 additions and 9 deletions

View File

@@ -305,6 +305,17 @@ ID *DepsgraphNodeBuilder::ensure_cow_id(ID *id_orig)
return id_node->id_cow;
}
ID *DepsgraphNodeBuilder::expand_cow_id(IDDepsNode *id_node)
{
return deg_expand_copy_on_write_datablock(m_graph, id_node, this, true);
}
ID *DepsgraphNodeBuilder::expand_cow_id(ID *id_orig)
{
IDDepsNode *id_node = add_id_node(id_orig);
return expand_cow_id(id_node);
}
/* **** Build functions for entity nodes **** */
void DepsgraphNodeBuilder::begin_build(Main *bmain) {

View File

@@ -85,6 +85,16 @@ struct DepsgraphNodeBuilder {
return (T *)get_cow_id(&orig->id);
}
/* Get fully expanded (ready for use) copy-on-write datablock for the given
* original datablock.
*/
ID *expand_cow_id(IDDepsNode *id_node);
ID *expand_cow_id(ID *id_orig);
template<typename T>
T *expand_cow_datablock(T *orig) {
return (T *)expand_cow_id(&orig->id);
}
/* For a given COW datablock get corresponding original one. */
template<typename T>
T *get_orig_datablock(const T *cow) const {

View File

@@ -98,9 +98,7 @@ void DepsgraphNodeBuilder::build_scene_layer_collections(Scene *scene)
{
#ifdef WITH_COPY_ON_WRITE
/* Make sure we've got ID node, so we can get pointer to CoW datablock. */
IDDepsNode *id_node = add_id_node(&scene->id);
Scene *scene_cow = (Scene *)deg_expand_copy_on_write_datablock(
m_graph, id_node, this, true);
Scene *scene_cow = expand_cow_datablock(scene);
#else
Scene *scene_cow = scene;
#endif

View File

@@ -140,12 +140,8 @@ void DepsgraphNodeBuilder::build_rig(Scene *scene, Object *object)
* safely create object level pose.
*/
Scene *scene_cow = get_cow_datablock(scene);
IDDepsNode *object_id_node = add_id_node(&object->id);
Object *object_cow = (Object *)deg_expand_copy_on_write_datablock(
m_graph, object_id_node, this, true);
IDDepsNode *armature_id_node = add_id_node(&armature->id);
bArmature *armature_cow = (bArmature *)deg_expand_copy_on_write_datablock(
m_graph, armature_id_node, this, true);
Object *object_cow = expand_cow_datablock(object);
bArmature *armature_cow = expand_cow_datablock(armature);
#else
Scene *scene_cow = scene;
Object *object_cow = object;