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)