Ejemplo n.º 1
0
        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);
        }