Depsgraph: Cleanup, use some utility functions to shorten construction code
Still some cleanup is possible.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user