Browse Source

call base.BeginDraw we dont need our own session class.

tmp-winuicomp_with_manual_fbo
Dan Walmsley 6 years ago
parent
commit
f0c2ff7394
  1. 52
      src/Windows/Avalonia.Win32/Composition/CompositionHost.cs

52
src/Windows/Avalonia.Win32/Composition/CompositionHost.cs

@ -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; }
}
}

Loading…
Cancel
Save