Exemplo n.º 1
0
        private void Render(Scene scene)
        {
            bool renderOverlay = DrawDirtyRects || DrawFps;
            bool composite     = false;

            if (RenderTarget == null)
            {
                RenderTarget = ((IRenderRoot)_root).CreateRenderTarget();
            }

            if (renderOverlay)
            {
                _dirtyRectsDisplay.Tick();
            }

            try
            {
                if (scene != null && scene.Size != Size.Empty)
                {
                    IDrawingContextImpl context = null;

                    if (scene.Generation != _lastSceneId)
                    {
                        context = RenderTarget.CreateDrawingContext(this);
                        Layers.Update(scene, context);

                        RenderToLayers(scene);

                        if (DebugFramesPath != null)
                        {
                            SaveDebugFrames(scene.Generation);
                        }

                        _lastSceneId = scene.Generation;

                        composite = true;
                    }

                    if (renderOverlay)
                    {
                        context = context ?? RenderTarget.CreateDrawingContext(this);
                        RenderOverlay(scene, context);
                        RenderComposite(scene, context);
                    }
                    else if (composite)
                    {
                        context = context ?? RenderTarget.CreateDrawingContext(this);
                        RenderComposite(scene, context);
                    }

                    context?.Dispose();
                }
            }
            catch (RenderTargetCorruptedException ex)
            {
                Logging.Logger.Information("Renderer", this, "Render target was corrupted. Exception: {0}", ex);
                RenderTarget?.Dispose();
                RenderTarget = null;
            }
        }
Exemplo n.º 2
0
        internal void Render(bool forceComposite)
        {
            using (var l = _lock.TryLock())
            {
                if (l == null)
                {
                    return;
                }

                IDrawingContextImpl?context = null;
                try
                {
                    try
                    {
                        var(scene, updated) = UpdateRenderLayersAndConsumeSceneIfNeeded(ref context);
                        if (updated)
                        {
                            FpsTick();
                        }
                        using (scene)
                        {
                            if (scene?.Item != null)
                            {
                                try
                                {
                                    var overlay = DrawDirtyRects || DrawFps;
                                    if (DrawDirtyRects)
                                    {
                                        _dirtyRectsDisplay.Tick();
                                    }
                                    if (overlay)
                                    {
                                        RenderOverlay(scene.Item, ref context);
                                    }
                                    if (updated || forceComposite || overlay)
                                    {
                                        RenderComposite(scene.Item, ref context);
                                    }
                                }
                                finally
                                {
                                    scene.Item.MarkAsRendered();
                                }
                            }
                        }
                    }
                    finally
                    {
                        context?.Dispose();
                    }
                }
                catch (RenderTargetCorruptedException ex)
                {
                    Logger.TryGet(LogEventLevel.Information, LogArea.Animations)?.Log(this, "Render target was corrupted. Exception: {0}", ex);
                    RenderTarget?.Dispose();
                    RenderTarget = null;
                }
            }
        }
Exemplo n.º 3
0
 public void Dispose()
 {
     while (_states.Count != 0)
     {
         _states.Peek().Dispose();
     }
     _impl.Dispose();
 }
Exemplo n.º 4
0
        private void Render(bool forceComposite)
        {
            using (var l = _lock.TryLock())
            {
                if (l == null)
                {
                    return;
                }

                IDrawingContextImpl context = null;
                try
                {
                    try
                    {
                        IDrawingContextImpl GetContext()
                        {
                            if (context != null)
                            {
                                return(context);
                            }
                            if (RenderTarget == null)
                            {
                                RenderTarget = ((IRenderRoot)_root).CreateRenderTarget();
                            }
                            return(context = RenderTarget.CreateDrawingContext(this));
                        }

                        var(scene, updated) = UpdateRenderLayersAndConsumeSceneIfNeeded(GetContext);
                        using (scene)
                        {
                            var overlay = DrawDirtyRects || DrawFps;
                            if (DrawDirtyRects)
                            {
                                _dirtyRectsDisplay.Tick();
                            }
                            if (overlay)
                            {
                                RenderOverlay(scene.Item, GetContext());
                            }
                            if (updated || forceComposite || overlay)
                            {
                                RenderComposite(scene.Item, GetContext());
                            }
                        }
                    }
                    finally
                    {
                        context?.Dispose();
                    }
                }
                catch (RenderTargetCorruptedException ex)
                {
                    Logging.Logger.Information("Renderer", this, "Render target was corrupted. Exception: {0}", ex);
                    RenderTarget?.Dispose();
                    RenderTarget = null;
                }
            }
        }
Exemplo n.º 5
0
 public void Dispose()
 {
     while (_states.Count != 0)
     {
         _states.Peek().Dispose();
     }
     StateStackPool.Push(_states);
     _states = null;
     TransformStackPool.Push(_transformContainers);
     _transformContainers = null;
     _impl.Dispose();
 }
Exemplo n.º 6
0
 public void Dispose() => _impl.Dispose();
Exemplo n.º 7
0
 public void Dispose()
 {
     drawingContext.Dispose();
 }