[Bf-blender-cvs] [836b99ce492] master: Fix T74296: Free depsgraph when view layer is removed

Jacques Lucke noreply at git.blender.org
Wed Mar 11 14:20:09 CET 2020


Commit: 836b99ce4926eea91655eb7642aea40d29b286df
Author: Jacques Lucke
Date:   Wed Mar 11 14:18:22 2020 +0100
Branches: master
https://developer.blender.org/rB836b99ce4926eea91655eb7642aea40d29b286df

Fix T74296: Free depsgraph when view layer is removed

Reviewers: sergey

Differential Revision: https://developer.blender.org/D7110

===================================================================

M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/scene/scene_edit.c

===================================================================

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);



More information about the Bf-blender-cvs mailing list