Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2022-10-04 11:53:05 +0300
committerBastien Montagne <bastien@blender.org>2022-10-04 11:53:05 +0300
commit501fff40e8b8875198bb557f70f20528f3ab59a2 (patch)
treea2421813f1a877aa42fbdebda148a6a4e95b1282
parent6b76381e0a52cf15513087e470a4a4c07471acc6 (diff)
New viewlayer deferred resync code: add utils to ensure resync of whole Scene and Main.
Similar to existing `BKE_main_collection_sync` and `BKE_scene_collection_sync`, in some cases code does not have access to a specific view layer, and/or does not know exactly which view layer needs to be in sync, or just need the full data to be up to date.
-rw-r--r--source/blender/blenkernel/BKE_layer.h3
-rw-r--r--source/blender/blenkernel/intern/layer.c17
2 files changed, 20 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 8cfc9ef8be9..88a340b11a7 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -585,6 +585,9 @@ struct LayerCollection *BKE_view_layer_active_collection_get(struct ViewLayer *v
void BKE_view_layer_need_resync_tag(struct ViewLayer *view_layer);
void BKE_view_layer_synced_ensure(const struct Scene *scene, struct ViewLayer *view_layer);
+void BKE_scene_view_layers_synced_ensure(const struct Scene *scene);
+void BKE_main_view_layers_synced_ensure(const struct Main *bmain);
+
struct ViewLayerAOV *BKE_view_layer_add_aov(struct ViewLayer *view_layer);
void BKE_view_layer_remove_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
void BKE_view_layer_set_active_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 12472cf9dc5..fe11dc99bac 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -975,6 +975,23 @@ void BKE_view_layer_synced_ensure(const Scene *scene, struct ViewLayer *view_lay
}
}
+void BKE_scene_view_layers_synced_ensure(const Scene *scene)
+{
+ LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
+ BKE_view_layer_synced_ensure(scene, view_layer);
+ }
+}
+
+void BKE_main_view_layers_synced_ensure(const Main *bmain)
+{
+ for (const Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
+ BKE_scene_view_layers_synced_ensure(scene);
+ }
+
+ /* NOTE: This is not (yet?) covered by the dirty tag and deffered resync system */
+ BKE_layer_collection_local_sync_all(bmain);
+}
+
static void layer_collection_objects_sync(ViewLayer *view_layer,
LayerCollection *layer,
ListBase *r_lb_new_object_bases,