diff options
author | Jacques Lucke <jacques@blender.org> | 2020-03-11 16:18:22 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-03-11 16:18:22 +0300 |
commit | 836b99ce4926eea91655eb7642aea40d29b286df (patch) | |
tree | 716a2007d636f813b88013a08d2e61cb3a805a19 /source | |
parent | 6eeaecdd67f6b5adbaf85ccf46907e853eade691 (diff) |
Fix T74296: Free depsgraph when view layer is removed
Reviewers: sergey
Differential Revision: https://developer.blender.org/D7110
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_scene.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 8 | ||||
-rw-r--r-- | source/blender/editors/scene/scene_edit.c | 2 |
3 files changed, 11 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 90e5459b599..8018178fcee 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -215,6 +215,7 @@ int BKE_scene_multiview_num_videos_get(const struct RenderData *rd); void BKE_scene_allocate_depsgraph_hash(struct Scene *scene); void BKE_scene_ensure_depsgraph_hash(struct Scene *scene); void BKE_scene_free_depsgraph_hash(struct Scene *scene); +void BKE_scene_free_view_layer_depsgraph(struct Scene *scene, struct ViewLayer *view_layer); struct Depsgraph *BKE_scene_get_depsgraph(struct Main *bmain, struct Scene *scene, diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 37049014ef7..027933e17c6 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -2057,6 +2057,14 @@ void BKE_scene_free_depsgraph_hash(Scene *scene) scene->depsgraph_hash = NULL; } +void BKE_scene_free_view_layer_depsgraph(Scene *scene, ViewLayer *view_layer) +{ + if (scene->depsgraph_hash != NULL) { + DepsgraphKey key = {view_layer}; + BLI_ghash_remove(scene->depsgraph_hash, &key, depsgraph_key_free, depsgraph_key_value_free); + } +} + /* Query depsgraph for a specific contexts. */ Depsgraph *BKE_scene_get_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer, bool allocate) diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c index ad940a8e87d..114cb54636a 100644 --- a/source/blender/editors/scene/scene_edit.c +++ b/source/blender/editors/scene/scene_edit.c @@ -182,6 +182,8 @@ bool ED_scene_view_layer_delete(Main *bmain, Scene *scene, ViewLayer *layer, Rep } } + BKE_scene_free_view_layer_depsgraph(scene, layer); + BKE_view_layer_free(layer); DEG_id_tag_update(&scene->id, 0); |