public static RenderScene Merge(IEnumerable <RenderScene> scenes) { if (scenes == null) { return(Empty); } var count = scenes.Sum(s => s?.Count ?? 0); if (count <= 0) { return(Empty); } var collection = new RenderObjectCollection(count); var index = 0; foreach (var scene in scenes) { if (scene == null) { continue; } scene.CopyTo(collection, index); index += scene.Count; } return(collection); }
public VisibilityGroup(RenderSystem renderSystem) { RenderSystem = renderSystem; RenderObjects = new RenderObjectCollection(this); RenderData.Initialize(ComputeDataArrayExpectedSize); // Create RenderStageMask key, and keep track of number of RenderStages.Count for future resizing RenderStageMaskKey = RenderData.CreateStaticObjectKey<uint>(null, stageMaskMultiplier = (RenderSystem.RenderStages.Count + RenderStageMaskSizePerEntry - 1) / RenderStageMaskSizePerEntry); Array.Resize(ref viewRenderStageMask, stageMaskMultiplier); RenderSystem.RenderStages.CollectionChanged += RenderStages_CollectionChanged; RenderSystem.RenderStageSelectorsChanged += RenderSystem_RenderStageSelectorsChanged; RenderSystem.RenderFeatures.CollectionChanged += RenderFeatures_CollectionChanged; }
public static RenderScene Merge(RenderScene a, RenderScene b) { if (a == null && b == null) { return(RenderScene.Empty); } if (a == null || a.Count <= 0) { return(b); } if (b == null || b.Count <= 0) { return(a); } var collection = new RenderObjectCollection(a.Count + b.Count); a.CopyTo(collection, 0); b.CopyTo(collection, a.Count); return(collection); }