From 2b838dfd9c5df362aa94207d63080774a4cc7083 Mon Sep 17 00:00:00 2001 From: Kleber Garcia Date: Wed, 27 Oct 2021 12:22:22 -0400 Subject: [PATCH] Changes to help with scene reloading when SRP code changes --- .../Runtime/BatchRenderer/RenderBRG.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/com.unity.render-pipelines.core/Runtime/BatchRenderer/RenderBRG.cs b/com.unity.render-pipelines.core/Runtime/BatchRenderer/RenderBRG.cs index e45b803ff9e..1e2225426c3 100644 --- a/com.unity.render-pipelines.core/Runtime/BatchRenderer/RenderBRG.cs +++ b/com.unity.render-pipelines.core/Runtime/BatchRenderer/RenderBRG.cs @@ -797,6 +797,7 @@ public void Destroy() public class RenderBRG : MonoBehaviour { + private static bool s_QueryLoadedScenes = true; private Dictionary m_Scenes = new(); private void OnEnable() @@ -805,6 +806,17 @@ private void OnEnable() SceneManager.sceneUnloaded += OnSceneUnloaded; List toAdd = new List(); + + //During play mode, if we reload the render pipeline, this will help during restart to reparse any previously loaded scenes. + if (s_QueryLoadedScenes) + { + for (int s = 0; s < SceneManager.sceneCount; ++s) + { + toAdd.Add(SceneManager.GetSceneAt(s)); + } + s_QueryLoadedScenes = false; + } + foreach (var sceneBrg in m_Scenes) { if (sceneBrg.Value == null) @@ -851,6 +863,9 @@ private static void GetValidChildRenderers(GameObject root, List t private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { + if (m_Scenes.TryGetValue(scene, out var existingBRG) && existingBRG != null) + return; + var renderers = new List(); foreach (var go in scene.GetRootGameObjects()) GetValidChildRenderers(go, renderers);