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