From 5b382ae98567fcaa913b8d8f06f37da24639ad2a Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Tue, 6 Aug 2024 04:25:18 +0600 Subject: [PATCH] Added Compositor.CreateCompositionVisualSnapshot API (#16599) * Added Compositor.CreateCompositionVisualSnapshot API * Hurr durr api compat in [Unstable] interface --------- Co-authored-by: Max Katz --- api/Avalonia.Skia.nupkg.xml | 10 +++ samples/ControlCatalog/Pages/OpenGlPage.xaml | 5 +- .../ControlCatalog/Pages/OpenGlPage.xaml.cs | 28 +++++++ .../Platform/IDrawingContextImpl.cs | 6 ++ .../Platform/IPlatformRenderInterface.cs | 8 ++ src/Avalonia.Base/Platform/IScopedResource.cs | 44 +++++++++++ .../Rendering/Composition/Compositor.cs | 45 ++++++++--- .../ServerCompositionContainerVisual.cs | 7 +- .../Server/ServerCompositionDrawListVisual.cs | 10 +-- ...verCompositionExperimentalAcrylicVisual.cs | 7 +- .../ServerCompositionSolidColorVisual.cs | 5 +- .../Server/ServerCompositionSurfaceVisual.cs | 5 +- .../ServerCompositionTarget.DirtyRects.cs | 2 +- .../Server/ServerCompositionTarget.cs | 5 +- .../Server/ServerCompositionVisual.cs | 22 +++--- .../Server/ServerCompositor.UserApis.cs | 40 ++++++++++ .../Composition/Server/ServerCompositor.cs | 25 +++++-- .../Server/ServerCustomCompositionVisual.cs | 9 +-- .../Server/ServerVisualRenderContext.cs | 75 +++++++++++++++++++ src/Avalonia.Controls/BorderVisual.cs | 6 +- .../HeadlessPlatformRenderInterface.cs | 3 + src/Skia/Avalonia.Skia/Gpu/ISkiaGpu.cs | 1 + .../Avalonia.Skia/Gpu/Metal/SkiaMetalGpu.cs | 4 + .../Avalonia.Skia/Gpu/OpenGl/GlSkiaGpu.cs | 2 + src/Skia/Avalonia.Skia/SkiaBackendContext.cs | 22 ++++++ src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs | 11 ++- .../Avalonia.Direct2D1/Direct2D1Platform.cs | 4 + 27 files changed, 349 insertions(+), 62 deletions(-) create mode 100644 api/Avalonia.Skia.nupkg.xml create mode 100644 src/Avalonia.Base/Platform/IScopedResource.cs create mode 100644 src/Avalonia.Base/Rendering/Composition/Server/ServerVisualRenderContext.cs diff --git a/api/Avalonia.Skia.nupkg.xml b/api/Avalonia.Skia.nupkg.xml new file mode 100644 index 0000000000..7abbc47cea --- /dev/null +++ b/api/Avalonia.Skia.nupkg.xml @@ -0,0 +1,10 @@ + + + + + CP0006 + M:Avalonia.Skia.ISkiaGpuWithPlatformGraphicsContext.TryGetGrContext + baseline/netstandard2.0/Avalonia.Skia.dll + target/netstandard2.0/Avalonia.Skia.dll + + diff --git a/samples/ControlCatalog/Pages/OpenGlPage.xaml b/samples/ControlCatalog/Pages/OpenGlPage.xaml index 2d1285566c..0e557cc1ad 100644 --- a/samples/ControlCatalog/Pages/OpenGlPage.xaml +++ b/samples/ControlCatalog/Pages/OpenGlPage.xaml @@ -3,8 +3,11 @@ x:Class="ControlCatalog.Pages.OpenGlPage" xmlns:pages="using:ControlCatalog.Pages" xmlns:openGl="clr-namespace:ControlCatalog.Pages.OpenGl"> - + + diff --git a/samples/ControlCatalog/Pages/OpenGlPage.xaml.cs b/samples/ControlCatalog/Pages/OpenGlPage.xaml.cs index 28f4d7e073..f7a7e60f89 100644 --- a/samples/ControlCatalog/Pages/OpenGlPage.xaml.cs +++ b/samples/ControlCatalog/Pages/OpenGlPage.xaml.cs @@ -1,8 +1,12 @@ +using System.Runtime.InteropServices; using Avalonia; using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.OpenGL; using Avalonia.OpenGL.Controls; +using Avalonia.Rendering.Composition; using ControlCatalog.Pages.OpenGl; // ReSharper disable StringLiteralTypo @@ -16,6 +20,30 @@ namespace ControlCatalog.Pages AvaloniaXamlLoader.Load(this); this.FindControl("GL") !.Init(this.FindControl("Knobs")!); + + AttachedToVisualTree += delegate + { + if (TopLevel.GetTopLevel(this) is Window) + this.FindControl