From 751bdf4303f073cfa44469a78cdc670cbd9992e6 Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Mon, 15 Mar 2021 10:25:16 +0200 Subject: [PATCH] Expose IsAbandoned in the C# API (#1659) --- binding/Binding/GRContext.cs | 2 ++ binding/Binding/SkiaApi.generated.cs | 16 ++++++++++++++++ externals/skia | 2 +- tests/Tests/GRContextTest.cs | 17 +++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/binding/Binding/GRContext.cs b/binding/Binding/GRContext.cs index a73c3ec36c..b1dd7f6603 100644 --- a/binding/Binding/GRContext.cs +++ b/binding/Binding/GRContext.cs @@ -121,6 +121,8 @@ public static GRContext CreateMetal (GRMtlBackendContext backendContext, GRConte public GRBackend Backend => SkiaApi.gr_context_get_backend (Handle).FromNative (); + public bool IsAbandoned => SkiaApi.gr_context_is_abandoned (Handle); + public void AbandonContext (bool releaseResources = false) { if (releaseResources) diff --git a/binding/Binding/SkiaApi.generated.cs b/binding/Binding/SkiaApi.generated.cs index 13fdf48b15..2a3fc97fb4 100644 --- a/binding/Binding/SkiaApi.generated.cs +++ b/binding/Binding/SkiaApi.generated.cs @@ -507,6 +507,22 @@ internal static void gr_context_get_resource_cache_usage (gr_context_t context, (gr_context_get_resource_cache_usage_delegate ??= GetSymbol ("gr_context_get_resource_cache_usage")).Invoke (context, maxResources, maxResourceBytes); #endif + // bool gr_context_is_abandoned(gr_context_t* context) + #if !USE_DELEGATES + [DllImport (SKIA, CallingConvention = CallingConvention.Cdecl)] + [return: MarshalAs (UnmanagedType.I1)] + internal static extern bool gr_context_is_abandoned (gr_context_t context); + #else + private partial class Delegates { + [UnmanagedFunctionPointer (CallingConvention.Cdecl)] + [return: MarshalAs (UnmanagedType.I1)] + internal delegate bool gr_context_is_abandoned (gr_context_t context); + } + private static Delegates.gr_context_is_abandoned gr_context_is_abandoned_delegate; + internal static bool gr_context_is_abandoned (gr_context_t context) => + (gr_context_is_abandoned_delegate ??= GetSymbol ("gr_context_is_abandoned")).Invoke (context); + #endif + // gr_context_t* gr_context_make_gl(const gr_glinterface_t* glInterface) #if !USE_DELEGATES [DllImport (SKIA, CallingConvention = CallingConvention.Cdecl)] diff --git a/externals/skia b/externals/skia index 4d6d4bfbfb..173debd238 160000 --- a/externals/skia +++ b/externals/skia @@ -1 +1 @@ -Subproject commit 4d6d4bfbfb89e09ca2ac946e802943fc943d2c9b +Subproject commit 173debd238b1a55ab12f5994c5dc074fd141ccd6 diff --git a/tests/Tests/GRContextTest.cs b/tests/Tests/GRContextTest.cs index 64504299cd..dfc5d11ca8 100644 --- a/tests/Tests/GRContextTest.cs +++ b/tests/Tests/GRContextTest.cs @@ -19,6 +19,23 @@ public void CreateDefaultContextIsValid() } } + [Trait(CategoryKey, GpuCategory)] + [SkippableFact] + public void AbandonContextIsAbandoned() + { + using (var ctx = CreateGlContext()) { + ctx.MakeCurrent(); + + var grContext = GRContext.CreateGl(); + + Assert.False(grContext.IsAbandoned); + + grContext.AbandonContext(); + + Assert.True(grContext.IsAbandoned); + } + } + [Trait(CategoryKey, GpuCategory)] [SkippableFact] public void CreateDefaultContextWithOptionsIsValid()