Depsgraph: Fix several ID blocks added multiple times to depsgraph

Ideally, we need to get rid of whole bmain iteration in depsgraph
construction, but then it's not clear which movie clips and such
to evaluate.
This commit is contained in:
Sergey Sharybin
2018-05-04 16:36:27 +02:00
parent d85fd8feeb
commit eccbca9e7d
2 changed files with 24 additions and 0 deletions

View File

@@ -1337,6 +1337,9 @@ void DepsgraphNodeBuilder::build_compositor(Scene *scene)
void DepsgraphNodeBuilder::build_gpencil(bGPdata *gpd)
{
if (built_map_.checkIsBuiltAndTag(gpd)) {
return;
}
ID *gpd_id = &gpd->id;
/* TODO(sergey): what about multiple users of same datablock? This should
@@ -1351,6 +1354,9 @@ void DepsgraphNodeBuilder::build_gpencil(bGPdata *gpd)
void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file)
{
if (built_map_.checkIsBuiltAndTag(cache_file)) {
return;
}
ID *cache_file_id = &cache_file->id;
/* Animation, */
build_animdata(cache_file_id);
@@ -1361,6 +1367,9 @@ void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file)
void DepsgraphNodeBuilder::build_mask(Mask *mask)
{
if (built_map_.checkIsBuiltAndTag(mask)) {
return;
}
ID *mask_id = &mask->id;
Mask *mask_cow = get_cow_datablock(mask);
/* F-Curve based animation. */
@@ -1379,6 +1388,9 @@ void DepsgraphNodeBuilder::build_mask(Mask *mask)
void DepsgraphNodeBuilder::build_movieclip(MovieClip *clip)
{
if (built_map_.checkIsBuiltAndTag(clip)) {
return;
}
ID *clip_id = &clip->id;
MovieClip *clip_cow = get_cow_datablock(clip);
/* Animation. */

View File

@@ -1983,6 +1983,9 @@ void DepsgraphRelationBuilder::build_compositor(Scene *scene)
void DepsgraphRelationBuilder::build_gpencil(bGPdata *gpd)
{
if (built_map_.checkIsBuiltAndTag(gpd)) {
return;
}
/* animation */
build_animdata(&gpd->id);
@@ -1991,12 +1994,18 @@ void DepsgraphRelationBuilder::build_gpencil(bGPdata *gpd)
void DepsgraphRelationBuilder::build_cachefile(CacheFile *cache_file)
{
if (built_map_.checkIsBuiltAndTag(cache_file)) {
return;
}
/* Animation. */
build_animdata(&cache_file->id);
}
void DepsgraphRelationBuilder::build_mask(Mask *mask)
{
if (built_map_.checkIsBuiltAndTag(mask)) {
return;
}
ID *mask_id = &mask->id;
/* F-Curve animation. */
build_animdata(mask_id);
@@ -2013,6 +2022,9 @@ void DepsgraphRelationBuilder::build_mask(Mask *mask)
void DepsgraphRelationBuilder::build_movieclip(MovieClip *clip)
{
if (built_map_.checkIsBuiltAndTag(clip)) {
return;
}
/* Animation. */
build_animdata(&clip->id);
}