Browse Source

Merge pull request #8706 from AvaloniaUI/fix-android-rendering

Fix composition rendering after render target was corrupted
pull/8710/head
Nikita Tsukanov 4 years ago
committed by GitHub
parent
commit
c005ca7bb8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      src/Android/Avalonia.Android/AndroidPlatform.cs
  2. 7
      src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs

12
src/Android/Avalonia.Android/AndroidPlatform.cs

@ -17,10 +17,8 @@ namespace Avalonia
{ {
public static T UseAndroid<T>(this T builder) where T : AppBuilderBase<T>, new() public static T UseAndroid<T>(this T builder) where T : AppBuilderBase<T>, new()
{ {
var options = AvaloniaLocator.Current.GetService<AndroidPlatformOptions>() ?? new AndroidPlatformOptions();
return builder return builder
.UseWindowingSubsystem(() => AndroidPlatform.Initialize(options), "Android") .UseWindowingSubsystem(() => AndroidPlatform.Initialize(), "Android")
.UseSkia(); .UseSkia();
} }
} }
@ -45,9 +43,9 @@ namespace Avalonia.Android
internal static Compositor Compositor { get; private set; } internal static Compositor Compositor { get; private set; }
public static void Initialize(AndroidPlatformOptions options) public static void Initialize()
{ {
Options = options; Options = AvaloniaLocator.Current.GetService<AndroidPlatformOptions>() ?? new AndroidPlatformOptions();
AvaloniaLocator.CurrentMutable AvaloniaLocator.CurrentMutable
.Bind<IClipboard>().ToTransient<ClipboardImpl>() .Bind<IClipboard>().ToTransient<ClipboardImpl>()
@ -61,12 +59,12 @@ namespace Avalonia.Android
.Bind<IRenderLoop>().ToConstant(new RenderLoop()) .Bind<IRenderLoop>().ToConstant(new RenderLoop())
.Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>(); .Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>();
if (options.UseGpu) if (Options.UseGpu)
{ {
EglPlatformOpenGlInterface.TryInitialize(); EglPlatformOpenGlInterface.TryInitialize();
} }
if (options.UseCompositor) if (Options.UseCompositor)
{ {
Compositor = new Compositor( Compositor = new Compositor(
AvaloniaLocator.Current.GetRequiredService<IRenderLoop>(), AvaloniaLocator.Current.GetRequiredService<IRenderLoop>(),

7
src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionTarget.cs

@ -78,6 +78,13 @@ namespace Avalonia.Rendering.Composition.Server
if (Root == null) if (Root == null)
return; return;
if ((_renderTarget as IRenderTargetWithCorruptionInfo)?.IsCorrupted == true)
{
_renderTarget!.Dispose();
_renderTarget = null;
}
_renderTarget ??= _renderTargetFactory(); _renderTarget ??= _renderTargetFactory();
Compositor.UpdateServerTime(); Compositor.UpdateServerTime();

Loading…
Cancel
Save