Esempio n. 1
0
    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);
    }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
    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);
    }