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;
}
}