diff --git a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs index 46872f903e..0518e25286 100644 --- a/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs +++ b/src/Skia/Avalonia.Skia/PlatformRenderInterface.cs @@ -18,7 +18,7 @@ namespace Avalonia.Skia private GRContext GrContext { get; } - public PlatformRenderInterface(ICustomSkiaGpu customSkiaGpu) + public PlatformRenderInterface(ICustomSkiaGpu customSkiaGpu, long maxResourceBytes) { if (customSkiaGpu != null) { @@ -26,6 +26,10 @@ namespace Avalonia.Skia GrContext = _customSkiaGpu.GrContext; + GrContext.GetResourceCacheLimits(out var maxResources, out _); + + GrContext.SetResourceCacheLimits(maxResources, maxResourceBytes); + return; } @@ -39,6 +43,10 @@ namespace Avalonia.Skia : GRGlInterface.AssembleGlesInterface((_, proc) => display.GlInterface.GetProcAddress(proc))) { GrContext = GRContext.Create(GRBackend.OpenGL, iface); + + GrContext.GetResourceCacheLimits(out var maxResources, out _); + + GrContext.SetResourceCacheLimits(maxResources, maxResourceBytes); } display.ClearContext(); } diff --git a/src/Skia/Avalonia.Skia/SkiaOptions.cs b/src/Skia/Avalonia.Skia/SkiaOptions.cs index f4b8fe3c1d..b180466c4e 100644 --- a/src/Skia/Avalonia.Skia/SkiaOptions.cs +++ b/src/Skia/Avalonia.Skia/SkiaOptions.cs @@ -8,9 +8,18 @@ namespace Avalonia /// public class SkiaOptions { + public SkiaOptions() + { + MaxGpuResourceSizeBytes = 512000000; + } /// /// Custom gpu factory to use. Can be used to customize behavior of Skia renderer. /// public Func CustomGpuFactory { get; set; } + + /// + /// The maximum number of bytes for video memory to store textures and resources. + /// + public long MaxGpuResourceSizeBytes { get; set; } } } diff --git a/src/Skia/Avalonia.Skia/SkiaPlatform.cs b/src/Skia/Avalonia.Skia/SkiaPlatform.cs index b4b340d24d..9a5725e06f 100644 --- a/src/Skia/Avalonia.Skia/SkiaPlatform.cs +++ b/src/Skia/Avalonia.Skia/SkiaPlatform.cs @@ -18,7 +18,7 @@ namespace Avalonia.Skia public static void Initialize(SkiaOptions options) { var customGpu = options.CustomGpuFactory?.Invoke(); - var renderInterface = new PlatformRenderInterface(customGpu); + var renderInterface = new PlatformRenderInterface(customGpu, options.MaxGpuResourceSizeBytes); AvaloniaLocator.CurrentMutable .Bind().ToConstant(renderInterface)