Skip to content

Commit 82d9395

Browse files
authored
Report disposed WaylandEglWsiSurface render target (#21857)
1 parent 1bd7860 commit 82d9395

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

src/Avalonia.Wayland/Server/Transient/Rendering/WaylandEglWsiSurface.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,27 @@ private sealed class RenderTarget : EglPlatformSurfaceRenderTargetBase
3737
private IntPtr _eglWindow;
3838
private EglSurface? _eglSurface;
3939
private PixelSize _currentSize;
40+
private bool _disposed;
4041

4142
public RenderTarget(WSurface surface, EglContext context) : base(context)
4243
{
4344
_surface = surface;
45+
_surface.RegisterRenderTarget(this);
4446
}
45-
47+
4648
protected override bool SkipWaits => true;
4749

48-
public override PlatformRenderTargetState State =>
49-
IsCorrupted ? PlatformRenderTargetState.Corrupted : _surface.State;
50+
public override PlatformRenderTargetState State
51+
{
52+
get
53+
{
54+
if (_disposed)
55+
return PlatformRenderTargetState.Disposed;
56+
if (IsCorrupted)
57+
return PlatformRenderTargetState.Corrupted;
58+
return _surface.State;
59+
}
60+
}
5061

5162
public override IGlPlatformSurfaceRenderingSession BeginDrawCore(IRenderTarget.RenderTargetSceneInfo sceneInfo)
5263
{
@@ -89,6 +100,11 @@ public override IGlPlatformSurfaceRenderingSession BeginDrawCore(IRenderTarget.R
89100

90101
public override void Dispose()
91102
{
103+
if (_disposed)
104+
return;
105+
106+
_disposed = true;
107+
_surface.UnregisterRenderTarget(this);
92108
_eglSurface?.Dispose();
93109
_eglSurface = null;
94110
if (_eglWindow != IntPtr.Zero)

0 commit comments

Comments
 (0)