Example #1
0
        public async Task<List<WriteableBitmap>> Animate(int renderWidth, int renderHeight, TimeSpan length, ProgressToken token, ParameterBinding start, ParameterBinding end)
        {
            const int parallelism = 1; // TODO change _lastRot variables so animations can be rendered in parallel     
            var totalFrames = (int)length.TotalSeconds*AnimationFps;
            
            var frames = new List<WriteableBitmap>();
            for (var frame = 0; frame < totalFrames; frame += parallelism)
            {
                var frameBindings = Enumerable.Range(frame, parallelism).Select(i => start.Interpolate(end, i, totalFrames));
                var renderTasks = frameBindings.Select(b => RenderAsync(renderWidth, renderHeight, b, null));

                var rendered = await Task.WhenAll(renderTasks);
                frames.AddRange(rendered);

                if (token != null)
                {
                    token.Value = (int)((float)frame / totalFrames * 100);
                }
            }

            return frames;
        }