public async Task UpdateImagesAsync(CancellationToken ct)
        {
            var args = new ImagePipeline.UpdateImageArgs
            {
                Images           = models.Images,
                LayerLevelBuffer = layerLevelBuffer,
                Progress         = models.Progress,
                TextureCache     = models.TextureCache,
                Filters          = null,
                Sync             = syncQuery
            };

            for (var i = 0; i < models.Pipelines.Count; i++)
            {
                var pipe = models.Pipelines[i];
                if (pipe.HasChanges && pipe.IsValid && pipe.IsEnabled)
                {
                    if (pipe.UseFilter)
                    {
                        args.Filters = GetPipeFilters(i);
                    }

                    await pipe.UpdateImageAsync(args, ct);
                }
            }
        }
        public async Task UpdateImagesAsync(CancellationToken ct)
        {
            var args = new ImagePipeline.UpdateImageArgs
            {
                Models  = models,
                Filters = null,
            };

            for (var i = 0; i < models.Pipelines.Count; i++)
            {
                var pipe = models.Pipelines[i];
                if (pipe.HasChanges && pipe.IsValid && pipe.IsEnabled)
                {
                    args.Filters = pipe.UseFilter ? GetPipeFilters(i) : null;

                    await pipe.UpdateImageAsync(args, ct);
                }
            }
        }
        public async Task UpdateImagesAsync(IProgress progress)
        {
            var args = new ImagePipeline.UpdateImageArgs
            {
                Models  = models,
                Filters = null,
            };

            var numCompute = models.Pipelines.Count(pipe => pipe.HasChanges && pipe.IsValid && pipe.IsEnabled);
            var curCompute = 0;

            for (var i = 0; i < models.Pipelines.Count; i++)
            {
                var pipe = models.Pipelines[i];
                if (pipe.HasChanges && pipe.IsValid && pipe.IsEnabled)
                {
                    args.Filters = pipe.UseFilter ? GetPipeFilters(i) : null;

                    await pipe.UpdateImageAsync(args, progress.CreateSubProgress((++curCompute) / (float)numCompute));
                }
            }
        }