diff --git a/Engine.Systems/Graphics/TriangleBatcher.cs b/Engine.Systems/Graphics/TriangleBatcher.cs index 8373833..d1c78fd 100644 --- a/Engine.Systems/Graphics/TriangleBatcher.cs +++ b/Engine.Systems/Graphics/TriangleBatcher.cs @@ -4,12 +4,12 @@ using Engine.Core; namespace Engine.Systems.Graphics; -public class TriangleBatcher : Behaviour, IFirstFrameUpdate, IDraw +public class TriangleBatcher : Behaviour, IFirstFrameUpdate, ILastFrameUpdate, IDraw { private static Comparer SortByAscendingPriority() => Comparer.Create((x, y) => x.CompareTo(y)); private static System.Func GetPriority() => (b) => b.Priority; - private ITriangleBatch triangleBatch = null!; + private readonly BehaviourCollector triangleBatches = new(); private ICamera camera = null!; private readonly ActiveBehaviourCollectorOrdered drawableShapes = new(GetPriority(), SortByAscendingPriority()); @@ -18,16 +18,25 @@ public class TriangleBatcher : Behaviour, IFirstFrameUpdate, IDraw { camera = Universe.FindRequiredBehaviour(); - triangleBatch = Universe.FindRequiredBehaviour(); - drawableShapes.Unassign(); drawableShapes.Assign(Universe); + triangleBatches.Assign(Universe); } public void Draw() { - triangleBatch.Begin(camera.ViewMatrix, camera.ProjectionMatrix); - for (int i = 0; i < drawableShapes.Count; i++) - drawableShapes[i].Draw(triangleBatch); - triangleBatch.End(); + for (int i = 0; i < triangleBatches.Count; i++) + { + ITriangleBatch triangleBatch = triangleBatches[i]; + triangleBatch.Begin(camera.ViewMatrix, camera.ProjectionMatrix); + for (int j = 0; j < drawableShapes.Count; j++) + drawableShapes[j].Draw(triangleBatch); + triangleBatch.End(); + } + } + + public void LastActiveFrame() + { + triangleBatches.Unassign(); + drawableShapes.Unassign(); } }