|
|
|
@ -69,58 +69,8 @@ namespace Avalonia.Win32 |
|
|
|
|
|
|
|
var restoreContext = _context.MakeCurrent(surface); |
|
|
|
|
|
|
|
return new Session(_display, _context, surface, _info, l, restoreContext, () => { _surfaceInterop.EndDraw(); }, true); |
|
|
|
return base.BeginDraw(surface, _info, () => { _surfaceInterop.EndDraw(); }, true); |
|
|
|
} |
|
|
|
|
|
|
|
public override void Dispose() |
|
|
|
{ |
|
|
|
_surfaceInterop.EndDraw(); |
|
|
|
base.Dispose(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
class Session : IGlPlatformSurfaceRenderingSession |
|
|
|
{ |
|
|
|
private readonly EglContext _context; |
|
|
|
private readonly EglSurface _glSurface; |
|
|
|
private readonly EglGlPlatformSurfaceBase.IEglWindowGlPlatformSurfaceInfo _info; |
|
|
|
private readonly EglDisplay _display; |
|
|
|
private readonly IDisposable _lock; |
|
|
|
private readonly IDisposable _restoreContext; |
|
|
|
private readonly Action _onFinish; |
|
|
|
|
|
|
|
|
|
|
|
public Session(EglDisplay display, EglContext context, |
|
|
|
EglSurface glSurface, EglGlPlatformSurfaceBase.IEglWindowGlPlatformSurfaceInfo info, |
|
|
|
IDisposable @lock, IDisposable restoreContext, Action onFinish, bool isYFlipped) |
|
|
|
{ |
|
|
|
IsYFlipped = isYFlipped; |
|
|
|
_context = context; |
|
|
|
_display = display; |
|
|
|
_glSurface = glSurface; |
|
|
|
_info = info; |
|
|
|
_lock = @lock; |
|
|
|
_restoreContext = restoreContext; |
|
|
|
_onFinish = onFinish; |
|
|
|
} |
|
|
|
|
|
|
|
public void Dispose() |
|
|
|
{ |
|
|
|
_context.GlInterface.Flush(); |
|
|
|
_display.EglInterface.WaitGL(); |
|
|
|
_glSurface.SwapBuffers(); |
|
|
|
_display.EglInterface.WaitClient(); |
|
|
|
_display.EglInterface.WaitGL(); |
|
|
|
_display.EglInterface.WaitNative(EglConsts.EGL_CORE_NATIVE_ENGINE); |
|
|
|
_restoreContext.Dispose(); |
|
|
|
_lock.Dispose(); |
|
|
|
_onFinish?.Invoke(); |
|
|
|
} |
|
|
|
|
|
|
|
public IGlContext Context => _context; |
|
|
|
public PixelSize Size => _info.Size; |
|
|
|
public double Scaling => _info.Scaling; |
|
|
|
public bool IsYFlipped { get; } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|