public static void Draw() { GetService <IEventService>().Notify(ServiceEvents.DrawStart); IRenderService rs = GetService <IRenderService>(); List <ServiceCompositionMetadata> outputs = new List <ServiceCompositionMetadata>(); foreach (IService service in orderedServices) { ServiceCompositionMetadata output = service.Draw(); if (rs.IsDrawing) { throw new Exception("Service finished drawing without calling End()"); } if (output != ServiceCompositionMetadata.Empty) { outputs.Add(output); } } var sortedOutputs = outputs.OrderBy(output => output.Priority); rs .SetRenderTarget(Implementations.RenderService.FINAL_TARGET_KEY, Color.Black) .SetDepthStencilState(DepthStencilState.None) .Start() .Render(() => { foreach (ServiceCompositionMetadata output in sortedOutputs) { if (output.CompositeEffect != rs.GetEffect()) { rs .End() .SetEffect(output.CompositeEffect) .Start(); } rs.DrawTargetAtPosition(output.RenderTargetKey, output.Position, Tint: output.Tint); } }) .End() .SetEffect(null) .Start() .StretchCurrentTargetToBackBuffer(ShouldLetterbox: true) .End(); GetService <IEventService>().Notify(ServiceEvents.DrawEnd); }