OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / AvaloniaShell.Tests / Fakes / FakeRenderer.cs

72 lines · csharp ref:
using System.Collections.Generic;
using System.Threading.Tasks;

using IFSEngine.Model;

using IFSRenderer.AvaloniaShell.Rendering;

namespace IFSRenderer.AvaloniaShell.Tests.Fakes;

/// <summary>
/// Records the engine calls a queued action makes, so a test can assert that a gesture asked
/// for the right invalidation without a GPU being involved.
/// </summary>
public sealed class FakeRenderer : IRenderer
{
    /// <summary>Every call, in order, as method names.</summary>
    public List<string> Calls { get; } = [];

    /// <summary>The fractal most recently uploaded.</summary>
    public IFS LastLoaded { get; private set; }

    public int ParamsInvalidations { get; private set; }
    public int HistogramInvalidations { get; private set; }

    public void LoadParams(IFS ifs)
    {
        LastLoaded = ifs;
        Calls.Add(nameof(LoadParams));
    }

    public void InvalidateParamsBuffer()
    {
        ParamsInvalidations++;
        Calls.Add(nameof(InvalidateParamsBuffer));
    }

    public void InvalidateHistogramBuffer()
    {
        HistogramInvalidations++;
        Calls.Add(nameof(InvalidateHistogramBuffer));
    }

    public int PaletteInvalidations { get; private set; }

    public void InvalidatePaletteBuffer()
    {
        PaletteInvalidations++;
        Calls.Add(nameof(InvalidatePaletteBuffer));
    }

    public void SetHistogramScale(double scale) => Calls.Add(nameof(SetHistogramScale));
    public void SetHistogramScaleToDisplay() => Calls.Add(nameof(SetHistogramScaleToDisplay));

    public bool MarkAreaInFocus { get; set; }
    public bool EnableDE { get; set; }
    public int DEMaxRadius { get; set; } = 9;
    public double DEPower { get; set; } = 0.2;
    public double DEThreshold { get; set; } = 0.4;
    public int MaxFilterRadius { get; set; }
    public bool EnablePerceptualUpdates { get; set; } = true;
    public int TargetFramerate { get; set; } = 60;

    public int WorkgroupCount { get; private set; } = 256;

    public Task SetWorkgroupCount(int count)
    {
        WorkgroupCount = count;
        Calls.Add(nameof(SetWorkgroupCount));
        return Task.CompletedTask;
    }
}