void UpdateFrozenRenderBatches() { var staticChunksOrderVersion = EntityManager.GetComponentOrderVersion <FrozenRenderSceneTag>(); if (staticChunksOrderVersion == m_LastFrozenChunksOrderVersion) { return; } for (int i = 0; i < m_LastKnownSubsceneTagVersion.Length; i++) { var scene = m_LastKnownSubsceneTagVersion[i].Scene; var version = m_LastKnownSubsceneTagVersion[i].Version; if (EntityManager.GetSharedComponentOrderVersion(scene) != version) { // Debug.Log($"Removing scene:{scene:X8} batches"); Profiler.BeginSample("Remove Subscene"); m_SubsceneTagVersion.Remove(scene); m_InstancedRenderMeshBatchGroup.RemoveTag(scene); Profiler.EndSample(); } } m_LastKnownSubsceneTagVersion.Clear(); var loadedSceneTags = new List <FrozenRenderSceneTag>(); EntityManager.GetAllUniqueSharedComponentData(loadedSceneTags); for (var i = 0; i < loadedSceneTags.Count; i++) { var subsceneTag = loadedSceneTags[i]; int subsceneTagVersion = EntityManager.GetSharedComponentOrderVersion(subsceneTag); m_LastKnownSubsceneTagVersion.Add(new SubSceneTagOrderVersion { Scene = subsceneTag, Version = subsceneTagVersion }); var alreadyTrackingSubscene = m_SubsceneTagVersion.TryGetValue(subsceneTag, out var _); if (alreadyTrackingSubscene) { continue; } m_FrozenGroup.SetFilter(subsceneTag); //@TODO - revert to CreateArchetypeChunkArray once it supports filtering //var filteredChunks = m_FrozenGroup.CreateArchetypeChunkArray(Allocator.TempJob); var filteredChunks = m_FrozenGroup.GetAllMatchingChunks(Allocator.TempJob); m_FrozenGroup.ResetFilter(); m_SubsceneTagVersion.TryAdd(subsceneTag, subsceneTagVersion); Profiler.BeginSample("CacheMeshBatchRenderGroup"); CacheMeshBatchRendererGroup(subsceneTag, filteredChunks, filteredChunks.Length); Profiler.EndSample(); filteredChunks.Dispose(); } m_LastFrozenChunksOrderVersion = staticChunksOrderVersion; }